Silverstripe-SAML模块:替换配置问题
我正在使用Silverstripe V6.1,并已安装Silverstripe-SAML的最新版本,希望替换该模块中SAMLConfiguration类的asArray() 函数,以便能够动态地替换部分配置项的值。
查看 开发者文档 时,页面底部说明可以通过在mysite/_config/saml.yml注册你自己的SilverStripe\SAML\Services\SAMLConfiguration对象来完成,并给出一个代码示例。
我已经按照这个代码示例进行了操作,但我的函数版本从未被调用。
在 saml.yml 中,我在其他所需配置之前放了以下内容:
---
Name: mysamlsettings
After: '#samlsettings'
---
SilverStripe\Core\Injector\Injector:
SAMLConfService: MySAMLConfiguration
然后我有一个 MySAMLConfiguration.php 文件,其中包含以下内容:
<?php
class MySAMLConfiguration {
public function asArray() {
$settings = [];
$settings['idp']['entityId'] = '{SOMETHING}';
$settings['idp']['singleLogoutService'] = '{SOMETHING}';
$settings['idp']['x509cert'] = '{SOMETHING}';
Utils::SendDebugLog('Settings: '.print_r($settings,true));
return $settings;
}
}
但是我的asArray版本从未被调用。
我也尝试扩展SAMLConfiguration,但那也不起作用。
解决方案
我认为这是 silverstriple/saml 代码或文档中的一个错误。对你有帮助的解决方案大致是这样的(这也是我的做法):
SilverStripe\Core\Injector\Injector:
SilverStripe\SAML\Services\SAMLConfiguration: MySAMLConfiguration
基本思路是,覆盖对 SilverStripe\SAML\Services\SAMLConfiguration 的实例化,而不是覆盖 SAMLConfService 的实例化。为了防止将来有变更/修正使其与文档版本一致,覆盖两者可能是个好主意,即:
SilverStripe\Core\Injector\Injector:
SAMLConfService: MySAMLConfiguration
SilverStripe\SAML\Services\SAMLConfiguration: MySAMLConfiguration
以防日后可能的回归(除非你添加单元测试来验证)。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。