【问题标题】:How to access Azure AD 2.0 Graph with Azure AD 1.0 Token如何使用 Azure AD 1.0 令牌访问 Azure AD 2.0 Graph
【发布时间】:2018-10-18 10:50:11
【问题描述】:

我们有一个大型的微服务架构。所有服务都使用 JwtBearer 针对 Azure AD 1.0 端点。

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

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

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

我们使用这个代码知道吗

// 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

谢谢,本

【问题讨论】:

  • 为什么需要使用v2.0?不能用 v1.0 访问 MS Graph 吗?
  • @juunas 如果我将_graphOptions.Authority 从 2.0 更改为 1.0,我会得到同样的异常
  • @juunas 看起来这种代码(MSAL 库)仅支持 Azure AD 2.0。问题是带有 ADAL 的 Graph 1.0 不支持用户扩展。但是我们能否使用 V2 令牌访问 V1 API?或者如何与我们不操作但使用 V1 的应用程序进行通信?
  • 啊.. 您可能需要使用 v1 手动执行 HTTP 请求
  • @juunas 我从 MSAL 中删除了所有依赖项并恢复为 ADAL。可惜目前没有有效的迁移策略 :-( 感谢您的帮助!

标签: azure-active-directory microsoft-graph-api


【解决方案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));

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2019-08-25
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多