我们拥有大型的微服务架构。所有服务均针对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
谢谢,本
答案 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));