Ошибка API Azure Graph 2.0 в обновлении токена: предоставленное предоставление недействительно или имеет неправильный формат (AADSTS70000) - PullRequest
0 голосов
/ 22 мая 2019

Я следую пошаговому руководству на сайте Microsoft (https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#refresh-the-access-token), все работает правильно, но каждый раз, когда я пытаюсь обновить токен доступа, я получаю эту ошибку: AADSTS70000: Предоставленное разрешение недействительно или неправильно сформировано.error_codes: 70000.

Я создал коллекцию почтальонов для тестирования, также загрузил официальную коллекцию почтальонов с сайта Microsoft, все работает правильно, пока не истечет срок действия маркера доступа. Когда он истекает, пытается обновитьтокен всегда приводит к ошибке, и я зацикливаюсь на ней. Я дважды и трижды проверял соответствие между ошибками redirect_url, разрешения, предоставления, копирования / вставки, ждал истечения срока действия access_token, прежде чем пытаться обновить ...Я сделал почти 100 тестов, и каждый раз, когда я застреваю в части обновления!

Я начинаю с обычного вызова API входа в Microsoft в моем браузере и получения кода в строке запроса из браузера.(здесь нет проблем) (обратите внимание, что client_id - это URL, закодированный впотому что в моей тестовой среде идентификатор клиента является URL-адресом из-за конфигурации используемого Drupal-портана, я пытаюсь воссоздать такое же поведение в почтальоне)

https://login.microsoftonline.com/{tenant_guid}/oauth2/v2.0/authorize?client_id={myclient_id_urlencoded}&response_type=code&redirect_uri={redirect_uri_urlencoded}&scope=offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read&state=12345

Затем с кодомв строке запроса я отправляю POST к конечной точке токена:

POST /{tenant_guid}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com

Content-Type: application/x-www-url-form-urlencoded
cache-control: no-cache
Postman-Token: a0456a8d-6979-491f-b61e-86b5d614c577

client_id={myclient_id_urlencoded}
scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
redirect_uri={redirect_uri_urlencoded}
grant_type=authorization_code
client_secret={client_secret_urlencoded}
code=OAQABAAIAAADCoMpjJXrxTq9VG9te-7FXujKZhF...

Я получаю обратно токен доступа (который работает как талисман при доступе к https://graph.microsoft.com/v1.0/me в течение часа) и токен обновления.Я хотел бы получить новую пару токенов доступа / обновления по истечении срока действия оригинального токена доступа, используя refresh_token grant_type

POST /tenant_guid/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com

Content-Type: application/x-www-url-form-urlencoded
cache-control: no-cache
Postman-Token: 5d71f813-768e-476c-a97f-c109fba3165e

client_id={myclient_id_urlencoded}
scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
redirect_uri={redirect_uri_urlencoded}
grant_type=refresh_token
cclient_secret={client_secret_urlencoded}
refresh_token=OAQABAAAAAADCoMpjJXrxTq9VG9te-7FX8m6YMg-.....

Но неважно, если я попытаюсь до истечения срока действия токена доступа или после, закрытия и повторного открытия почтальонаЯ всегда получаю эту ошибку обратно.Я провел почти 50 тестов (всегда с полным циклом входа в систему / авторизации для использования всегда свежего токена обновления) без удачи.

Похоже, мне здесь не хватает чего-то действительно глупого, потому что я не могу представить, что все остальные ведут себя правильно ... но на самом деле не могут найти выход!

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Так что я только что начал работать! Вот необходимые мне параметры:

client_id = your client id
refresh_token = the refresh token here
grant_type = refresh_token,
client_secret = secret

ПРИМЕЧАНИЕ. Все, что я прочитал, подсказывало URLE кодировать значения. Я обнаружил, что это работает с ними UNENCODED - понятия не имею, действительно ли это будет иметь значение или нет. Поскольку это происходит в теле поста, это означает, что он зашифрован TLS.

Другой важной вещью был URL, на который я отправил. Кажется, примеров так много, и ни один из них не является последовательным. Я использовал этот формат:

https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token

Последнее, что нужно убедиться, что вы используете правильный идентификатор приложения. В моем случае я использовал appId для неправильного приложения, и у него не было согласия. Надеюсь это поможет. Мне бы очень хотелось, чтобы Microsoft предприняла согласованные усилия для последовательного разъяснения вещей и думала, как кто-то, кто не зарабатывает на жизнь.

0 голосов
/ 26 июня 2019

Окончательно решено благодаря поддержке Azure. Проблема заключается в идентификаторе клиента: как я и предполагал ранее, Microsoft позволяет вам определять другое имя приложения, но всегда хочет использовать идентификатор клиента GUID для отправки любого запроса. К сожалению, он предупреждал меня, когда я не кодировал URL-адрес, но не предупреждал, что это неправильно, пока я не попытался использовать токен обновления.

Итак, просто очень внимательно прочитайте документацию: client_id: идентификатор приложения (клиента) , который портал Azure - регистрация приложений использует для вашего приложения (поэтому не тот, который вы выбрали).

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow

Может быть, включение проверки формата в документацию поможет!

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