我目前在CentOS服务器上安装了simplesamlphp作为服务提供商。我将config / authsources.php定义如下:
'default-sp' => array(
'saml:SP',
'entityID' => null,
当我通过https访问/ saml / url并导航到'联盟'选项卡,即: https://my.sp/saml/module.php/core/frontpage_federation.php
我注意到返回的实体ID是' http'而不是' https' (我希望这是https)。它显示以下内容:
SAML 2.0 SP Metadata
Entity ID: http://my.sp/saml/module.php/saml/sp/metadata.php/default-sp
default-sp
[ Show metadata ]
然后,当我点击“显示元数据'链接访问网址https://my.sp/saml/module.php/saml/sp/metadata.php/default-sp?output=xhtml(注意网址是正确的https),元数据XML再次返回意外的' http'网址而不是' https' entityID和Locations的url。请注意以下XML摘录:
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="http://my.sp/saml/module.php/saml/sp/metadata.php/default-sp">
-- SNIP --
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://my.sp/saml/module.php/saml/sp/saml2-logout.php/default-sp"/>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://my.sp/saml/module.php/saml/sp/saml2-acs.php/default-sp" index="0"/>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:browser-post" Location="http://my.sp/saml/module.php/saml/sp/saml1-acs.php/default-sp" index="1"/>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="http://my.sp/saml/module.php/saml/sp/saml2-acs.php/default-sp" index="2"/>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:artifact-01" Location="http://my.sp/saml/module.php/saml/sp/saml1-acs.php/default-sp/artifact" index="3"/>
</md:SPSSODescriptor>
</md:EntityDescriptor>
与远程IdP共享元数据时,这似乎会导致问题。所以我的问题是,为什么它返回http而不是https,有没有办法解决这个问题?我选择不对entityID进行硬编码,因为我有2个单独的子域访问单个SP,因此认为允许当前使用的url来指示这一点是有意义的(这适用于其他安装)。任何帮助将不胜感激。
答案 0 :(得分:1)
https://
中的您的实体ID应为/apps/simplesamlphp/config/authsources.php
以及元数据XML再次为位置中的entityID返回意外的http
网址而不是https
网址的原因是因为您可能没有生成证书,您必须在以下位置创建自签名证书cert/
目录,如果没有创建..
我在auth_saml2
中使用moodle
插件时遇到了同样的情况。
当我通过链接在我的Centos中安装和配置simpleSAML php
时
https://simplesamlphp.org/docs/stable/simplesamlphp-sp联盟选项卡显示了返回给我的SP元数据https://
但是当我为moodle应用程序使用相同的插件时,SP元数据返回http://
而不是https://
所以我从auth_saml2
插件重新生成证书,而SP元数据返回给我https
答案 1 :(得分:1)
我能够通过确保 config.php 中的“baseurlpath”是 HTTPS 来解决这个问题。
答案 2 :(得分:0)
仅供参考-实体ID可能看起来像URL,但看起来却不是。它只是一个标识符。因此,http vs https对最终用户体验绝对没有影响。您可以拥有几乎任何所需的String的entityId。 因为您的元数据文件指定了一个动态的entityID,所以SimpleSamlPHP正在为您生成entityID。这使SSP可以基于有关请求和身份验证源ID的许多信息生成一个实体ID。我建议使用静态的entityID。如果用于生成元数据的请求通过不同的方案(http vs https)或名称(DNS名称vs IP地址vs别名)访问服务器,则元数据中的entityID将有所不同,并且您的SAML交互可能无法正常工作。