我所有来自 simplesamlphp IdP 的注销响应都是加密的。我查看了 simplesamlphp 文档,但找不到任何关闭加密的选项。
(我有注销登录;但签名应该独立于加密,并使用重定向绑定)
是否可以通过未加密的重定向绑定发送注销响应?或者由于某种原因默认情况下总是打开?
我所有来自 simplesamlphp IdP 的注销响应都是加密的。我查看了 simplesamlphp 文档,但找不到任何关闭加密的选项。
(我有注销登录;但签名应该独立于加密,并使用重定向绑定)
是否可以通过未加密的重定向绑定发送注销响应?或者由于某种原因默认情况下总是打开?
在 IdP 远程元数据上定义的参数“assertion.encryption”
从该 IdP 收到的断言是否必须加密。默认值为假。如果此选项设置为 TRUE,则来自 IdP 的断言必须加密。未加密的断言将被拒绝。
请注意,此选项会覆盖 SP 配置中具有相同名称的选项。
参考:http ://simplesamlphp.org/docs/stable/simplesamlphp-reference-idp-remote
saml20-idp-hosted.php 中的参数“assertion.encryption”
是否应加密从此 IdP 发送的断言。默认值为假。
请注意,可以为 SP 远程元数据中的每个 SP 设置此选项。
参考:http ://simplesamlphp.org/docs/stable/simplesamlphp-reference-idp-hosted
编辑添加解释:
simpleSAMLphp 使用函数 encryptAssertion (modules/saml/lib/IdP/SAML2.php) 来决定是否加密它处理的所有断言。此函数检查 IdP/SP 元数据文件中定义的“assertion.encryption”的值(如果未定义此参数,则断言未加密
private static function encryptAssertion(SimpleSAML_Configuration $idpMetadata,
SimpleSAML_Configuration $spMetadata, SAML2_Assertion $assertion) {
$encryptAssertion = $spMetadata->getBoolean('assertion.encryption', NULL);
if ($encryptAssertion === NULL) {
$encryptAssertion = $idpMetadata->getBoolean('assertion.encryption', FALSE);
}
if (!$encryptAssertion) {
/* We are _not_ encrypting this assertion, and are therefore done. */
return $assertion;
}
问题出在别的东西上。我只是重用了处理 POST 绑定的代码来处理重定向绑定;但是使用 Redirect 绑定,payload 被压缩了,所以 POST 的代码不能直接重用。