Как получить доступ к Azure AD 2.0 Graph с помощью токена Azure AD 1.0 - PullRequest
0 голосов
/ 18 октября 2018

У нас большая микро-сервисная архитектура.Все службы работают с 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;
}

В этомcase _azureOptions работает на Azure AD 1.0 и _graphOptions на 2.0 (конечная точка /v2.0)

Исключения случаются на AcquireTokenOnBehalfOfAsync

Спасибо, Бен

1 Ответ

0 голосов
/ 18 октября 2018

Ответ таков: между 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));
...