我是SP,想要验证来自IdP的签名。IdP告诉我,我们的SP不信任IdP的证书。
根据我的理解,这种情况会发生:
SP-> SAML request digitally signed with private key of SP
IdP-> SAML request gets verified with public key of SP (from metadata)
IdP-> SAML response signed with private key of IdP
SP-> SAML response gets verified with public key of IdP (from metadata)那么,我需要如何信任IdP的证书呢?当它使用元数据中提供的公钥进行验证时,还不够吗?是否需要将证书中的内容导入到我的IdP文件夹中?
发布于 2021-09-08 14:55:56
考虑这些事情的最好方法可能是,签名应该始终使用私钥完成,验证应该始终使用公钥完成。
在SP启动的标准web流中,以下是使用证书的位置和方式的说明:
SP --> IdP SP发送的AuthnRequest是使用SP的私钥签名的,IdP使用SP的公共keyIdP --> SP验证AuthnRequest签名,至少IdP发送的SamlResponse的一部分将被签名。如果整个响应都不是,那么里面的断言应该是。如果整个响应都是签名的,那么断言就不一定是签名的。在任何一种情况下,签名都将使用IdP的私钥,SP将使用IdP的公钥对其进行验证。一些产品(可能是所有的DIY系统/库)可能允许您对响应和断言进行签名,但没有理由这样做-没有理由。除了对响应进行签名之外,它没有提供任何额外的好处。
正如Stefan在他对这个问题的评论中指出的那样,这个“问题”通常在产品中通过使用元数据传输来配置自己来解决,而不仅仅是一些URL和公钥的电子邮件交换。元数据交换的典型流程是SP向IdP提供基准元数据文件,该文件定义SPs ACS URL、用于签名验证的SP公钥以及其应用程序所需的属性。然后IdP加载它,找出它们具有哪些属性来满足SP的属性要求,然后生成它们的元数据,其中包含它们的协议URL(例如应该将身份验证请求发送到何处)和证书等,并将其发送回SP。SP加载它,然后你就可以去赛马了。
https://stackoverflow.com/questions/69085382
复制相似问题