刷新 Microsoft Live 的 OAuth 访问令牌 API
Refreshing an OAuth access token for Microsoft Live API
目前,我通过在 Web 视图中向以下 URL:
发送请求来让用户登录 Microsoft Live
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
。请注意,即使我包含 wl.offline_access
范围,它也不会 return 和 refresh_token
。
访问令牌过期需要刷新时出现问题。我正在尝试使用 Microsoft's documentation:
中的方法刷新令牌
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
从未在登录中 returned,所以我不确定要传递什么。请注意,发送 authentication_token
(它应该是什么用于?),因为 refresh_token
参数结果如下:
{
"error": "invalid_grant",
"error_description": "The provided value for the input parameter 'refresh_token' is not valid."
}
有谁知道如何通过他们的 REST API 正确刷新 Microsoft Live 令牌?
进一步阅读 Microsoft 的 documentation 并进行试验后,我能够弄清楚如何做到这一点。
我最初尝试的问题是我在使用 implicit grant flow 时请求 wl.offline_access
范围,正如他们的文档所说:
Note Do not include the wl.offline_access
scope if you're using the
implicit grant flow (response_type=token
).
因此,我将 URL 更改为以下内容(使用 authorization code grant flow,因为我需要离线访问):
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
参数,我可以按预期使用这两个参数。
目前,我通过在 Web 视图中向以下 URL:
发送请求来让用户登录 Microsoft Livehttps://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
。请注意,即使我包含 wl.offline_access
范围,它也不会 return 和 refresh_token
。
访问令牌过期需要刷新时出现问题。我正在尝试使用 Microsoft's documentation:
中的方法刷新令牌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
从未在登录中 returned,所以我不确定要传递什么。请注意,发送 authentication_token
(它应该是什么用于?),因为 refresh_token
参数结果如下:
{
"error": "invalid_grant",
"error_description": "The provided value for the input parameter 'refresh_token' is not valid."
}
有谁知道如何通过他们的 REST API 正确刷新 Microsoft Live 令牌?
进一步阅读 Microsoft 的 documentation 并进行试验后,我能够弄清楚如何做到这一点。
我最初尝试的问题是我在使用 implicit grant flow 时请求 wl.offline_access
范围,正如他们的文档所说:
Note Do not include the
wl.offline_access
scope if you're using the implicit grant flow (response_type=token
).
因此,我将 URL 更改为以下内容(使用 authorization code grant flow,因为我需要离线访问):
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
参数,我可以按预期使用这两个参数。