【问题标题】:How to handle with token expiration on Cognito如何处理 Cognito 上的令牌过期问题
【发布时间】:2018-03-23 01:54:01
【问题描述】:

我正在开发一个使用 AWS Cognito 作为身份提供者的应用程序。因此,用户在 AWS Cognito 池上进行身份验证并获取访问令牌、访问 ID 和刷新令牌。 然后用户可以向我的应用程序发出后端请求。我得到访问令牌验证它,在 Cognito AWS 上获取用户配置文件并授权请求。

问题是访问令牌过期后,客户端将过期令牌发送到后端,后端应用程序收到错误(令牌过期或未授权)。

我怎样才能使这个工作流程有效?

我正在考虑向客户端发送令牌已过期的消息,并且客户端会根据 Cognito 池刷新它。这是正确的方法吗?

【问题讨论】:

    标签: amazon-web-services amazon-cognito


    【解决方案1】:

    当您从 Cognito 用户池获取访问令牌、ID 和刷新令牌时,您必须将其缓存在本地。 Access 和 ID 令牌的有效期为 1 小时,应在该时间段内尽可能重复使用。

    这些代币是 JWT 代币,并在其内部保存到期时间。您可以解码 JWT 令牌并将此到期时间与令牌一起缓存。每次访问令牌的缓存时,还要检查当前时间与缓存的到期时间。如果过期,使用 Refresh 令牌获取最新的 Access 和 ID 令牌并缓存令牌并再次过期。

    如果您使用我们针对 AndroidiOSJavaScript 的高级 SDK 之一,SDK 会为您管理所有这些。

    【讨论】:

    【解决方案2】:

    您可以在此链接上找到更多信息如何使用它们。http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

    要使用刷新令牌获取新令牌,请使用 AdminInitiateAuth API,将 REFRESH_TOKEN_AUTH 传递给 AuthFlow 参数和刷新令牌 带有键“REFRESH_TOKEN”的 AuthParameters 参数。这启动 使用 Amazon Cognito 服务器的令牌刷新过程并返回 新的 ID 和访问令牌。

    简而言之,使用刷新令牌调用 AdminInitiateAuth 操作。查看您喜欢的开发语言的 SDK。

    【讨论】:

      【解决方案3】:

      在我的项目中,我使用 AWS Amplify 库,我发现这种方法可行:

      配置:

      import Amplify, { Auth } from "aws-amplify";
      
      Amplify.configure({
        Auth: {
          userPoolId: <USER_POOL_ID>,
          userPoolWebClientId: <USER_POOL_WEB_CLIENT_ID>
        }
      });
      

      刷新令牌

      try {
          const currentUser = await Auth.currentAuthenticatedUser();
          const currentSession = currentUser.signInUserSession;
          currentUser.refreshSession(currentSession.refreshToken, (err, session) => {
            // do something with the new session
          });
        } catch (e) {
          // whatever
        }
      };
      

      更多讨论在这里:https://github.com/aws-amplify/amplify-js/issues/2560

      【讨论】:

        猜你喜欢
        • 2016-05-19
        • 2019-01-24
        • 2021-12-21
        • 2020-11-01
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 2016-01-14
        相关资源
        最近更新 更多