如何将AWS Cognito与Okta集成实现用户同步及单点登录?
AWS Cognito与Okta集成:实现用户无缝登录及账号状态同步
方案一:将Cognito作为Okta的OIDC身份提供商(推荐)
无需手动同步用户账号,用户直接用Cognito凭证登录Okta应用,Cognito账号状态直接决定Okta登录权限。
配置Cognito OIDC参数
进入Cognito用户池,打开目标App客户端的OIDC设置,记录以下信息:- 客户端ID
- 客户端密钥
- OIDC元数据地址:
https://cognito-idp.<你的区域>.amazonaws.com/<用户池ID>/.well-known/openid-configuration
在Okta中添加Cognito作为身份提供商
- 登录Okta控制台,进入「身份提供商」页面,选择添加「OpenID Connect」类型;
- 输入提供商名称,粘贴Cognito的OIDC元数据地址,Okta会自动导入授权、令牌等端点;
- 填入Cognito的客户端ID和密钥;
- 配置授权范围,至少勾选
openid、email、profile; - 设置属性映射规则,将Cognito返回的
email、given_name等属性对应到Okta用户属性。
设置Okta应用使用Cognito登录
打开你的Okta应用配置,在「登录」选项中,将默认身份提供商设为刚创建的Cognito提供商。用户访问Okta应用时,会自动跳转到Cognito登录页,验证通过后直接进入应用。账号失效同步
当Cognito用户账号被禁用、删除或验证状态失效时,用户登录Okta时Cognito会返回验证失败,Okta直接拒绝登录,无需额外同步操作。
方案二:Cognito触发器+Okta API自动同步用户(适合需Okta本地用户的场景)
若必须在Okta创建本地用户,可通过Cognito触发器调用Okta API实现同步:
Post Confirmation触发器创建Okta用户
- 在AWS Lambda创建函数,关联Cognito用户池的「Post Confirmation」触发器(用户完成邮箱验证后触发);
- Lambda核心逻辑(Python示例):
import requests import os def lambda_handler(event, context): user_attrs = event['request']['userAttributes'] email = user_attrs['email'] okta_domain = os.environ['OKTA_DOMAIN'] api_token = os.environ['OKTA_API_TOKEN'] # 调用Okta API创建用户 resp = requests.post( f"https://{okta_domain}/api/v1/users", headers={ "Authorization": f"SSWS {api_token}", "Content-Type": "application/json" }, json={ "profile": { "email": email, "login": email, "firstName": user_attrs.get('given_name', ''), "lastName": user_attrs.get('family_name', '') }, # 注意:Cognito无法返回明文密码,这里可设置Okta发送激活邮件,或采用方案一避免密码同步 "activate": False } ) resp.raise_for_status() return event - 为Lambda配置环境变量:
OKTA_DOMAIN(你的Okta域名)、OKTA_API_TOKEN(具备用户创建权限的Okta API令牌)。
账号状态同步
为Cognito添加「Post Authentication」触发器,当检测到用户状态为DISABLED时,调用Okta的POST /api/v1/users/{userId}/lifecycle/deactivate接口禁用对应Okta用户。无缝登录处理
由于Cognito不返回明文密码,推荐用户通过Cognito认证后,调用Okta Session API生成会话实现自动登录;或直接采用方案一的联邦登录方式,避免密码同步问题。
关键注意事项
- 安全性:方案一无需同步密码,避免了明文密码的风险,是优先选择;
- 属性一致性:确保Cognito与Okta的用户核心属性(如邮箱)一致,避免身份识别错误;
- 容错机制:在Lambda中添加重试和日志记录,处理API调用失败的情况。
内容的提问来源于stack exchange,提问作者fgonzalez
相关产品推荐
相关产品推荐

