Azure 活动目录身份验证库 (ADAL) 注销不起作用
Azure active directory authentication library (ADAL) logout not working
我使用我的 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);
您没有在请求中包含访问令牌。您可以通过在发送请求之前向请求添加授权 header 来做到这一点。
// ... 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();
。正如您现在拥有的那样,它可能会删除刚刚创建的令牌,即使有授权 header,请求仍然会失败。您可以将调用向上移动到获得身份验证结果之前,或者向下移动到发出 API 请求之后。或者考虑完全取消通话。
我使用我的 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);
您没有在请求中包含访问令牌。您可以通过在发送请求之前向请求添加授权 header 来做到这一点。
// ... 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();
。正如您现在拥有的那样,它可能会删除刚刚创建的令牌,即使有授权 header,请求仍然会失败。您可以将调用向上移动到获得身份验证结果之前,或者向下移动到发出 API 请求之后。或者考虑完全取消通话。