遵循中概述的步骤https://learn.microsoft.com/en-us/azure/active-directory/active-directory-saas-amazon-web-service-tutorial正如Dirk_Nelson在评论中指出的那样:
错误:您的请求包含无效的SAML响应。为了注销,单击此处。
在浏览了AWS的文档后,我发现了这篇文章:http://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_saml.html#troubleshoot_saml_invalid-响应
属性名称角色会话名称更改为角色会话名称
属性名称角色更改为角色
命名空间需要https://aws.amazon.com/SAML/Attributes对于RoleSessionName和Role
在Azure门户中进行这些更改后,我能够成功进行身份验证。
虽然我已经有了这个。或者,亚马逊故障排除页面表示,这是由于角色缺少ARN的属性值。
<AttributeValue>arn:aws:iam::account-number:role/role-name1,arn:aws:iam::account-number:saml-provider/provider-name</AttributeValue>
我也试过了,但没有成功。还有其他可能丢失的东西吗?
最终目标是使用存储在Azure AD中的用户通过Amazon Cognito登录,这似乎是一个解决方案,除非我将其解释为与我所需要的相反。
总结上述讨论:
- 无效的SAML响应是由于SAML响应中缺少属性(Role)
用例
- 使用自定义UI在使用Azure AD的PHP应用程序中实现身份验证
探索的解决方案
- 将Azure AD与Cognito集成为SAML IdP
- 将Azure AD与Cognito集成为OIDC提供商
- 在应用程序中直接使用Azure AD作为OIDC提供商
- 完全跳过AWS集成&使用自定义库
问题
- 以上所有解决方案都重定向到Microsoft登录页面
下一步
- 当然可以跳过AWS集成
- 使用默认Azure登录UI将是最简单的解决方案,但不可行
- 寻找一些可以用来做同样事情的PHP库。大多数IdP都像Cognito、Auth0-tec。提供可用于使用Username&密码,即可以实现他自己的登录UI&提取用户名、密码&在SDK方法中使用它。检查是否可以使用Azure SDK
- 这个库的可能解决方案,但未经测试,不在PHP中