如何使用Azure AD 1.0令牌访问Azure AD 2.0图

时间:2018-10-18 10:50:11

标签: azure-active-directory microsoft-graph

我们拥有大型的微服务架构。所有服务均针对Azure AD 1.0终结点与JwtBearer一起使用。

现在,我们要访问Azure AD的用户架构扩展。在这种情况下,推荐的方法是Microsoft Graph。但是我们现在不希望将所有服务和身份验证端点都移动到2.0。

但是问题是,Azure AD 1.0的令牌对于获取Azure AD 2.0的代销令牌无效:

  

Microsoft.Identity.Client.MsalUiRequiredException:AADSTS70002:   验证凭据时出错。 AADSTS50013:令牌发行者没有   匹配api版本:v2不能使用版本1令牌   端点

我们正确地使用此代码

// create instance to read cca with a user token cache
ConfidentialClientApplication cca =
    new ConfidentialClientApplication(_azureOptions.ClientId, _azureOptions.RedirectUri,
        new ClientCredential(_azureOptions.ClientSecret),
        userTokenCache, null);

// try to get an on behalf token
AuthenticationResult result;
try
{
    result = await cca.AcquireTokenOnBehalfOfAsync(
        _graphOptions.GetScopesCollection(),
        new UserAssertion(accessToken.RawData), _graphOptions.Authority);
}
catch (Exception exc)
{
    // ...
    throw;
}

在这种情况下,_azureOptions适用于Azure AD 1.0,_graphOptions适用于2.0(/v2.0终结点)

例外发生在AcquireTokenOnBehalfOfAsync

谢谢,本

1 个答案:

答案 0 :(得分:1)

答案是:ADAL和MSAL之间没有混杂。

我们已经重新编写了代码以支持ADAL。 这是我们的测试代码:

AuthenticationContext authContext =
    new AuthenticationContext(_azureOptions.Authority);

ClientCredential clientCredential;
try
{
    clientCredential = new ClientCredential(_azureOptions.ClientId, _azureOptions.ClientSecret);


}
catch (Exception exc)
{
    // ...
    throw;
}

// try to get an on behalf token
AuthenticationResult result;
try
{
    result = await authContext.AcquireTokenAsync(
        "https://graph.microsoft.com/",
        clientCredential,
        new UserAssertion(accessToken.RawData));
}
catch (Exception exc)
{
    // ...
    throw;
}

// Access the graph 
GraphServiceClient graphServiceClient =
    new GraphServiceClient(new AccessTokenAuthenticationProvider(result.AccessToken));