关于Terraform配置AWS Cognito身份池Cognito类型认证提供商的咨询
配置Terraform AWS Cognito身份池的Cognito认证提供商
我完全懂你遇到的这个困惑——查文档时第三方登录(比如Google、Facebook)的示例一抓一大把,但要把Cognito用户池作为身份池的认证源,却找不到明确指引。其实核心是你找错了配置参数,咱们一步步来解决:
关键区别:Cognito用户池不用supported_login_providers
supported_login_providers是给OAuth/OIDC类的第三方身份提供商用的,而AWS自己的Cognito用户池作为认证源,需要用专门的cognito_identity_providers块来配置,这是很多人容易踩的坑。
完整配置示例
下面是从创建Cognito用户池、用户池客户端,到关联身份池的完整Terraform代码:
1. 创建Cognito用户池和用户池客户端
# 创建Cognito用户池 resource "aws_cognito_user_pool" "example" { name = "example-user-pool" # 可选:配置用户池基础设置,比如用户名属性、MFA等 username_attributes = ["email"] auto_verified_attributes = ["email"] } # 创建Cognito用户池客户端(身份池需要这个客户端ID关联) resource "aws_cognito_user_pool_client" "example" { name = "example-user-pool-client" user_pool_id = aws_cognito_user_pool.example.id # 允许身份池访问的必要配置 generate_secret = false # 身份池客户端不需要密钥 explicit_auth_flows = [ "ALLOW_USER_SRP_AUTH", "ALLOW_REFRESH_TOKEN_AUTH" ] }
2. 配置Cognito身份池并关联Cognito用户池
resource "aws_cognito_identity_pool" "example" { identity_pool_name = "example-identity-pool" allow_unauthenticated_identities = false # 根据需求调整是否允许未认证用户 # 核心:配置Cognito用户池作为认证提供商 cognito_identity_providers { # Provider名称格式:cognito-idp.<区域>.amazonaws.com/<用户池ID> provider_name = "cognito-idp.${var.aws_region}.amazonaws.com/${aws_cognito_user_pool.example.id}" client_id = aws_cognito_user_pool_client.example.id server_side_token_check = true # 建议开启,验证令牌有效性 } # 如果同时需要第三方登录,可保留supported_login_providers # supported_login_providers = { # "graph.facebook.com" = "你的Facebook客户端ID" # "accounts.google.com" = "你的Google客户端ID" # } }
关键参数解释
provider_name:必须严格按照cognito-idp.<region>.amazonaws.com/<user_pool_id>格式填写,这个值和AWS控制台里显示的Cognito用户池提供商名称完全一致。client_id:就是我们创建的Cognito用户池客户端ID,身份池通过这个ID关联到对应的用户池。server_side_token_check:开启后AWS会在认证时验证令牌的签名和有效性,提升安全性,建议始终开启。
验证配置
部署完成后,登录AWS控制台进入Cognito身份池的“认证提供商”页面,就能看到已成功关联你的Cognito用户池,和手动在UI里配置的效果完全一致。
内容的提问来源于stack exchange,提问作者user423002
相关产品推荐
相关产品推荐

