AWS Cognito用户池ID和应用程序客户端ID是否保密?

时间:2020-07-02 18:46:11

标签: security amazon-cognito

有2个问题。

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

我在这里想念什么。似乎您向这两个恶意用户提供了具有这2条信息的JS访问密钥,以进入Cognito王国。

1 个答案:

答案 0 :(得分:5)

它们不是秘密。

实际上,ID令牌包含iss声明(属性)(即用户池ID)和aud声明(即应用程序客户端ID)。

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

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

但是,只要正确地验证了JWT,仅知道这2条信息通常对攻击者来说并没有什么用。

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

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

另一种类型的api攻击可能是使用针对一个api进行了正确身份验证的令牌来访问另一个api(JWT替代)。通过验证issaud声明,以确认JWT是专门发布给预期的用户池和App Client来缓解的。