【问题标题】:Azure active directory authentication library (ADAL) logout not workingAzure 活动目录身份验证库 (ADAL) 注销不起作用
【发布时间】:2018-02-24 22:12:08
【问题描述】:

我使用了 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);

【问题讨论】:

  • 我被困在同一个问题上。什么是.onmicrosoft.com?

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


【解决方案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 请求之后。或者考虑完全取消呼叫。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 2020-11-30
    • 2017-08-29
    • 2015-01-31
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多