【问题标题】:Invalid refresh token while trying to refresh an access token on Office365 APIs尝试刷新 Office365 API 上的访问令牌时刷新令牌无效
【发布时间】:2015-03-09 10:10:34
【问题描述】:

我目前正在尝试开发一个从 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所述,表示我的刷新令牌已经过时了……但我只是通过全授权机制生成的,这是我无法理解的!

【问题讨论】:

标签: php api oauth-2.0 office365


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当您第一次尝试获取访问令牌时,您将使用会返回响应的 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

    【讨论】:

    • 我只是用一些日志编辑我的问题,它发生在我第一次提出这个请求时,所以这不可能,除非我监督了一个潜在的第一个请求......我'我会试着卷曲进去看看是不是这样,然后我正在使用的 lib 出现问题
    • 测试无效;所以不可能是我使用的是“以前的刷新令牌”,因为我什至无法在第一次刷新...
    • 我在原始问题中添加了 json 响应;所以,根据你的链接,因为我有一个invalid_grant,这意味着我的刷新令牌已过期......但我只是在发出请求前 10 秒通过完整授权请求生成了它!
    【解决方案3】:

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

    【讨论】:

    • 我在这里转储时添加了?,因此实际请求中不存在。似乎它是一个 GET 请求;如果有帮助的话,我粘贴的 json 在 POST 请求中会出现
    • 要尝试的另一件事:Azure 对资源 URL 可能非常严格。在资源值(或 %2F)的末尾添加一个“/”。
    • 没关系,我想我找到了我的问题。似乎当我将刷新令牌存储在我的数据库中时,我们使用的是 varchar(255),而刷新令牌似乎超过 600 个字符...
    猜你喜欢
    • 1970-01-01
    • 2022-10-31
    • 2019-06-29
    • 2021-12-17
    • 2018-01-05
    • 2020-07-12
    • 2017-08-11
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多