在我们的生产环境中,我们在为一个特定用户验证身份令牌时收到Microsoft.Exchange.WebServices.Auth.Validation.MetadataAccessException
。
验证码是:
var token = (AppIdentityToken)AuthToken.Parse(rawToken);
token.Validate(new Uri(hostUri));
仅对一个特定用户发生这种情况,并且验证已成功完成几次。大部分时间它都失败并显示完整的消息:
Microsoft.Exchange.WebServices.Auth.Validation.MetadataAccessException: 无法检索元文档。远程服务器返回了 错误:(500)内部服务器错误
之前有没有人见过这个例外?
答案 0 :(得分:0)
异常消息对我来说似乎很有描述性。 Validate
方法调用远程服务器来检索元数据文档,并从服务器获得500错误。这是例外的原因。
调用的URL嵌入在令牌有效内容的appctx.amurl
字段中,如以下从this doc获取的示例所示:
{
"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
期间调用的字段。进一步描述了验证过程in this document,包括在第三步中检索元数据文档。
真正的问题是,尝试检索metatdata文档时500错误的原因是什么?这可能会在某些服务器端日志中找到。只是一个猜测,但既然你说它有时成功,可能问题与服务器上的负载有关。您需要进一步调查才能找到答案。
至于"之前有没有人见过这个例外?"不是我 - 但我确定答案是肯定的。 ;)