" MetadataAccessException"的原因是什么?解析身份令牌时?

时间:2018-06-07 16:39:55

标签: c# exchangewebservices

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

验证码是:

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

仅对一个特定用户发生这种情况,并且验证已成功完成几次。大部分时间它都失败并显示完整的消息:

  

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

之前有没有人见过这个例外?

1 个答案:

答案 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错误的原因是什么?这可能会在某些服务器端日志中找到。只是一个猜测,但既然你说它有时成功,可能问题与服务器上的负载有关。您需要进一步调查才能找到答案。

至于"之前有没有人见过这个例外?"不是我 - 但我确定答案是肯定的。 ;)