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

AWS Cognito User Pool SAML是否支持SCIM(ADFS)及实现示例咨询

1. Cognito User Pool 适配ADFS SAML场景的SCIM支持说明

Cognito User Pool 原生的SAML联邦认证模块没有内置开箱即用的SCIM 2.0服务端能力,你没法直接把ADFS的SCIM同步端点指向Cognito就完成用户生命周期自动同步。
但这个场景的SCIM能力完全可以落地,不存在技术卡点:SAML模块本身只负责联邦登录的断言校验、会话建立,SCIM需要的用户增删改查同步能力,可以通过AWS原生服务搭配Cognito公开的管理API实现,不需要依赖第三方工具。
这里要先区分容易搞混的能力:Cognito SAML默认带JIT(即时预置)能力——用户第一次从ADFS走SAML登录时,会自动在User Pool里创建对应用户,但这个能力不支持反向/增量同步:ADFS侧禁用用户、删除用户、修改用户属性时,Cognito侧的对应数据不会自动更新,这部分就是SCIM需要补全的能力。

2. 具体实现操作示例

整个方案全用AWS原生组件搭建,不需要额外购置服务器,核心分三步:

前置准备

先完成Cognito和ADFS的基础SAML联邦对接,确认用户可以通过ADFS SSO正常登录Cognito接入的应用,记录好Cognito User Pool ID,提前梳理好需要同步的用户属性映射规则(比如邮箱、显示名、工号、部门这些字段和AD属性的对应关系)。

第一步:搭建SCIM协议适配层

用Lambda + API Gateway搭建符合SCIM 2.0规范的接口层,只需要实现ADFS SCIM客户端强制调用的4个核心接口即可,不需要覆盖全量SCIM规范:

  • GET /Users:查询Cognito内的用户信息,供ADFS做用户存在性校验
  • POST /Users:ADFS侧创建用户时,调用Cognito的AdminCreateUser接口创建对应用户
  • PATCH /Users/{id}:ADFS侧更新用户属性、禁用/启用用户时,调用Cognito的AdminUpdateUserAttributes、AdminDisableUser、AdminEnableUser接口完成对应操作
  • DELETE /Users/{id}:ADFS侧删除用户时,调用Cognito的AdminDeleteUser接口删除对应账号

给个Lambda处理用户创建请求的核心Python代码片段参考:

import boto3
cognito_client = boto3.client('cognito-idp')
# 替换为你自己的Cognito User Pool ID
USER_POOL_ID = "ap-northeast-1_xxxxxxxxx"

def lambda_handler(event, context):
    # 解析ADFS发送的SCIM标准请求体
    req_data = event.get("body", {})
    user_email = req_data["emails"][0]["value"]
    display_name = req_data.get("displayName", "")
    
    # 调用Cognito接口创建用户
    create_resp = cognito_client.admin_create_user(
        UserPoolId=USER_POOL_ID,
        Username=user_email,
        UserAttributes=[
            {"Name": "email", "Value": user_email},
            {"Name": "name", "Value": display_name},
            {"Name": "email_verified", "Value": "true"}
        ],
        # 关闭Cognito默认的邀请邮件,账号通知由AD域统一管理
        MessageAction="SUPPRESS"
    )
    
    # 返回符合SCIM规范的响应给ADFS
    return {
        "statusCode": 201,
        "body": {
            "id": create_resp["User"]["Username"],
            "userName": user_email,
            "emails": [{"value": user_email, "primary": True}],
            "displayName": display_name
        }
    }

接口部署完成后,给API Gateway配置访问密钥,后续填到ADFS的SCIM配置页即可。

第二步:配置ADFS侧SCIM同步规则

在ADFS的SCIM预置配置页填入你部署的API Gateway端点、访问密钥,把需要同步的AD属性和SCIM接口的字段做一一映射,注意字段名要和Cognito User Pool里定义的属性(包括自定义属性)完全匹配,避免同步时字段丢失。

第三步:同步逻辑校验

分别在ADFS侧执行创建测试用户、修改用户属性、禁用用户、删除用户操作,到Cognito控制台核对对应用户的状态、属性是否同步更新,同时验证变更后的用户走SAML登录是否符合预期。

小提示:如果你的用户规模小于1000人,对同步实时性要求不高,也可以不用搭标准SCIM接口,直接写个定时Lambda脚本每天拉取一次AD侧的用户全量数据,批量和Cognito User Pool里的用户做比对更新就行,实现成本更低。


内容的提问来源于stack exchange,提问作者Dennis Liger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:36:23