刷新 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_tokenauthentication_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_tokenrefresh_token 参数,我可以按预期使用这两个参数。