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

如何在AWS Cognito用户池中验证联邦登录并限制仅指定用户可登录

AWS Cognito限制第三方IdP指定用户登录解决方案

首先明确:该需求完全可通过AWS Cognito原生能力实现,核心依赖Cognito的Lambda触发器机制,在第三方用户完成IdP身份验证后、Cognito发放访问令牌前插入自定义校验逻辑,具体实现步骤如下:

1. 前置准备

  • 提前梳理允许登录的用户唯一标识(如邮箱、企业员工ID),推荐存储在AWS DynamoDB表中(低延迟查询,也可使用其他Lambda可访问的存储介质),表主键设置为你选择的用户标识字段(如email)
  • 确认Cognito用户池已完成第三方IdP(SAML ADFS、Google等)的集成,且已将IdP返回的用户唯一标识字段映射到Cognito用户属性中

2. 开发校验逻辑Lambda函数

可选择任意Lambda支持的运行时,以Python为例,核心逻辑参考如下:

import boto3

# 初始化DynamoDB客户端
dynamodb = boto3.resource('dynamodb')
allow_list_table = dynamodb.Table('你的允许用户列表DynamoDB表名')

def lambda_handler(event, context):
    # 从Cognito事件中获取用户属性,此处以邮箱为例,可替换为你使用的唯一标识字段
    user_identity = event['request']['userAttributes']['email'].strip().lower()
    
    # 匹配允许列表
    try:
        query_resp = allow_list_table.get_item(Key={'email': user_identity})
        # 不在列表内直接抛出异常终止登录流程
        if 'Item' not in query_resp:
            raise Exception("当前账号不在允许访问列表中,无法登录")
    except Exception as e:
        raise e
    
    # 匹配成功,返回原事件继续后续令牌发放流程
    return event

注意:需要为该Lambda配置对应DynamoDB表的只读访问权限,且Lambda需与Cognito用户池处于同一AWS区域。

3. 绑定触发器到Cognito用户池

  • 打开AWS Cognito控制台,进入对应用户池的配置页面,选择「用户池属性」选项卡
  • 找到「Lambda触发器」配置区块,触发器类型选择预身份验证,下拉选择刚才创建的Lambda函数,保存配置即可生效

4. 特殊场景适配

  • 若不同IdP返回的用户标识字段名不同(比如部分SAML IdP的邮箱字段为http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress),可在Lambda中先判断用户来源IdP,再对应取值即可
  • 允许列表更新直接操作存储的DynamoDB表即可,无需修改Lambda或Cognito配置

内容的提问来源于stack exchange,提问作者zeeshan peerzade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:02