尝试刷新Office365 API上的访问令牌时,刷新令牌无效

时间:2015-03-09 10:10:35

标签: php api oauth-2.0 office365

我目前正在尝试开发一个同步Office365日历的Web应用程序,到目前为止,我设法从Azure的OAuth系统中获取了几个令牌。

但是,即使刷新令牌似乎至少有14天的有效期,似乎每当我尝试刷新访问令牌时,我总是会收到以下错误:

OAuth error: "AADSTS70000: Authentication failed. Refresh Token is not valid.
Trace ID: 47836649-e160-40f0-93d1-f599caf4f665
Correlation ID: 45714317-5a29-4242-a785-be23269acf19
Timestamp: 2015-03-09 09:53:18Z"

有什么想法吗?感谢

- 编辑 -

以下是刷新令牌的请求;

//parameters
refresh_token={refresh_token}
&grant_type=refresh_token
&client_id={client_id}
&client_secret={client_secret}
&resource=https%3A%2F%2Foutlook.office365.com

// url
https://login.windows.net/common/oauth2/token

- 编辑2 -

这是我收到的确切的json响应;

{
    "error":"invalid_grant",
    "error_description":"AADSTS70000: Authentication failed. Refresh Token is not valid.\r\nTrace ID: f0b5bc67-9ad5-4a75-b384-393486b31074\r\nCorrelation ID: 05af63f5-989a-4397-924f-58745c9bc964\r\nTimestamp: 2015-03-09 12:21:08Z","error_codes":[70000],
    "timestamp":"2015-03-09 12:21:08Z",
    "trace_id":"f0b5bc67-9ad5-4a75-b384-393486b31074",
    "correlation_id":"05af63f5-989a-4397-924f-58745c9bc964",
    "submit_url":null,
    "context":null
}

正如http://blogs.msdn.com/b/exchangedev/archive/2014/03/25/using-oauth2-to-access-calendar-contact-and-mail-api-in-exchange-online-in-office-365.aspx中所述,这意味着我的刷新令牌已过时......但我只是通过完全授权机制生成它,这是我无法理解的!

3 个答案:

答案 0 :(得分:1)

我想我找到了解决问题的方法。 Azure令牌非常庞大(刷新令牌约为630个字符),当我们将刷新令牌存储在varchar(255)中时,它会被截断,因此无效......

答案 1 :(得分:0)

当您第一次尝试获取访问令牌时,您将使用将返回响应的URL。在响应中,您将获得刷新令牌。您可以使用它再次获取访问令牌。但是如果您尝试使用之前使用的相同URL,您将获得一个新的刷新令牌。您不能再使用第一个刷新令牌。您必须使用新的刷新令牌。

我认为您正在使用之前的刷新令牌。

看看这个链接: http://blogs.msdn.com/b/exchangedev/archive/2014/03/25/using-oauth2-to-access-calendar-contact-and-mail-api-in-exchange-online-in-office-365.aspx

答案 2 :(得分:0)

只是一个猜测,但你有一个'?'在参数的开头。你是否将这些作为URL的一部分传递?因为它们应该作为表单数据发布在请求正文中,而不是作为URL查询参数。