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

AWS Identity Center与SAML响应问题:网页获取AWS凭证遇阻

问题解答

1. 该解决方案是否可行?最佳方案是什么?

方向可行,但当前配置存在缺失。从你提供的SAMLResponse来看,断言的<AttributeStatement>为空,缺少获取AWS临时凭证必需的角色属性——这是因为AWS Identity Center的应用配置未完成角色映射。

修正配置后,这个基于SAML 2.0的SSO流程就是企业场景下的标准方案。如果要简化,也可以考虑用AWS Cognito联合身份池对接Identity Center,但SAML方案更适合自定义网站的SSO集成需求。

2. SAML验证POST请求的正确格式是什么?

你之前的请求逻辑完全错误:AWS SSO的断言端点是用来生成SAML断言的,并非接收验证请求的接口。SAMLResponse是Identity Center(身份提供商,IdP)发给你的网站(服务提供商,SP)的,验证逻辑应该由你的网站自行完成,具体步骤如下:

  • 对收到的SAMLResponse进行base64解码,得到XML内容
  • 从XML的<KeyInfo>中提取IdP的X509证书,验证Response或Assertion的数字签名,确保内容未被篡改
  • 验证断言的有效性:
    • 检查<Destination>是否匹配你的网站ACS(断言消费服务)地址
    • 检查<Audience>是否匹配你的SP受众配置
    • 检查<NotBefore>和<NotOnOrAfter>,确保断言在有效期内
    • 检查<Issuer>是否为可信的AWS Identity Center地址
  • 不需要将SAMLResponse回传给AWS的任何端点

3. 如何通过SAMLResponse扮演角色?

核心前提是让SAML断言包含AWS角色相关属性,具体分为两步:

第一步:修正AWS Identity Center应用配置

编辑你的Identity Center应用,添加角色映射:

  • 设置属性https://aws.amazon.com/SAML/Attributes/Role,值格式为IAM角色ARN,SAML提供商ARN(SAML提供商ARN是你在IAM中创建的对应Identity Center的提供商ARN)
  • 设置属性https://aws.amazon.com/SAML/Attributes/RoleSessionName,值为用户的邮箱或唯一ID(如<NameID>中的内容)

完成配置后,新生成的SAMLResponse的<AttributeStatement>中会包含这两个属性。

第二步:调用STS接口获取临时凭证

当拿到包含角色属性的SAMLResponse后:

  1. 解码XML,提取Role属性值(拆分出RoleArn和PrincipalArn)、RoleSessionName属性值
  2. 调用AWS STS的AssumeRoleWithSAML接口,传入以下参数:
    • RoleArn:拆分出的IAM角色ARN
    • PrincipalArn:拆分出的SAML提供商ARN
    • SAMLAssertion:原始的base64编码SAMLResponse(确保编码正确,无多余转义)
  3. 接口返回结果中会包含AccessKeyId、SecretAccessKey和SessionToken,即你需要的AWS临时凭证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:39:49