【问题标题】:Get new refresh token in oauth2.0 authorization code grant flow在 oauth2.0 授权码授予流程中获取新的刷新令牌
【发布时间】:2021-02-26 20:15:27
【问题描述】:

我使用 Amazon Cognito 为 Google 设置了授权代码授予流程。我可以通过调用/login 端点来获取授权码,并使用/token 端点将其交换为access_tokenrefresh_tokenid_token,所以我认为它或多或少地设置正确。

不幸的是,当我尝试使用/token 端点将refresh_token 换成新令牌时,我只收到access_tokenid_token 而没有新的refresh_token。我一直试图理解为什么会发生这种情况,但Amazon's documentation 只是简单地提到refresh_token 返回授权码。更有趣的是,auth0 documentation 表示 /token 端点应该以一种非常不同的方式运行——它不应该直接返回新令牌,而是返回一个新的授权码。

现在我对那里发生的事情感到很困惑。是亚马逊改变了使用授权码授权用户的流程吗?或者,更有可能是我听不懂,做错了什么?

【问题讨论】:

    标签: amazon-web-services oauth-2.0 google-oauth amazon-cognito


    【解决方案1】:

    refresh_token 是一次生成代码授权,我们可以复用它来生成新的access_token 和id_token。在我的方法中,我调用 initiateAuth 方法来生成新的 access_token 和 id_token :

      refreshToken() {
        let params = {
          AuthFlow: "REFRESH_TOKEN_AUTH",
          ClientId: this.clientId,
          AuthParameters: {
            "REFRESH_TOKEN": [refresh_token_property],
            "DEVICE_KEY": null
          }
        };
        return this.cognitoIdp.initiateAuth(params).promise().then(data => {
          console.log(data.AuthenticationResult);
        }).catch(e => {
          console.log(e)
        })
      }
    

    【讨论】:

    • 谢谢@Mahdi。我现在想知道是否有可能在不要求用户再次通过谷歌身份验证同意屏幕的情况下获得新的 refresh_token?或者,也许一旦我们交换了 refresh_token,我们就无法在没有再次授权的情况下获得新的?
    • 好吧,我会这样说: - 授权码只能使用一次。重用现有代码将返回错误 invalid_grant,请参阅此错误响应 docs.aws.amazon.com/cognito/latest/developerguide/… - refresh_token 是可重用的,我们将需要它来生成新的两个令牌(访问和 id) - 要获取新的 refresh_token,我们需要重新登录以生成授权码& 重新授权代码以最终生成新令牌(刷新、访问、id)
    • 好吧,这就是我所担心的。谢谢!
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 2018-06-23
    • 2018-02-01
    • 2017-04-09
    • 2018-08-20
    • 1970-01-01
    • 2016-10-13
    • 2020-09-08
    相关资源
    最近更新 更多