Authentication AWS Cognito-为什么即使更改了用户池或删除了用户(.Net core),令牌仍然有效

Authentication AWS Cognito-为什么即使更改了用户池或删除了用户(.Net core),令牌仍然有效,authentication,asp.net-core,token,amazon-cognito,aws-cognito,Authentication,Asp.net Core,Token,Amazon Cognito,Aws Cognito,我对AWS Cognito和令牌安全性很陌生。我决定在五月的申请中使用AWS Cognito。我按照这里的指南来编写我的web应用程序和web api 一切正常。但是,当我尝试在AWS Cognito中创建一个新的用户池,然后更改web app和web api的应用设置以使用新的用户池时,我发现了一些非常奇怪的事情 (用于web应用程序)。用户仍然可以通过旧令牌访问控制器操作,该令牌属于旧用户池,甚至在操作标记为[Authorize]之前就已使用。我不知道为什么即使appsetting设置为

我对AWS Cognito和令牌安全性很陌生。我决定在五月的申请中使用AWS Cognito。我按照这里的指南来编写我的web应用程序和web api

一切正常。但是,当我尝试在AWS Cognito中创建一个新的用户池,然后更改web app和web api的应用设置以使用新的用户池时,我发现了一些非常奇怪的事情

  • (用于web应用程序)。用户仍然可以通过旧令牌访问控制器操作,该令牌属于旧用户池,甚至在操作标记为[Authorize]之前就已使用。我不知道为什么即使appsetting设置为新用户池,用户仍然可以使用旧令牌访问。(但用户无法使用旧令牌访问使用新用户池的web api)

  • (适用于web应用程序和web api)。然后,我从旧用户池中删除了该用户,并将web app和web api设置为使用旧用户池。我发现即使那个用户被删除了,那个用户仍然可以访问web应用程序和web api中的操作


  • 我想这可能是我在验证令牌或设置方面缺少的东西。有人能提出解决方案吗?

    AWS Cognito用户池发布的ID令牌是一个JWT令牌,由AWS签名。一旦发出,令牌的有效期为1小时。在这1小时内,无法撤消令牌,因为它是无状态的

    AmazonCognito为每个用户池生成两个RSA密钥对。这个 每对的私钥用于对各自的ID令牌或令牌进行签名 访问令牌。公钥可在本文档中的某个地址使用 格式:

    由于公钥是公开可用的,任何人都可以验证JWT令牌是否真实,是否由AWS Cognito颁发

    然而,这涉及多方面的验证

  • 验证JWT令牌编码是否符合JWT标准
  • 验证JWT颁发者是否为特定用户池(验证其ID)
  • 验证令牌是否为ID令牌(可选)
  • 验证令牌的受众(是否为特定应用程序颁发)
  • 验证令牌签名(这是需要公钥的地方)
  • 验证令牌是否已过期
  • 该信息已经包含在根据JWT标准正确编码的JWT令牌字符串中

    因此,即使删除了Cognito用户池,如果有一个有效的令牌(<1小时后发出),如果验证过程使用存储的公钥来验证它,它也应该是有效的

    https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json