我目前正在尝试开发一个同步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中所述,这意味着我的刷新令牌已过时......但我只是通过完全授权机制生成它,这是我无法理解的!
答案 0 :(得分:1)
我想我找到了解决问题的方法。 Azure令牌非常庞大(刷新令牌约为630个字符),当我们将刷新令牌存储在varchar(255)中时,它会被截断,因此无效......
答案 1 :(得分:0)
当您第一次尝试获取访问令牌时,您将使用将返回响应的URL。在响应中,您将获得刷新令牌。您可以使用它再次获取访问令牌。但是如果您尝试使用之前使用的相同URL,您将获得一个新的刷新令牌。您不能再使用第一个刷新令牌。您必须使用新的刷新令牌。
我认为您正在使用之前的刷新令牌。
答案 2 :(得分:0)
只是一个猜测,但你有一个'?'在参数的开头。你是否将这些作为URL的一部分传递?因为它们应该作为表单数据发布在请求正文中,而不是作为URL查询参数。