在我们的生产环境中,我们在验证一个特定用户的身份令牌时会收到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 错误的原因是什么? 这可能会在某些服务器端日志中找到。 只是一个猜测,但既然你说它有时会成功,也许问题与服务器上的负载有关。 您需要进一步调查才能找到答案。
至于"以前有人见过这个例外吗?不是我 - 但我相信答案是肯定的。;)