解析身份令牌时出现"元数据访问异常"的原因是什么?



在我们的生产环境中,我们在验证一个特定用户的身份令牌时会收到Microsoft.Exchange.WebServices.Auth.Validation.MetadataAccessException

验证代码为:

var token = (AppIdentityToken)AuthToken.Parse(rawToken);
token.Validate(new Uri(hostUri));

这仅发生在一个特定用户身上,并且验证已成功完成几次。大多数情况下,它失败并显示完整消息:

Microsoft.Exchange.WebServices.Auth.Validation.MetadataAccessException: 无法检索元文档。远程服务器返回了 错误: (500( 内部服务器错误

以前有人见过这个例外吗?

异常消息对我来说似乎很有描述性。Validate方法调用远程服务器来检索元数据文档,并从服务器收到 500 错误。这就是异常的原因。

调用的 URL 嵌入在令牌有效负载的appctx.amurl字段中,如本文档中的以下示例所示:

{ 
"aud": "https://mailhost.contoso.com/IdentityTest.html", 
"iss": "00000002-0000-0ff1-ce00-000000000000@mailhost.contoso.com", 
"nbf": "1331579055", 
"exp": "1331607855", 
"appctxsender": "00000002-0000-0ff1-ce00-000000000000@mailhost.context.com",
"isbrowserhostedapp": "true",
"appctx": { 
"msexchuid": "53e925fa-76ba-45e1-be0f-4ef08b59d389@mailhost.contoso.com",
"version": "ExIdTok.V1",
"amurl": "https://mailhost.contoso.com:443/autodiscover/metadata/json/1"
} 
}

在示例中,您可以看到amurl字段,这是在Validate期间调用的内容。 本文档进一步描述了验证过程,包括在第三步中检索元数据文档。

真正的问题是,尝试检索元数据文档时出现 500 错误的原因是什么? 这可能会在某些服务器端日志中找到。 只是一个猜测,但既然你说它有时会成功,也许问题与服务器上的负载有关。 您需要进一步调查才能找到答案。

至于"以前有人见过这个例外吗?不是我 - 但我相信答案是肯定的。;)

最新更新