如果我的Identity Provider向我发送了一个在<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
元素中具有无效签名的Saml2AuthnResponse
,则Unbind()
方法将抛出Invalid Signature
异常。这很好,也是意料之中的事。
然而,如果<Signature>
元素完全丢失(Saml2AuthnResponse
是无符号的(,我就不会有任何异常。这是意料之中的事吗?这是安全风险吗?
断言经过加密,通信通过HTTPS进行。但我仍然有点担心Saml2AuthnResponse
的签名是可选的。我可以强制/要求签名吗?
如果您已经从应用程序上传了元数据,那么它应该具有WantAssertionsSigned="1〃;指定。但是,一般情况下,您需要确保在"身份提供程序"配置中选择了"签名断言"、"签名响应"或"同时签名"。
在应用程序端,如果能够指定需要对断言进行签名,则SAML库必须进行检查以确保存在签名。
例如,ITfoxtec似乎允许在元数据中使用WantAssertionsSigned,但(乍一看(在收到断言时不会检查它。
如果真的,那很可能是个错误
始终需要SAML 2.0 Authn响应签名。
如果使用POST绑定XML签名发送SAML 2.0 Authn响应,则确保响应的安全。
请参阅XML签名验证:https://github.com/ITfoxtec/ITfoxtec.Identity.Saml2/blob/master/src/ITfoxtec.Identity.Saml2/Request/Saml2Request.cs#L228
另一方面,如果使用重定向绑定发送SAML 2.0 Authn响应,则签名将放置在查询字符串(URL(中。