代码之家  ›  专栏  ›  技术社区  ›  faraz

Azure active directory身份验证库(ADAL)注销不工作

  •  0
  • faraz  · 技术社区  · 7 年前

    我使用我的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 回复  |  直到 7 年前
        1
  •  1
  •   Bryan    7 年前

    您没有在请求中包含访问令牌。您可以通过在发送请求之前向请求添加授权标头来实现这一点。

    // ... 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请求之后将调用下移到。或者考虑完全取消通话。