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

如何在AWS Cognito回调中获取用户邮箱(SAML身份提供商场景)

解决AWS Cognito + PingOne SAML IdP发起登录时回调获取邮箱等属性的问题

我来帮你搞定这个问题!你遇到的是SAML身份提供商和Cognito集成时,自定义属性传递的常见场景,尤其是IdP发起的登录流程。要让邮箱这类参数出现在Cognito的回调里,得把三个核心环节配置到位,一步步来:

1. 先在PingOne里配置SAML断言,把邮箱属性发出来

  • 登录PingOne管理后台,找到你和Cognito集成的那个SAML应用
  • 找到「SAML Attributes」(或者类似命名的配置项),添加你要传递的属性:比如把PingOne里用户的邮箱字段(一般是user.email)映射到SAML断言里的email属性(名称随便你,但要和后续Cognito的映射对应上)
  • 保存配置后,记得确认PingOne在生成SAML响应时,会把这个属性放进<AttributeStatement>节点里——可以用SAML Tracer这类工具抓包验证一下,避免白忙活

2. 在Cognito用户池里配置属性映射,把SAML属性对应到用户池属性

  • 打开AWS控制台,进入你的Cognito用户池
  • 先去「属性」标签页,确保你要获取的属性(比如邮箱)已经启用:邮箱属于标准属性,直接勾选就行;如果是自定义属性,得提前创建(比如custom:employeeId)
  • 转到「联邦身份提供商」标签页,找到你的PingOne SAML提供商,点击编辑
  • 在「SAML属性映射」部分,添加映射规则:把PingOne发送的SAML属性名(比如刚才设的email),对应到Cognito用户池的标准属性email
  • 别忘了勾选「允许在身份验证期间更新用户池属性」,这样每次登录都会同步最新的属性值
  • 保存映射配置

3. 检查Cognito应用客户端的OAuth配置,确保属性能被传递

  • 进入用户池的「应用客户端」标签页,找到你的Web应用对应的客户端
  • 去「应用客户端设置」里,确认「允许的OAuth范围」包含了email(如果是自定义属性,范围就是custom:xxx)
  • 同时确保启用的OAuth流和你IdP发起的流程匹配(一般授权码流或隐式流都支持IdP发起)

4. 在Web应用里获取属性的正确姿势

  • 如果用的是授权码流:回调后拿到授权码,去Cognito的令牌端点换取ID Token和Access Token。ID Token是JWT格式,解码后就能看到email这类属性
  • 如果用的是隐式流:ID Token会直接出现在回调URL的id_token参数里,解码即可
  • 另外,也可以用Access Token调用Cognito的GetUser API,获取用户的完整属性列表

踩过的坑给你提个醒

  • 一定要验证SAML断言里确实包含了目标属性:很多时候问题出在PingOne没把属性发出来,而不是Cognito没处理
  • 属性名要严格匹配:SAML断言里的属性名和Cognito映射里的名称大小写、拼写必须完全一致
  • 回调URL要对齐:PingOne里配置的ACS URL必须和Cognito应用客户端里的回调URL完全相同,否则可能会导致属性丢失或者登录失败

内容的提问来源于stack exchange,提问作者nitesh jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:37:10