【发布时间】:2019-11-18 21:38:30
【问题描述】:
我已经使用通过 Cognito 用户池连接的 OIDC 身份提供商 (SalesForce) 设置 ALB 内置身份验证,或多或少遵循 this guide。
通过此设置,我的 Web 应用程序(基于 Java/Spring Boot)接收由 ALB 转发的标头 x-amzn-oidc-accesstoken、x-amzn-oidc-identity 和 x-amzn-oidc-data。
我可以解析和验证这些标头中包含的 JWT 令牌,例如,从那里获取用户的电子邮件。
现在我的目标是让经过身份验证的用户通过 AWS JavaScript SDK 直接从客户端访问某些 AWS 资源或服务。例如,我希望用户能够列出 S3 存储桶上的对象或调用某些 lambda 函数。
我的理解是,我需要为这个经过身份验证的用户生成临时凭据。但我找不到有关如何执行此操作的具体文档。最接近的命中是:
- https://docs.aws.amazon.com/AmazonS3/latest/dev/AuthUsingTempFederationTokenJava.html
- https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-browser.html
但我无法将那里的点连接起来。我的期望是我可能应该以某种方式使用x-amzn-oidc-accesstoken、x-amzn-oidc-identity 和x-amzn-oidc-data 标头,但我找不到任何可以做到这一点的代码。
所以我的问题是:如何为通过 Cognito 与 OIDC 身份提供程序通过内置 ALB 身份验证进行身份验证的用户生成临时凭据?
【问题讨论】:
-
您是否尝试过 Cognito 服务提供者框架?它们直接通过 SDK 公开 AWS 服务,并包括“凭证提供商与 Amazon Cognito 通信,检索经过身份验证和未经身份验证的用户的唯一标识符以及 AWS 移动 SDK 的临时、有限特权 AWS 凭证。检索到的凭证对一个人有效小时,提供商会在它们过期时刷新它们。” docs.aws.amazon.com/cognito/latest/developerguide/…
-
@lasleyd 这意味着“一旦 Amazon Cognito 凭证提供程序被初始化和刷新”。而且我找不到如何为此使用
x-amzn-oidc-标头。 -
Cognito 文档在这种情况下并不直观。您是否已经浏览过本节 (docs.aws.amazon.com/cognito/latest/developerguide/…) 并且浏览过任何提供程序示例:aws-amplify.github.io/aws-sdk-android/docs/reference/com/…?
-
@lasleyd 是的,我看到了这些文档。我可以从
x-amzn-oidc-accesstoken或x-amzn-oidc-data验证 JWT 令牌,但我仍然不知道如何使用这些令牌创建临时凭证。 -
好的,既然您使用的是 Java/Spring,那么您是否定义了此处所述的 JWT 处理器? gorillalogic.com/blog/java-integration-with-amazon-cognito 这将使访问和操作令牌变得更加容易。 Nimbus JOSE 上的文档更详细地解释了解析选项/功能:connect2id.com/products/nimbus-jose-jwt
标签: amazon-web-services amazon-cognito openid-connect