作为服务提供商,我正在尝试通过从身份提供商(IdP)获取SAML断言(SAML 1.0)来验证我的页面上的用户。执行以下步骤(非常抽象):
这个过程是否足以确保用户身份验证合法? 我是否只是授予用户在步骤5中访问我的服务的权限,或者我是否必须通过验证断言中的签名来确保SAML断言是否有效?如果是这样,我该怎么做?我是否会错过任何其他步骤?
答案 0 :(得分:3)
不,如果您使用的是工件解析协议,如果您信任传输,则无需验证断言的签名。如果传输是https URL并且您的服务器具有一组正确的受信任根证书,则通常可以信任该传输。
SAML2标准(核心,第5.3节)规定,如果断言包含在另一个已签名的元素中,则应认为该断言已正确签名。在工件产生的情况下,它意味着覆盖整个工件解析响应消息的签名足以考虑要签名的断言。标准进一步说明通过经过身份验证的SLL连接接收的SAML消息可以被认为是正确签名的,如果由轮廓。
查看WebSSO配置文件,它指出对于工件解析(配置文件,4.1.4.4),“使用工件解析配置文件对工件进行解除引用必须相互验证,保护完整性并保密。”正确设置的https连接涵盖哪个IMHO。
但是,如果您使用完全管理方式执行SAML2,则还应该为特定设置配置部署配置文件,以明确定义https连接是否可信。
答案 1 :(得分:2)
我的简短个人推荐:如果IDP已经签署了断言,那么验证它的关键应该已经在元数据中,验证它应该是一个简单的操作并具有很大的安全性。这样做。
然而......(答案很长) 总是很难说什么是安全的,什么是不安全的。这一切都取决于您对网站的安全性。使用断言是一种使其更安全的方法。
这样用户自己就无法编辑断言。签名是一个更安全的步骤,确保断言来自IDP并且没有改变。
如果没有它,攻击者就会拥有pretendend为IDP,将工件重定向到自己的服务器。然后,攻击者可以回复他想要的任何断言。另一种情况是,如果断言不受签名保护,则可以在互联网上传输时在某处更改。
使用任何安全控制措施,您必须权衡用户身份验证对您的重要性以及对绕过它的人的连续性。