AWS Cognito 用户池 ID 和应用程序客户端 ID 是秘密吗?

Mat*_*rax 10 security amazon-cognito

所以2个问题。

  1. 是 Aws Cognito 用户池的 UserPoolId 和 AppClientId 秘密吗?
  2. 如果是这样,你如何保证它们的安全?我见过的所有库(aws-amplify/amazon-cognito-identity-js)似乎都是基于客户端的。

我在这里错过了什么。似乎您将这 2 条信息提供给任何拥有 Cognito 王国的 JS 访问密钥的恶意用户。

lem*_*ing 9

他们不是秘密。

实际上,ID 令牌包含iss声明(属性),即用户池 ID,以及aud声明,即 App 客户端 ID。

访问令牌包含iss声明,它也是用户池 ID,而client_id声明则代表应用程序客户端 ID。

如果这些令牌中的任何一个被坏人拦截,那么他们就可以解码令牌,因为它们只是 base64 编码(未加密)。

然而,只要 JWT 得到正确验证,仅仅知道这 2 条信息对于攻击者来说通常不是很有用。

它不会让攻击者访问用户池本身,因为这需要 AWS 凭证,这些凭证仅分配给用户,或已经正确验证的身份(然后由 ID 池颁发凭证)。

在访问 api 方面,攻击者可能希望以某种方式修改负载以更改请求中的数据。例如,他们可能希望将假设的role声明从更改useradmin,以提升权限并访问他们不应该访问的区域。这可以通过在服务器端正确验证 JWT 令牌以确保有效负载未被篡改来缓解。

另一种类型的 api 攻击可能是使用一个 api 正确验证的令牌来访问另一个 api(JWT 替换)。这可以通过验证issaud声明来缓解,以确认 JWT 是专门发布给预期的用户池和应用程序客户端的。