将SAML响应返回给SP时,大多数IdP(如AzureAD、Okta、Onelogin、GSuite)都有以下签名选项:
并且在没有任何配置的情况下,对于大多数IdP,签名的默认值是仅签署断言。
下面是来自AzureAD的SAML响应示例(默认签名选项是符号断言)。断言受到完整性保护,不能进行篡改。但是,断言以外的字段,Destation
InACK seTo
Issuer
,可以在不知情的情况下被篡改或添加/删除!
所以我的问题是:
由于断言是SAML响应的一部分,因此仅对SAML响应签名就足够了。这样,您可以保护/签署整个SAML身份验证响应。
通过对断言进行签名,您只能对响应中的属性语句进行签名。
通过只签署断言,我认为我们不会暴露任何漏洞,因为重要信息在SAML响应的断言中。
大多数IDP都有配置选项,可以根据SP中的要求处理签名。此外,如果您正在构建自己的IDP,您可以实现它以支持
查看SOF帖子中Scott的答案
IdP遵循SAML 2.0规范的唯一要求是对断言进行数字签名(参见http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf部分4.1.3.5)。这足以判断来自IdP的SSO操作是否应该受到与其联合的SP的信任。
对外部响应签名是可选的。它有一些安全好处,例如防止消息插入或修改(请参阅中的第6.1.3/6.1.5节http://docs.oasis-open.org/security/saml/v2.0/saml-sec-consider-2.0-os.pdf)-但在实践中,它经常被忽略,而不是依赖SSL/TLS。
我有一个Java web应用程序。我想为我的应用程序实现SAML单点登录登录。我有这个GitHub onelogin程序来发送请求并获得响应。但它没有正常工作。我在那里创建了一个帐户。但我没有企业账户。当我运行应用程序时,它将进入onelogin登录页面。我试图登录,但在响应中没有返回任何权限,表明我没有权限。如果我也提供了错误的凭据,那么它不会给出任何SAML响应。 所以我决定创建一个断言并签名
我试图遵循以下规范来验证SAML响应的签名:https://www.w3.org/tr/xmldsig-core/#sec-pkcs1 下面是我的工作流程:我得到SAML响应。我去掉签名信封,我把它规范化,我检查摘要,然后我检查签名。我能够成功地计算转换的SAML响应的SHA1摘要,并对其进行验证。然而,RSA-SHA1签名检查仍然无法实现。 SAML响应包含签名方法算法:http://www.w
我正在尝试将Google设置为SP,将我自己的数据库设置为IDP。我已经用我的登录和注销URL配置了我的GSuite帐户,google正在完美地重定向到它们。但在收到谷歌的SAML请求后,我尝试生成SAML响应,我得到了G套件-无法访问此帐户,因为无法验证登录凭据。 下面是我的SAML响应XML: 我使用python saml python包对saml响应进行签名:- 任何帮助都会apprecia
尝试为使用Spring MVC构建的JavaWeb应用程序设置SSO。我已经将我的应用程序注册到一个OKTA服务器,得到了一个元数据URL和一个SignOn URL。我正在使用我的应用程序中的SignOn URL,验证成功,然后使用一些包含SAML响应对象的表单数据发出POST请求。 从这里开始下一步应该做什么?我已经解码了SAML响应,现在根据我的理解,我需要获得一个令牌或一个会话ID,我需要使
我为我们的一个客户开发了一个定制的SAML IdP。但是,当试图将以下响应传递给SP时,它失败了。我尝试使用一些在线SAML在线工具来验证响应,我看到了一些错误,但我不知道哪里出了问题。有人能帮忙吗? 在samltool.com上使用验证器,我得到以下错误: XML无效。 行:69列:0-->元素‘{http://www.w3.org/2000/09/xmldsig#}signature':不需要
我有一个具有脱机功能的单页web应用程序(即,它可以在不访问应用程序服务器的情况下工作)。我需要提供SAML身份验证,据我所知,身份提供者将通过HTTP Post将响应返回到我的应用程序服务器。 我已经实现了一个HTTPendpoint(Java servlet),它接收IdP响应和断言,并将用户登录到应用程序中,但如果应用程序正在脱机使用,这当然不起作用。 是否有一种方法可以在浏览器中“处理”S