首页 > 解决方案 > Alexa oauth refresh_token 和 invalid_grant 响应

问题描述

我正在使用OAuth2 Server PHP来处理来自 Amazon Alexa 的令牌授权以实现我的技能。

我注意到 Alexa 会定期要求用户停用和响应该技能。

怎么了:

  1. Alexa 向我的 Token.php 页面发送一个 POST, {"grant_type":"refresh_token","refresh_token":"3673c55124f61d8fxyz37a315bb0296de","client_id":"alexa"}其中包含一个“Authorization”标头,其中包含client_idclient_secret
  2. 我的服务器将返回错误 400 {"error":"invalid_grant","error_description":"Refresh token has expired"}
  3. 用户收到来自 Alexa 的错误消息,要求重新激活技能……</li>

我希望 Alexa 向服务器发送新请求以获取新令牌,但这并没有发生。

我错过了什么?

谢谢

标签: oauth-2.0alexa

解决方案


我在三个不同的地方(这里,oauth2-server-php Github 和 Amazon Alexa 论坛)发布了这个问题,但没有答案……</p>

作为“修复”,我在我的server.php

$server->addGrantType(new OAuth2\GrantType\RefreshToken($storage, [
  'always_issue_new_refresh_token' => false,
  'unset_refresh_token_after_use'  => false
]));

RefreshToken.php通过删除这部分代码进行了更改:

if ($refreshToken['expires'] > 0 && $refreshToken["expires"] < time()) {
    $response->setError(400, 'invalid_grant', 'Refresh token has expired');
    return null;
}

直到我得到更好的答案/解释:-)


推荐阅读