当前位置: 首页 > 知识库问答 >
问题:

在SAML响应中,我们应该签署响应还是断言

沈实
2023-03-14

将SAML响应返回给SP时,大多数IdP(如AzureAD、Okta、Onelogin、GSuite)都有以下签名选项:

  • 签名响应

并且在没有任何配置的情况下,对于大多数IdP,签名的默认值是仅签署断言。

下面是来自AzureAD的SAML响应示例(默认签名选项是符号断言)。断言受到完整性保护,不能进行篡改。但是,断言以外的字段,DestationInACK seToIssuer,可以在不知情的情况下被篡改或添加/删除!

所以我的问题是:

  1. 为什么有3种签名?(响应、断言、响应

共有2个答案

颜举
2023-03-14

由于断言是SAML响应的一部分,因此仅对SAML响应签名就足够了。这样,您可以保护/签署整个SAML身份验证响应。

通过对断言进行签名,您只能对响应中的属性语句进行签名。

通过只签署断言,我认为我们不会暴露任何漏洞,因为重要信息在SAML响应的断言中。

大多数IDP都有配置选项,可以根据SP中的要求处理签名。此外,如果您正在构建自己的IDP,您可以实现它以支持

段哲圣
2023-03-14

查看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':不需要

  • 关于这一点的文献不多。我想知道,我们应该先打电话吗 或 在https://developers.google.com/admob/android/quick-start 尽管谷歌建议致电<code>MobileAds。尽早初始化 在加载广告之前,让您的应用通过调用MobileAds.initialize()初始化Mobile Ads SDK,MobileAds.initialize初始化SDK,并