Обновление маркера доступа OAuth для Microsoft Live API

В настоящее время у меня есть пользователь, чтобы войти в Microsoft Live, отправив запрос в веб-представлении по следующему URL:

https://login.live.com/oauth20_authorize.srf?client_id=[CLIENT ID]&scope=[SCOPES]&response_type=token&redirect_uri=[REDIRECT URI]&display=popup

Это прекрасно работает, и я получаю и сохраняю access_token а также authentication_token, Обратите внимание, что он не возвращает refresh_tokenдаже если я включу wl.offline_access объем.

Проблема возникает, когда срок действия маркера доступа истекает и его необходимо обновить. Я пытаюсь обновить токен, используя метод из документации Microsoft:

https://login.live.com/oauth20_token.srf?client_id=[CLIENT ID]&redirect_uri=[REDIRECT URI]&client_secret=[CLIENT SECRET]&refresh_token=[WHAT TO PUT HERE?]&grant_type=refresh_token

Тем не менее, refresh_token не был возвращен при входе в систему, поэтому я не уверен, что передать. Обратите внимание, что отправка authentication_token (для чего он должен использоваться?) как refresh_token Параметр приводит к следующему:

{
  "error": "invalid_grant",
  "error_description": "The provided value for the input parameter 'refresh_token' is not valid."
}

Кто-нибудь знает, как правильно обновить токен Microsoft Live через их REST API?

1 ответ

Решение

После дальнейшего изучения документации Microsoft и экспериментов, я смог понять, как это сделать.

Проблема с моей первоначальной попыткой заключалась в том, что я запрашивал wl.offline_access область действия при использовании неявного потока предоставления, поскольку их документация говорит не:

Примечание Не включайте wl.offline_access область действия, если вы используете неявный поток грантов (response_type=token).

Итак, я изменил свой URL на следующий (используя поток предоставления кода авторизации, так как мне нужен автономный доступ):

https://login.live.com/oauth20_authorize.srf?client_id=[CLIENT ID]&scope=[SCOPES]&response_type=code&redirect_uri=[REDIRECT URI]&display=popup

Затем, как только я получил code в обратном вызове я вызвал следующую конечную точку, чтобы получить токены доступа и обновления:

https://login.live.com/oauth20_token.srf?client_id=[CLIENT ID]&redirect_uri=[REDIRECT URI]&client_secret=[CLIENT SECRET]&code=[CODE FROM AUTHORIZATION]&grant_type=authorization_code

ПРИМЕЧАНИЕ. Документация Microsoft НЕПРАВИЛЬНА для этой конечной точки в приведенных выше ссылках. Это GET запрос, а не POST Запрос в качестве документации претензий.

Этот метод наконец-то вернул access_token а также refresh_token параметры, и я смог использовать оба, как и ожидалось.

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