1

我一直在尝试使用 SAML 从基于云的 SAML 提供商到托管在 AWS S3 存储桶上的应用程序进行身份联合。SAML IdP 将 SAMLResponse 发布到配置的 ACS(Web 应用程序中的 API 网关端点)。当我将这个 SAMLResponse 与 Postman 一起使用到 AssumeRoleWithSAML 来获取 STS 令牌时,它可以在正确的响应 200 下正常工作。但是使用 CLI(AWS 命令​​行界面)低于错误时,相同的 SAMLResponse 无法正常工作。我尝试使用 AWS CLI 版本 1.x 以及最新的 2.x,响应相同。

命令

aws sts 假设-role-with-saml --role-arn arn:aws:iam::123456789:role/xxxxx --principal-arn arn:aws:iam::123456789:saml-provider/xxxx-saml-provider - -saml-assertion 文件://samlresponse.log

错误

调用 AssumeRoleWithSAML 操作时发生错误 (InvalidIdentityToken):无效的 base64 SAMLResponse(服务:AWSOpenIdDiscoveryService;状态代码:400;错误代码:AuthSamlInvalidSamlResponseException;

无法找到任何好的帮助来了解问题所在,并且 CLI 没有给出任何有意义的错误,例如“令牌已过期”等。

以下是使用 Postman 的示例 POST 请求,效果很好

https://sts.amazonaws.com/?Version=2011-06-15&Action=AssumeRoleWithSAML&RoleArn=arn:aws:iam::123456789:role/xxxx-saml&PrincipalArn=arn:aws:iam::123456789:saml-provider/xxxx -saml-provider&SAMLAssertion=PD94bWwgdmVyc2lv===

4

1 回答 1

0

这解决了。使用的 SAMLResponse 是 URL 编码的,对于 --assume-role-with-saml,base64 值不兼容。一旦使用 decodeURI 函数对响应进行解码,它就会按预期工作。

于 2021-04-02T04:50:23.453 回答