You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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作为身份提供商

    1. 登录Okta控制台,进入「身份提供商」页面,选择添加「OpenID Connect」类型;
    2. 输入提供商名称,粘贴Cognito的OIDC元数据地址,Okta会自动导入授权、令牌等端点;
    3. 填入Cognito的客户端ID和密钥;
    4. 配置授权范围,至少勾选openid、email、profile;
    5. 设置属性映射规则,将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用户

    1. 在AWS Lambda创建函数,关联Cognito用户池的「Post Confirmation」触发器(用户完成邮箱验证后触发);
    2. 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
      
    3. 为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:10:16