AWS Cognito-使用JWT与cognito.getUser SDK验证令牌

时间:2020-07-28 12:49:20

标签: amazon-web-services jwt amazon-cognito

我正在使用AWS的以下文档通过Cognito验证传入令牌,以验证cognito池中的用户: https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html

现在,我还需要验证该用户的自定义属性(电子邮件)之一。 (基本上,这是为了缓解某些用户可以更改API有效负载中的电子邮件ID以访问其他人的详细信息的情况。)

我发现执行此操作的Cognito SDK是这样的:https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html

它工作得很好,但是这引出了我一个问题: 由于我是在此SDK中发送访问令牌的,因此我还需要使用以前的基于jwt的令牌验证吗?因为此SDK还处理令牌无效/过期的情况,并相应地发送错误代码。我缺少前者处理而后者没有的东西吗?

1 个答案:

答案 0 :(得分:0)

简短的回答:不,您可以忽略JWT的内容。

更长的答案:JWT令牌提供了一种快速的方法来验证用户是否已通过身份验证,而无需检查数据库或外部服务。在大容量应用程序中,这可能非常重要。

但是,它们有几个限制:

  • 向JWT令牌颁发了到期时间戳。如果您依靠JWT,则无法在该时间戳记到期之前强制注销用户。
  • 为了安全起见,必须使用非对称密钥对对您的JWT令牌 进行签名(我之所以这么说是因为很多人错误地实现了自己的身份服务器; Cognito做到了)。
  • li>
  • 令牌中的声明(由身份服务器签名)可能不足以满足您的需求。最佳做法是最小化令牌的大小,iirc Cognito遵循这种做法,只包括与身份验证直接相关的用户属性。

如果这些限制中的任何一个适用于特定用例(听起来像第三个限制适用于您),那么您就必须对身份服务器进行该外部服务调用。然后,如果并且服务器报告了身份验证状态,,则无需注意令牌。