OAuth с использованием login.microsoft.com возвращает несовместимые токены - PullRequest
0 голосов
/ 23 мая 2018

Я использую office-js-helpers Библиотека аутентификации .Используя конечную точку Microsft Azure AD 2.0 Converged auth, я проверил имена входа пользователя AD (принадлежащего клиенту AD) и учетной записи ...@gmail.com, зарегистрированной в Microsoft.

Они оба возвращают одинаковую полезную нагрузку с access_token имущество.Основное отличие состоит в том, что для пользователя AD access_token - это подписанный JWT, тогда как для учетной записи, не относящейся к AD, токен доступа представляет собой строку в кодировке base64 (и, возможно, в зашифрованном / кодированном виде).

Я могу использовать любой токен для других API-интерфейсов Microsoft, таких как Graph API, поэтому я не указываю на ошибку.Однако я надеялся использовать access_token в качестве JWT для моего собственного API.

Есть ли способ заставить конвергентную службу аутентификации вернуть JWT для всех имен входа?

Кто-нибудь имел дело с этим и придумал разумный обходной путь?

1 Ответ

0 голосов
/ 23 мая 2018

Хотя учетные записи MSA не возвращают JWT на основе access_token, вы можете запросить JWT на основе id_token, используя OpenID Connect .

Самый простойПодумать о потоке OpenID - это вариант предоставления кода авторизации OAuth 2.0.Он использует ту же общую модель с несколькими дополнительными параметрами.

При первоначальном вызове провайдера:

  1. Добавьте id_token к параметру запроса response_type.

  2. Добавитьopenid, email и profile для параметра запроса scope

Окончательный результат должен выглядеть примерно так:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id={ID}&response_type=id_token+code&
redirect_uri={URI}&scope=openid+email+profile+offline_access+user.read

Youзатем завершите тот же рабочий процесс, который вы используете сегодня, с предоставлением кода авторизации.Однако последний шаг теперь будет включать дополнительное свойство id_token в полезную нагрузку JSON:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "token_type": "Bearer",
    "expires_in": 3599,
    "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}

Этот id_token также будет токеном на основе JWT и может быть легко декодирован так же, как выделая с JWT access_token, вы возвращаетесь из AAD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...