如何在Cognito

时间:2017-10-11 11:43:23

标签: amazon-web-services amazon-cognito

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

问题是,在Access令牌过期后,客户端将过期的令牌发送到后端,后端应用程序会收到错误(令牌已经过验证或未经过授权)。

如何使此工作流程有效?

我正在考虑向客户端发送令牌已过期的消息,并且客户将其刷新到Cognito池。这是正确的做法吗?

4 个答案:

答案 0 :(得分:15)

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

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

如果您使用http://coliru.stacked-crooked.com/a/897573028a86e16eAndroidiOS JavaScript高级SDK,SDK会为您管理所有这些。

答案 1 :(得分:2)

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

  

要使用刷新令牌获取新令牌,请使用   AdminInitiateAuth API,传递REFRESH_TOKEN_AUTH   theAuthFlow参数和刷新令牌   AuthParameters参数,键为“REFRESH_TOKEN”。这启动了   使用Amazon Cognito服务器进行令牌刷新过程并返回   新ID和访问令牌。

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

答案 2 :(得分:2)

在我的项目中,我使用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

答案 3 :(得分:0)

您需要为Amazon Cognito用户池开发自定义授权者。这将验证每个api网关。您可以在此处找到更多信息。

Integrating Amazon Cognito User Pools with API Gateway