【发布时间】:2019-03-16 04:40:05
【问题描述】:
我一直在使用 javascript SDK(使用 Amazon 的 GitHub 示例)在前端的 Angular 应用程序和后端的 .Net Core 应用程序中使用 AWS Cognito。我想知道的是,为什么我似乎无法发现有关访问令牌的所有重要信息似乎都是公开的。 例如,用户池 ID、IdentityPoolId 和 ClientId 只是 javascript 中的变量,因此任何人都可以使用。有了这些变量,应该很容易获得 JWK,因为这是一个基于 clientid 和 userpool id 的公共亚马逊网页。这些密钥不应该是私有的吗?如果这些密钥是公开可用的,是不是可以模仿登录页面并窃取登录信息?
我尝试搜索诸如如何保护您的密钥和 JWK 之类的内容,但是当我这样做时,我只能获得有关如何签署和解密 access_tokens 的结果。
客户端密码
由于下面的答案建议使用客户端密码,我对此进行了调查。使用 javascript cognito sdk 时未使用客户端密码。在文档中,他们告诉您不要生成密钥,因为它不适用于 javascript sdk。这是因为它不会增加任何额外的安全性,因为应用程序在客户端运行,因此所有这些信息都是公开的。 目前还不清楚所有这些客户端 ID/令牌的安全性,因为所有内容都可以在网上找到。
我的解决方案
如果 any1 对我的解决方案感兴趣,那就是:所以基本上我错过了使用 JWT 和 JWKS 是 JWK 只能用于验证 JWT 签名。无法使用 JWK 对令牌进行签名,在亚马逊的情况下,JWT 的签名是由 cognito 的 idp 中某处的证书完成的。因此,访问 JWK 并不是真正的安全问题。 模仿登录页面并使用我的 cognito id 仍然是可能的,但还有其他方法可以增加安全性。
【问题讨论】:
标签: amazon-web-services access-token amazon-cognito aws-sdk-js