Microsoft Graph API redirect_uri не разрешает строки запросов - PullRequest
0 голосов
/ 07 мая 2018

Мы пытаемся перейти от старого API WindowsLive к новому Microsoft Graph API. В процессе мы сталкиваемся с трудностями с обязательным параметром OAuth 2.0 redirect_uri в приложении.

Согласно Oauth 2.0 RFC , redirect_uri должен быть абсолютным путем, но может содержать правильно закодированную строку запроса.

В нашем приложении для Windows мы настроили абсолютный путь - их инструмент приложения не позволяет добавлять строки запроса: https://example.com/index.php

В нашем OAuth-запросе используется redirect_uri с URL-кодированием, включая параметры запроса. Это необходимо, мы используем CMS (Joomla), которая должна знать, что должно обрабатывать запрос:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
 response_type=code&
 client_id={string}&    
 redirect_uri=https%3A%2F%2Fexample.com%2Findex.php%3Foption%3Dcom_jfbconnect%26task%3Dauthenticate.callback%26provider%3Dwindowslive&
 scope=user.read&
 state={string}&
 access_type=offline&
 approval_prompt=auto

Однако API Graph отклоняет это с помощью:

«URL-адрес ответа, указанный в запросе, не соответствует URL-адресу ответа, настроенному для приложения»

Кто-нибудь еще сталкивался с этим или понимал, почему Graph API не принимает параметры запроса ни в конфигурации приложения, ни в запросах токена?

Редактировать - 5/8 - Однако в области настройки приложения не разрешены строки запроса в параметре redirect_uri, что является правильным в соответствии с RFC. Тем не менее, Graph API не соблюдает это примечание RFC:

The endpoint URI MAY include an "application/x-www-form-urlencoded" formatted (per Appendix B) query component ([RFC3986] Section 3.4), which MUST be retained when adding additional query parameters.

1 Ответ

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

Это фактически не отклоняется Microsoft Graph. Microsoft Graph - это просто API, и он не генерирует и не управляет токенами доступа. Этот процесс обрабатывается Azure Active Directory.

Ошибка, которую вы получаете, связана с тем, что redirect_uri не настроен при регистрации вашего приложения на https://apps.dev.microsoft.com. URL-адрес должен явно совпадать с URL-адресом, настроенным при регистрации. Из документации :

redirect_uri вашего приложения, где ваше приложение может отправлять и получать ответы на аутентификацию. Он должен точно соответствовать одному из URI перенаправления, которые вы зарегистрировали на портале, за исключением того, что он должен быть закодирован в URL.

Для сценариев, в которых вам нужно передавать данные, вы должны закодировать эти значения в параметре state. Это будет возвращено на ваш URI перенаправления вместе с кодом авторизации.

Также обратите внимание, что ни access_type=offline, ни approval_prompt=auto не являются допустимыми параметрами запроса:

  • Чтобы получить refresh_token, вы добавляете offline в свой список областей (user.read+offline).
  • Чтобы установить тип приглашения, которое получает пользователь, вы используете параметр prompt. Допустимые значения: login, none и consent.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...