Azure Active Directory身份验证库(ADAL)注销无法正常工作

时间:2017-09-15 16:49:31

标签: azure xamarin xamarin.forms azure-active-directory adal

我使用了我的Azure Active Directory,并使用ADAL库获取令牌并使用该令牌调用api。我用来获取令牌的代码如下所示:

var url = "https://login.microsoftonline.com/something.onmicrosoft.com/oauth2/logout?post_logout_redirect_uri=www.google.com";

AuthenticationContext ac = new AuthenticationContext(APIsConstant.authorityForDomain2);
AuthenticationResult ar = await ac.AcquireTokenAsync(APIsConstant.graphResourceUriForDomain2, APIsConstant.clientIdForDomain2, new Uri("www.google.com"),string.Empty,string.Empty);
string accessToken = ar.AccessToken;

ac.TokenCache.Clear();

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, url);
var response = await client.SendAsync(request);

1 个答案:

答案 0 :(得分:1)

您未在请求中包含访问令牌。您可以通过在发送请求之前向请求添加Authorization标头来实现此目的。

// ... code to get authentication result ...

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, url);
// Add an Authorization header using your authentication result (ar)
request.Headers.TryAddWithoutValidation("Authorization", ar.CreateAuthorizationHeader());
var response = await client.SendAsync(request);

请注意,您不需要将身份验证结果的访问令牌存储在变量中。您可以直接使用包含令牌的CreateAuthorizationHeader方法。

您可能还需要更改拨打ac.TokenCache.Clear();的位置。正如您现在所拥有的那样,它可能会删除刚刚创建的令牌,即使使用授权标头,请求仍然会失败。您可以在获得身份验证结果之前将呼叫向上移动,或在发出API请求之后向下移动呼叫。或者考虑完全取消通话。