我想通过 Amazon Cognito 用户池在我的应用程序负载均衡器中使用 Amazon Cognito 身份验证。但是,我的用户池位于另一个 AWS 账户中。
解决方法
在以下解决方法中,账户 B 是应用程序负载均衡器的所属账户,账户 A 是用户池的所属账户。
创建应用程序负载均衡器
如果您已经有应用程序负载均衡器,请继续进行下一部分。
如果您没有应用程序负载均衡器,请[创建一个带有 HTTPS 侦听器的应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)。
**注意:**只有 HTTPS 侦听器支持 authenticate-cognito 和 authenticate-oidc 规则操作类型。
获取账户 B 中应用程序负载均衡器的 DNS 名称
在账户 B 中完成以下步骤:
- 打开 Amazon Elastic Compute Cloud (Amazon EC2) 控制台。
- 在导航窗格中,选择 Load Balancers(负载均衡器)。
- 选择您的应用程序负载均衡器。
- 在 Description(描述)选项卡上,记下您的负载均衡器的 DNS 名称,以便在后续步骤中使用。
在账户 A 中创建并配置用户池
如果您在另一个账户中已有用户池,请继续进行下一部分。
如果您没有用户池,请在账户 A 中完成以下步骤:
- [创建具有应用程序客户端的 Amazon Cognito 用户池](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-user-pools-application.html)。
**注意:**创建应用程序客户端时,您可以选择以下四个选项之一:传统 Web 应用程序、单页应用程序、移动应用程序和 M2M 身份验证。如果您选择传统 Web 应用程序或 M2M 身份验证,将会生成一个带客户端密钥的应用程序客户端。
- 打开 Amazon Cognito 控制台。
- 在您的用户池的 User pool overview(用户池概览)部分中,记下用户池 ID,以便在后续步骤中使用。
- 在 Branding(品牌)选项卡上,选择 Domain(域)。为您的用户池添加 Amazon Cognito 域名。该域名是 Cognito 托管 UI 所需的唯一域前缀。
- 在 Applications(应用程序)下,选择 App clients(应用程序客户端)。
- 选择要更新的应用程序客户端。
- 在 App client(应用程序客户端)页面上,完成以下步骤:
启用显示客户端密钥。
记下应用程序客户端 ID 和应用程序客户端密钥,以便在后续步骤中使用。
- 在 Hosted UI(托管 UI)下,添加 https://load-balancer-dns-name/oauth2/idpresponse 和 https://custom-domain-name/oauth2/idpresponse 回调 URL。
- 对于 OAuth 2.0 授权类型,选择 Authorization code grant(授权码授权)。
- 对于 OAuth 2.0 范围,选择 openid。
- 选择 Save changes(保存更改)。
获取您的用户池的 OIDC 配置详细信息
要将您的用户池设置为应用程序负载均衡器上的 OpenID Connect (OIDC) 身份提供者 (IdP),您必须获取 OIDC 配置端点的详细信息。
要获取配置详细信息,请完成以下步骤:
- 在您的浏览器中输入以下 URL:https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/openid-configuration。
**注意:**请将 region 替换为您的用户池的 AWS 区域(例如 us-east-1),将 userPoolId 替换为您的用户池 ID。
- 在浏览器中显示的 JSON 响应中,记下以下字段的值:
authorization_endpoint
issuer
scopes_supported
token_endpoint
userinfo_endpoint
在账户 B 中配置您的应用程序负载均衡器
在账户 B 中完成以下步骤:
- 打开 Amazon EC2 控制台。
- 选择您的应用程序负载均衡器。
- 在 Listener and Rules(侦听器和规则)选项卡上,选择 HTTPS:443 rule(HTTPS:443 规则)。
- 在 Manage rules(管理规则)下,选择 Edit rule(编辑规则)。
- 选择默认规则。
- 在 Actions(操作)下,选择 Edit rule(编辑规则)。
- 在 Default(默认)操作下,选择 Authenticate Users(对用户进行身份验证)。
**注意:**默认情况下,OIDC identity provider(OIDC 身份提供者)处于选中状态。
- 在以下字段中输入您记下的值:
对于 Issuer(发布者),输入发布者值。
对于 Authorization endpoint(授权端点),输入 authorization_endpoint 值。
对于 Token endpoint(令牌端点),输入 token_endpoint 值。
对于 User info endpoint(用户信息端点),输入 userinfo_endpoint 值。
对于 Client ID(客户端 ID),输入您的应用程序客户端 ID。
对于 Client secret(客户端密钥),输入您的应用程序客户端密钥。
- 选择 Save(保存)。
测试设置
完成以下步骤:
- 在浏览器中,输入您的应用程序负载均衡器的 URL。
- 验证您是否被重定向到 Cognito 托管 UI。
- 使用有效的用户凭证登录。
**注意:**为避免错误,请确保所有 URL 均使用小写字符。
相关信息
使用应用程序负载均衡器内置身份验证简化登录
使用应用程序负载均衡器对用户进行身份验证
应用程序负载均衡器的侦听器规则
OIDC 用户池 IdP 身份验证流