Я экспериментировал с доступом 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?