2016-11-18 73 views
0

如果我从我们的服务调用AuthenticationContext.AcquireToken,它会在某种情况下抛出AdalException,因为我发送的令牌缺少必需的声明。我调用AcquireToken时的响应包含JSON,并且缺少索赔。我希望能够获得该JSON(特别是缺少的索赔信息),以便我可以尝试用缺少的索赔重新授权用户。如何从AdalException中检索JSON响应?

一旦我赶上从调用AcquireToken的AdalException,我怎样才能在JSON响应,以找出哪些要求失踪?如果我试图让在AdalException从的InnerException响应流:

catch (AdalException ex) 
{ 
    WebException webex = (WebException)ex.InnerException; 
    WebResponse response = webex.Response; 
    Stream responseStream = response.GetResponseStream(); 
    ... 

...然后我得到了responseStream拥有的CanRead,CanSeek和CanWrite属性都设置为false。因此,我不确定如何检索丢失的声明参数,因为我实际上无法从该流中读取。

+0

什么确切异常消息,你得后你叫''AcquireToken方法?并请向我们展示您正在开发的代码。我们没有发送声明来获取令牌,而是Auzre AD需要基于您正在整合的[OAuth 2.0](https://tools.ietf.org/html/rfc6749)授权流程的参数。 –

+0

请帮助我了解您需要查看的部分代码。涉及客户端/服务应用程序的身份验证代码可能为数千行。哪部分与此有关?在客户端上,我们调用WebAuthenticationCoreManager.GetTokenSilentlyAsync()。这为我们的应用程序提供了一个令牌,可以在调用我们的服务时填入承载HTTP头中。我们的服务读取头文件(通过调用ClaimsPrincipal.Current.Identities.First()。BootstrapContext),然后将其传递给AuthenticationContext.AcquireToken。这会引发以下消息的异常: –

+0

{“AADSTS50079:由于您的管理员进行了配置更改,或者因为您搬到新位置,您必须注册多因素身份验证才能访问'00000002-0000-0ff1-ce00 -000000000000' \ r \ nTrace ID:9dd52cb2-f230-4782-9c5a-b6cc11cfd5b3 \ r \ nCorrelation ID:d92e3da9-6bf2-446e-AFC2-ca1e91d5edfe \ r \ nTimestamp:2016年11月21日17:00:56Z” }。我们从AAD获得的JSON响应具有其中缺失的索赔参数:索赔=%7B%22access_token%22%3A%7B%22%PERSONAL%22%3A%7B%22基本%22%3A%2C%22%22%3A %5B%22d37c654b-b508-48ff-867c-77134090a605%22%5D%7D%7D%7D。 –

回答