SimpleSAMLPHP IdP如何为单个SP配置独立LDAP认证源
SimpleSAMLphp IdP 为指定SP配置独立认证源实现方案
不需要部署独立IdP,依托原生功能即可实现,按以下优先级选方案操作即可:
方案1:SP元数据直接指定认证源(推荐,零代码,适用1.17及以上版本)
这是SimpleSAMLphp原生支持的特性,SP远程元数据中配置的认证源优先级高于IdP全局默认配置,完全不影响现有8个SP的正常运行:
- 先验证你新增的带LDAP组限制的认证源本身可用:访问IdP部署路径下的
/module.php/core/authenticate.php,在认证源列表选中你在authsources.php里新增的认证条目,分别用目标组用户、非目标组用户测试,确认组拦截规则生效、登录流程正常。 - 打开IdP元数据目录下的
saml20-sp-remote.php文件,定位新SP对应的配置数组(匹配该SP的entityID)。 - 在该SP的配置数组内新增一行配置:
'auth' => '你在authsources.php中新增的受限认证源的ID', - 清空IdP根目录下
cache/文件夹内的所有缓存文件,直接从新SP发起登录测试即可,其他SP会继续沿用全局默认的LDAP认证源。
方案2:认证流程过滤器分流(兼容1.17以下老版本)
如果你的SimpleSAMLphp版本较老不支持SP级auth配置,通过高优先级认证过滤器做SP识别和认证源切换即可:
- 同样先完成受限认证源的可用性验证,步骤同方案1第一步。
- 打开IdP的
saml20-idp-hosted.php配置文件,找到authproc配置段,新增一条优先级为1(在所有认证逻辑前执行)的规则:1 => [ 'class' => 'core:PHP', 'code' => ' $requester = $state["saml:RequesterID"][0] ?? ""; // 替换为你的新SP的entityID $targetSP = "https://new-sp.yourdomain.com/saml/metadata"; // 替换为你新增的受限认证源ID $targetAuth = "ldap-restricted-group"; if ($requester === $targetSP) { $state["LoginMethod"] = $targetAuth; } ', ], - 清空
cache/目录缓存后测试即可。
注意事项
- 不要修改原有全局默认LDAP认证源的配置,你单独新增带组过滤规则的LDAP认证源的思路是正确的,不会对现有SP的认证逻辑产生侵入。
- 所有配置修改后必须清空缓存,SimpleSAMLphp默认会缓存元数据和配置,不清空很容易出现新配置不生效的问题。
- 如果需要做更细粒度的权限拦截,也可以在受限认证源对应的authproc配置里加组判断逻辑,不用改动全局认证流程。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

