AADSTS5002710: недопустимый токен JWT: заголовок имеет неверный формат.

Я пытаюсь реализовать поток «От имени» между моим клиентом (ReactJS), сервером Express + Node.js (API) и Microsoft Graph.

До сих пор я запросил accessToken у Microsoft (клиент) и сделал запрос к моему API.

Я столкнулся с ошибкой «AADSTS5002710: недопустимый токен JWT: заголовок имеет неверный формат». когда я пытаюсь отправить запрос Axios на публикацию из моего API в https://login.microsoftonline.com/tenantID/oauth2/v2.0/token

Полная ошибка:
{ error: 'invalid_request', error_description: 'AADSTS5002710: Invalid JWT token: header is malformed.\r\n' + 'Trace ID: 068a382b-6f83-40f6-b1b1-7134223f4500\r\n' + 'Correlation ID: f46a2c03-84e8-46b3-b9d6-467174befa0b\r\n' + 'Timestamp: 2021-01-06 16:26:40Z', error_codes: [ 5002710 ], timestamp: '2021-01-06 16:26:40Z', trace_id: '068a382b-6f83-40f6-b1b1-7134223f4500', correlation_id: 'f46a2c03-84e8-46b3-b9d6-467174befa0b' }

Тело моего запроса соответствует руководству «https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow».

Я постоянно получаю указанную выше ошибку из-за онлайн-серверов Microsoft.

Я сделал исходный (Клиентский) запрос со своей собственной областью действия.
api://54ee17f...cfe06/Access.Test

2 ответа

Я следую руководству по использованию потока On-Behalf-Of в Postman. Но это работает хорошо.

Мои шаги здесь:

  1. Добавить разрешение API веб-API B в веб-API A

  1. Запросите веб-API A, чтобы получить токен доступа ( assertionследующего шага) с потоком кода авторизации

ПОЛУЧИТЬ

      https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
?scope={like api://1108f6-xxxxxxx-9f622/test} openid
&redirect_uri={redirect_uri of Web API A}
&nonce=123
&client_id={client-id of Web API A}
&response_type=id_token token
  1. Запросите веб-API B, чтобы получить маркер доступа для Microsoft Graph API.

ПОЧТА

      https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&client_id={client_id of Web API B}
&client_secret={client_secret}
&assertion={access token from previous step}
&scope=https://graph.microsoft.com/user.read offline_access
&requested_token_use=on_behalf_of
  1. Вызов Microsoft Graph API, например GET https://graph.microsoft.com/v1.0/users.

Вы можете расшифровать свой токен доступа (утверждение) в https://jwt.io/ и проверить HEADER.

Ответ выше абсолютно правильный. У меня недостаточно репутации, чтобы комментировать, но я некоторое время крутился над этим, и это единственный ответ, который я видел, чтобы понять это.

Для людей, которые работают над пользовательскими надстройками Outlook и пытаются выполнить единый вход. Вы найдете их токен доступа, который они вам дадут, даже если он должен работать, поскольку граф не работает. Вы должны использовать этот токен для последующей аутентификации на серверной стороне, чтобы получить другой токен доступа, который сервер выполняет вызов графа от имени этого пользователя. Объяснение того, как это сделать в ответе выше, — это именно то, что вам нужно. Если вы похожи на меня и создали надстройку без серверной части, вы можете просто создать функцию Azure или рабочий процесс приложения логики, чтобы выполнить вызов графа от имени пользователя.

Другие вопросы по тегам