Обновление маркера доступа 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
параметры, и я смог использовать оба, как и ожидалось.