我正在通过 SimpleSAML 设置单点登录(作为服务提供商)。从身份提供者的 XML 导入元数据后,第一次重定向成功。
但是,登录失败,sspmod_saml_Error: Requester/InvalidNameIDPolicy: An error occurred.
并且身份提供者 (idp) 告诉我请求应该包括
format: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
代替
format: urn:oasis:names:tc:SAML:2.0:nameid-format:transient
我在 SimpleSAML 手册中找到的唯一内容涉及 idp 配置(手动的)。然而,当我将它添加metadata/shib13-sp-remote.php
到metadata/saml20-sp-remote.php
...
$metadata['<same URL as in metadata/saml20-idp-remote.php>'] = array (
'NameIdFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
);
...然后什么都没有改变。请求仍然包含:
<samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" AllowCreate="true"/>
这并不意外,因为我正在尝试将请求配置为 idp,而不是 sp。因此,在绝望中,我也尝试过将设置NameIdPolicy
为相同的值,并且我也尝试过 ...-idp-remote.php 文件,但(正如预期的那样)这也没有奏效。我还尝试过将我的服务提供商的 ID 作为 $metadata 的键,但是......好吧。
还尝试了修改为metadata/saml20-ipd-hosted.php
如下描述这里,但这也没有任何效果。
这真的是在黑暗中摸索,SimpleSAML 文档缺少一些基本信息(例如,在哪里放置这些参数)...因此,我认为我输入了错误的文件、错误的密钥或错误的设置。欢迎任何提示。谢谢!
答案1
经过一番搜索,我发现这个行为在 SimpleSAML 中是硬编码的modules/saml/lib/Message.php
$policy = array(
'Format' => $nameIdPolicy_cf->getString('Format', \SAML2\Constants::NAMEID_TRANSIENT),
'AllowCreate' => $nameIdPolicy_cf->getBoolean('AllowCreate', true),
);
改变这一点并不能解决与 IdP 的通信问题...所以这样可能完全没问题。