2017-09-15 60 views
0

我使用了Azure Active Directory,并使用ADAL库来获取令牌并使用该令牌调用api。我用来获取令牌的代码如下所示:Azure活动目录身份验证库(ADAL)注销不起作用

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); 
+0

我被困在同一个问题上。什么是东西.onmicrosoft.com? – Kunal

回答

1

您没有在请求中包含访问令牌。您可以通过在发送请求之前向请求添加授权标头来完成此操作。

// ... 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请求后再转移。或者考虑完全删除呼叫。