我对AWS Cognito以及令牌安全性还很陌生。我决定将AWS Cognito用于可能的应用程序。我按照此处的指南使用了我的Web应用程序和Web API。
https://dzone.com/articles/identity-as-a-service-idaas-aws-cognito-and-aspnet https://dzone.com/articles/identity-as-a-service-idaas-asp-net-core-api-and-a
一切正常。但是,当我尝试在AWS Cognito中创建新的用户池,然后将Web应用程序和Web api的应用程序设置更改为使用新用户池时,我发现有些奇怪。
(对于Web应用程序)。用户仍然可以通过属于旧用户池的旧令牌访问控制器操作,该旧用户池甚至在将该操作标记为[Authorize]之前就已使用。我不知道为什么即使将appsetting设置为新的User pool,用户仍然可以使用旧令牌访问。 (但用户无法使用带有新令牌的新用户池访问网络API)
(适用于Web应用程序和Web API)。然后,我从旧的用户池中删除了该用户,并将Web应用程序和Web API设置为使用旧的用户池。我发现即使删除了该用户,用户仍然可以访问Web应用程序和Web api中的操作。
我认为我可能缺少有关验证令牌或设置的信息。谁能提出解决问题的解决方案?
答案 0 :(得分:1)
AWS Cognito用户池颁发的ID令牌是JWT令牌,由AWS签名。发行后,令牌的有效期为1小时。在这1个小时内,由于令牌无状态,因此无法撤消令牌。
Amazon Cognito为每个用户池生成两个RSA密钥对。的 每对的私钥用于签名各自的ID令牌或 访问令牌。公钥在此地址提供 格式:
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json
由于公钥是公开可用的,因此任何人都可以验证JWT令牌是否真实并由AWS Cognito发行。
但是,这涉及到许多要验证的事情。
此信息已经包含在根据JWT标准正确编码的JWT令牌字符串中。
因此,即使删除了Cognito用户池,如果有有效令牌(颁发后<1小时内),并且验证过程使用存储的公钥进行验证,则令牌也应有效。