6

目前,我通过在 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_tokenand authentication_tokenrefresh_token请注意,即使我包含wl.offline_access范围,它也不会返回 a 。

当访问令牌过期并需要刷新时,就会出现此问题。我正在尝试使用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

但是,arefresh_token从未在登录中返回,所以我不确定要传入什么。请注意,发送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 令牌?

4

1 回答 1

10

在进一步阅读微软的文档并进行实验后,我能够弄清楚如何做到这一点。

我最初尝试的问题是我在使用隐式授权流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_tokenandrefresh_token参数,并且我能够按预期使用两者。

于 2015-02-11T04:54:31.053 回答