AccessTokens, возвращаемые для Active Directory, отличаются в разных проектах - PullRequest
0 голосов
/ 05 октября 2018

Я экспериментировал с доступом Azure Active Directory для Java с использованием двух примеров проектов:

1) https://github.com/AzureAD/azure-activedirectory-library-for-java, который создает автономную войну с использованием токенов OAuth для безопасности, и

2) https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-active-directory-spring-boot-backend-sample для контейнеров с подпружиненной загрузкой

Я столкнулся с большой разницей в способах использования API, которую я не могу понять.

В обоих случаях я получаю токен OAuth для AD, выполнив вход с использованием своих учетных данных Azure.В ответе Http я получаю код авторизации в виде:

AQABAAIAAAD .....

Затем, используя следующий URL-адрес в качестве authContext: https://login.microsoftonline.com/{tenantId}

Я получаю AuthenticationResult, сделав следующий вызов:

Future<AuthenticationResult> future = authContext.acquireTokenByAuthorizationCode(authorizationCode, redirectUri, credential, null);

в проекте Adal4j (1), AccessToken AuthenticationResult имеет вид:

eyJ0eXAiOiJKV1QiLCJhIII...

, который я могу использовать в качестве токена Bearer в HTTP-вызове для получения изображения профиля пользователя с помощью https://graph.windows.net/myorganization/me/thumbnailPhoto?api-version=1.6

, тогда как в примере SpringBoot AD AccessToken вернулиз точно того же вызова имеет вид:

AQABAAAAAADXzZ3ifr-GRbDT ....

и если я использую это точно так же, чтобы попытаться получитьРисунок профиля пользователя, я получаю 401 Несанкционированный ответ

В чем причина различий в форме и использовании этих AccessTokens?

1 Ответ

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

В чем причина различий в форме и использовании этих AccessTokens?

Я предполагаю, что вы получили токен доступа authorization_code , а не токен носителя.

Как отметил Рохит Сайгал, вы можете использовать JWT.IO или JWT.MS , чтобы проверить это.

Если мы хотим получитьтокен доступа для графа Azure AD мы могли бы использовать следующий код, чтобы сделать это.

public String index(Model model, OAuth2AuthenticationToken authentication) {
...
DefaultOidcUser user = (DefaultOidcUser)authentication.getPrincipal();
String accessToken = user.getIdToken().getTokenValue(); 
...
}

Затем мы могли бы использовать токен доступа для доступа к API-интерфейсу графа Azure AD, если вы получили соответствующее разрешение.

...