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

AWS认知刷新令牌:如何正确使用它们?

有宏峻
2023-03-14

我有一个应用程序,使用授权代码流从AWS认知用户池令牌endpoint获得3个令牌。它接收ID_TOKEN、ACCESS_TOKEN和refresh_token。

var credentials = new CognitoAWSCredentials(IdentityPoolId, Region);
credentials.AddLogin("cognito-idp.<region>.amazonaws.com/<UserPoolId>", ID_TOKEN);

一段时间后,凭据停止工作,调用AWS客户端上的任何方法都会抛出notauthorizedexception,正如所料,令牌在1小时后过期。

根据我的理解,当令牌过期时,可以再次使用令牌endpoint并传递REFRESH_TOKEN以获得新的令牌。这很有用,如果可以避免的话,我宁愿不要注销应用程序用户,并强迫他们再次通过OAUTH身份验证流。

因此,我尝试刷新令牌,HTTP POST到/oauth2/token,请求头与我第一次获得令牌时相同,但请求正文略有不同?grant_type=refresh_token&client_id=xxx和refresh_token=xxx

我得到一个ID_TOKEN和ACCESS_TOKEN,但没有refresh_token。

1-这是意料之中的吗?这是否意味着在2小时后使用相同的REFRESH_TOKEN进行第二次刷新?或者这是令牌endpoint给我的一个微妙的线索,说明刷新时出了问题(更好的线索是endpoint返回一个错误...)

2-仔细检查后,新的ID_TOKEN与旧的ID_TOKEN相同。这是意料之中的吗,为什么令牌endpoint没有返回一个新的id_token?(当我使用新ID_TOKEN创建新的CognitoAWSCredentials时,我得到的凭据是无用的。它们在我第一次访问任何AWS客户端时引发异常。实际上,它们已经过期了,因为新ID_TOKEN是旧的。)

4-cognitoawscredentials实际上是refreshingawscredentials,这些实际上会自动刷新吗,如何刷新?

共有1个答案

姬天宇
2023-03-14

刷新令牌用于刷新id和访问令牌,它们的有效期仅为一小时。您可以在下游服务中使用id令牌或访问令牌,尽管例如API网关要求您传入id令牌。

当你使用Cognito时,你应该使用我们官方的移动SDK,这样就不用担心刷新令牌了,因为他们会为你做这件事。

 类似资料:
  • 我通过以下方式进行身份验证 首先,我通过以下方式对AWS进行身份验证 我刚刚发现我可以用下面的命令重新配置,但我很好奇这是否是处理它的正确方法,以及是否有任何其他AWS方法提供。

  • 我正在尝试使用 NodeJS 构建 RESTful API,但在 api 调用期间无法理解使用令牌对用户进行身份验证的正确方法。在阅读了一些博客和文章后,我想出了这些方法: Access Token(AT)是包含唯一userId作为JWT有效负载的JWT令牌。1天后到期。 刷新令牌(RT)是使用uuid npm包的随机uuid。与用户文档一起存储在数据库中。 过程: 当用户登录/注册服务器发布新A

  • 我正在使用Cognito用户池对系统中的用户进行身份验证。成功的身份验证将提供一个ID令牌(JWT)、一个访问令牌(JWT)和一个刷新令牌。这里的文档清楚地提到了刷新令牌可以用于刷新访问令牌,但没有提到如何使用。我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌? 我搜索了JavaScript SDK,但找不到任何方法来做同样的事情。我肯定错过了什么。 我还想通过Lam

  • 问题内容: 我们的React Native Redux应用程序使用JWT令牌进行身份验证。有许多操作需要此类令牌,​​并且例如在应用加载时会同时分派许多令牌。 例如 双方并要求JWT。我们将令牌保存在和中。我的问题是如何处理令牌到期。 最初,我将使用中间件来处理令牌到期 } 我遇到的问题是,对于令牌和操作,都会刷新令牌,因为在分发令牌和令牌时,令牌将过期。理想情况下,我想“暂停”需要身份验证的操作

  • 我遇到的问题是,和操作都将刷新令牌,因为在分派时,令牌将过期。理想情况下,我希望“暂停”需要身份验证的操作,直到令牌刷新。有没有一种方法可以用中间件做到这一点?