当前位置: 首页 > 知识库问答 >
问题:

如何处理Cognito上的代币过期

尉迟鸿熙
2023-03-14

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

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

如何使此工作流程正常工作?

我正在考虑向客户端发送一条消息,表明令牌已过期,客户端将根据Cognito池刷新令牌。这是正确的方法吗?

共有3个答案

曾成天
2023-03-14

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

施德元
2023-03-14

您可以在此链接上找到如何使用它们的更多信息。http://docs . AWS . Amazon . com/cogn ITO/latest/developer guide/Amazon-cogn ITO-user-pools-using-tokens-with-identity-providers . html

要使用刷新令牌获取新令牌,请使用

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

唐烨煜
2023-03-14

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

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

如果您使用我们针对Android、 iOS 或JavaScript的高级SDK之一,SDK将为您管理所有这些。

 类似资料:
  • 问题内容: 众所周知,代理对象时,例如为Spring / EJB创建具有事务属性的Bean时,甚至当您使用某些框架创建部分模拟时,代理对象都不知道,内部调用也不会重定向,然后也没有被拦截… 这就是为什么如果您在Spring中做类似的事情: 当您致电doSomething时,您希望除了主要交易外还有3个新交易,但是实际上,由于这个问题,您只会得到一个新交易… 所以我想知道您如何处理此类问题… 实际上

  • 问题内容: 我正在考虑将WCF用于一个项目,该项目需要人们能够将大文件(64MB-1GB)上传到我的服务器。我将如何使用WCF处理此问题,可能还具有恢复上传的功能。 为了处理更大的客户群,我想通过WCF测试JSON。这将如何影响文件上传?可以通过JSON完成,还是需要将上传部分切换到REST? 问题答案: 如果要上传大文件,则肯定需要查看WCF流模式。 基本上,您可以更改绑定上的传输模式;默认情况

  • 冲突合并一般是因为自己的本地做的提交和服务器上的提交有差异,并且这些差异中的文件改动,Git不能自动合并,那么就需要用户手动进行合并 如我这边执行git pull origin master 如果Git能够自动合并,那么过程看起来是这样的 拉取的时候,Git自动合并,并产生了一次提交。 如果Git不能够自动合并,那么会提示 这个时候我们就可以知道README.MD有冲突,需要我们手动解决,修改RE

  • 本文向大家介绍如何在Java中处理Selenium中的代理?,包括了如何在Java中处理Selenium中的代理?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助PROXY类在Java中使用Selenium处理代理。

  • 我们用的是Cognito。一切都很好。我使用AdminCreateUser API添加了一个用户,他们收到了临时密码。不幸的是,他们等待了一个多月才登录,现在当他们尝试使用临时密码登录时,Cognito返回以下错误: 我该怎么做呢?我在Cognito UI中没有看到任何重置按钮。是否有我可以调用的CLI或API?

  • 问题内容: 我想实现一个基于Redis的会话存储。我想将会话数据放入Redis。但是我不知道如何处理会话过期。我可以遍历所有redis密钥(sessionid)并评估上次访问时间和最大空闲时间,因此我需要将所有密钥加载到客户端中,并且可能有1000m会话密钥,并且可能导致非常差的I / O表演。 我想让Redis管理过期,但是密钥过期时没有侦听器或回调,因此无法触发HttpSessionListe

  • 我正在 制作一个授权系统,我遇到了这个传递 JWT 令牌的持有者方案,我阅读了 [RFC 6750][1]。我有以下疑问: 这是如何提高安全性的 在成功授权和登录后,服务器在其主体中使用JWT令牌对客户端进行响应,现在当客户端发出另一个请求时,我不清楚该怎么做,我想在请求的authorization头中从客户端发送令牌,所以现在我应该在上一次响应中从服务器收到的令牌前面加上“Bearer”前缀,如

  • 我想在所有浏览器上自动化Web应用程序。我的代码运行正常,铬,火狐,但当我尝试它在边缘,它显示ssl证书错误。 if((browser.equalsIgnoreCase(“边缘”)){ //DesiredCapabilities=新DesiredCapabilities();//能力。setCapability(CapabilityType.PROXY,PROXY);