【发布时间】:2020-10-23 10:49:52
【问题描述】:
所以 2 个问题。
- 是 Aws Cognito 用户池的 UserPoolId 和 AppClientId 密码吗?
- 如果是这样,您如何确保它们的安全?我见过的所有库 (aws-amplify/amazon-cognito-identity-js) 似乎都是完全基于客户端的。
我在这里错过了什么。似乎您通过这两条信息向任何具有 JS 访问密钥的恶意用户提供 Cognito 王国。
【问题讨论】:
所以 2 个问题。
我在这里错过了什么。似乎您通过这两条信息向任何具有 JS 访问密钥的恶意用户提供 Cognito 王国。
【问题讨论】:
它们不是秘密。
实际上,ID 令牌包含 iss 声明(属性),即用户池 ID,以及 aud 声明,即应用客户端 ID。
访问令牌包含 iss 声明,这也是用户池 ID,而 client_id 声明表示应用客户端 ID。
如果这些令牌中的任何一个被不良行为者截获,那么他们可以解码这些令牌,因为它们只是 base64 编码(未加密)。
但是,只要 JWT 得到正确验证,仅仅知道这 2 条信息通常对攻击者来说并不是非常有用。
它不会让攻击者访问用户池本身,因为这需要 AWS 凭证,这些凭证只分配给用户,或者已经过正确身份验证的身份(然后由 ID 池颁发凭证)。
在访问 api 方面,攻击者可能希望以某种方式修改有效负载以更改请求中的数据。例如,他们可能希望将假设的role 声明从user 更改为admin,以提升他们不应升级的权限和访问区域。通过在服务器端正确验证 JWT 令牌以确保有效负载未被篡改,可以缓解这种情况。
另一种类型的 api 攻击可能是使用一个经过正确身份验证的令牌来访问另一个 api(JWT 替换)。这可以通过验证 iss 和 aud 声明来缓解,以确认 JWT 是专门发布给预期的用户池和应用程序客户端的。
【讨论】: