如何在AWS Cognito用户池中配置Okta作为SAML身份提供商?
我之前成功配置过Okta作为SAML 2.0 IDP与AWS Cognito用户池的联合登录,下面是两端详细的分步操作指南,亲测可行:
Okta 端配置步骤
创建SAML应用集成
- 登录Okta控制台,进入Applications → Create App Integration
- 选择
SAML 2.0类型,点击Next - 填写应用基本信息(比如命名为「Cognito联合登录」),可上传自定义Logo,完成后点击Next
配置SAML核心参数
- Single sign-on URL:填入你的Cognito用户池SAML断言接收地址,格式为:
示例:https://<你的用户池域名>/saml2/idpresponsehttps://my-cognito-pool.auth.us-east-1.amazoncognito.com/saml2/idpresponse - Audience URI (SP Entity ID):填入Cognito用户池的SP实体ID,格式为:
示例:urn:amazon:cognito:sp:<你的用户池ID>urn:amazon:cognito:sp:us-east-1_XYZ123 - Name ID format:选择
EmailAddress(这是最常用的匹配方式,也可根据需求选Persistent) - Application username:选择
Email(确保与Cognito用户池的用户标识字段一致) - 添加必要的SAML属性声明(这些属性会同步到Cognito用户池):
- 属性名:
email,值:user.email - 属性名:
givenName,值:user.firstName - 属性名:
familyName,值:user.lastName
(可根据你的用户池属性需求添加更多字段)
- 属性名:
- Single sign-on URL:填入你的Cognito用户池SAML断言接收地址,格式为:
获取Okta SAML元数据
- 完成应用创建后,进入该应用的Sign On标签页
- 在「SAML Signing Certificates」区域,下载元数据XML文件(后续Cognito配置会用到)
AWS Cognito 用户池配置步骤
添加SAML身份提供商
- 登录AWS控制台,进入Cognito用户池,点击Federation → Identity providers
- 点击Add provider,选择
SAML类型,点击Next - 填写提供商名称(比如「Okta-IDP」),上传从Okta下载的SAML元数据XML,点击Create provider
配置属性映射
- 在刚创建的SAML提供商详情页,点击Attribute mapping
- 将Okta发送的SAML属性映射到Cognito用户池的对应属性:
- Okta的
email→ Cognito的email - Okta的
givenName→ Cognito的given_name - Okta的
familyName→ Cognito的family_name
(确保这些属性已在用户池的Attributes标签页中启用)
- Okta的
更新应用客户端Hosted UI设置
- 进入用户池的App integration → App clients,选择你的目标应用客户端
- 进入Hosted UI配置页面:
- 在「Identity providers」中勾选刚创建的Okta SAML提供商(可选择保留Cognito原生登录或仅启用Okta)
- 填写你的应用Callback URLs和Sign out URLs(比如
https://your-app-domain.com/callback) - 保存配置
测试联合登录
访问Cognito Hosted UI的登录链接,格式为:https://<你的用户池域名>/login?response_type=code&client_id=<你的应用客户端ID>&redirect_uri=<你的回调地址>选择Okta登录选项,跳转至Okta登录页验证身份,成功后会回调至你的应用。
常见问题排查
- 如果登录后Cognito报错,优先检查SAML断言中的属性是否与Cognito属性映射完全匹配
- 用SAML tracer工具捕获SAML请求/响应,确认Okta是否正确发送了所需属性
- 确保Okta应用中的URL和Entity ID与Cognito的对应值完全一致,无拼写或格式错误
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

