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

如何区分Cognito用户池同一邮箱用户的社交与SAML外部提供商登录?

Cognito区分SAML与社交登录并限制企业账户访问的实现方案

以下是几个可行的实现思路:

1. 用自定义用户属性标记登录来源

  • 用户首次通过第三方登录时,借助Cognito的预注册触发器,从event.request.userAttributes里的identities字段提取提供商类型(比如providerName是AzureAD就归为SAML,Google/Facebook归为社交),给用户添加一个自定义属性(比如custom:auth_provider_type),值设为saml或social。
  • 也可以用后认证触发器每次登录时确认或更新这个属性,防止被篡改。
  • 后续访问企业账户时,检查用户的这个自定义属性,只允许saml标记的用户进入。

2. 通过Cognito组划分用户类型

  • 创建两个Cognito用户组:Enterprise_Users(仅SAML登录用户加入)和Social_Users(社交登录用户)。
  • 同样用预注册或后认证触发器,根据登录提供商类型把用户分配到对应组。比如检测到是SAML提供商登录,就把用户加入Enterprise_Users组。
  • 在应用或API的授权逻辑里,只允许Enterprise_Users组的用户访问企业账户资源。

3. 解析ID Token验证登录提供商

  • Cognito签发的ID Token里自带identities字段,里面的providerName会明确显示用户是通过哪个提供商登录的。
  • 应用端验证ID Token的有效性后,解析这个字段,确认是指定的SAML服务商(比如Azure AD)才允许访问企业账户,社交提供商登录的直接拒绝。
  • 注意必须验证ID Token的签名,防止被伪造篡改,用Cognito的公钥就能做验证。

4. 身份池角色映射控制权限(若用联合身份)

  • 如果用Cognito身份池做联合身份管理,可以给不同的身份提供商配置不同的IAM角色:SAML提供商映射到有企业账户访问权限的角色,社交提供商映射到无权限的角色。
  • 用户访问企业资源时,通过IAM角色的权限来控制,只有SAML对应的角色能获取访问权限。

内容的提问来源于stack exchange,提问作者David Meléndez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:02:38