【问题标题】:"Could not find the metadata of an IdP" with drupal and simplesamlphp_auth使用 drupal 和 simplesamlphp_auth “找不到 IdP 的元数据”
【发布时间】:2016-12-24 18:01:19
【问题描述】:

我使用 Drupal 设置了我的 SimpleSamlPhp(我的 IdP 在另一台服务器中)。以管理员身份登录“http://localhost:31478/simplesaml/”后,我使用 IdP 运行“测试身份验证源”,显示具有正确属性的“SAML 2.0 SP 演示示例”屏幕屏幕。我想这意味着 SimpleSamlPhp 和我的 Idp 可以互相看到并正常通信。

但是,当我在打开“通过 SimpleSAMLphp 激活身份验证”后尝试通过 Drupal 使用联合登录时,出现以下错误:

SimpleSAML_Error_Exception: Could not find the metadata of an IdP with entity ID 'tenant2.test.com' in sspmod_saml_Auth_Source_SP->getIdPMetadata() (line 134 of /var/www/vendor/simplesamlphp/simplesamlphp/modules/saml/lib/Auth/Source/SP.php).

设置

  • Drupal 版本为 8。
  • php版本为5.6.24-0。
  • simplesamlphp_auth 模块版本为 8.x-3.0-alpha4+2-dev。
  • simplesamlphp_auth 模块已在 Drupal 中安装并启用。对于 simplesamlphp_auth 模块配置,“此 SP 的身份验证源”设置为“default-sp”

我在 /var 中有我的 simplesamlphp 目录。为启用 saml 进行了以下更改

/var/simplesamlphp/config/config.php


    'baseurlpath' => 'simplesaml/',
    ....
    'enable.saml20-sp'  => true,
    'enable.saml20-idp' => true,
    'enable.shib13-idp' => false,
    'enable.adfs-idp' => false,
    'enable.wsfed-sp' => false,
    'enable.authmemcookie' => false,
    ....
    'saml' => TRUE,
    ....
    ....
    'default-saml20-idp' => 'tenant2.test.com',
    ....
    'store.type'                    => 'memcache',
    ....
    ....
    'memcache_store.servers' => array(
        array(
            array('hostname' => 'localhost'),
        ),
    ),
    'memcache_store.prefix' => 'SimpleSAMLphp',
    ....
    .... 
    'trusted.url.domains' => array('localhost:31478'),

/var/simplesamlphp/config/authsources.php


    <?php
    $config = array(
        'admin' => array(
        'core:AdminPassword',
        ),

        'default-sp' => array(
            'saml:SP',
        'privatekey' => 'saml.pem',
        'certificate' => 'saml.crt',       
        'entityID' => null,
        'idp' => 'tenant2.test.com',  
        'discoURL' => null,
    ),

    );
    

/var/simplesamlphp/metadata/saml20-idp-remote.php


    <?php
        $metadata['tenant2.test.com'] = array(
            'SingleSignOnService'  => 'https://tenant2.test.com/testSamlLogin',
            'AssertionConsumerService' => 'http://localhost:31478/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
            'SingleLogoutService'  => 'https://tenant2.test.com/admin/logout',
            'certFingerprint'      => '0a89aec59bf48e414ec050f6956891cb3f5b09a0',
        );

我这几天一直在尝试解决这个问题。我错过了什么吗?

谢谢。

【问题讨论】:

  • 你找到答案了吗?我也面临同样的问题

标签: authentication drupal saml simplesamlphp


【解决方案1】:

此问题已修复,在 settings.php 中添加 simplesamlphp_dir

$settings['simplesamlphp_dir'] = '/var/www/mysite/docroot/simplesaml';

【讨论】:

    【解决方案2】:

    发现如果元数据包含“过期”键并且元数据已过期,也会发生这种情况。尝试在您的 saml20-idp-remote.php 元数据中将其注释掉,并查看您是否收到其他错误,因为跳过了错误处理。

    【讨论】:

      【解决方案3】:

      此消息表示,身份提供者 (IdP) 的实体 ID 不正确和/或未在元数据中找到。

      1. config/authsources.php 中不正确
      2. 在 metadata/saml20-idp-remote.php 中找不到

      authsources 中列出的“entityID”指的是服务提供商 (SP)。在你的例子中是'default-sp'。更改此“entityID”不会解决您的问题,因为会更改服务提供者的实体 ID。

      身份提供者 (IdP) 的实体 ID 在“idp”字段中指定。您的 'idp 设置为 'tenant2.test.com'。此值可能缺少一些信息。身份提供者的实体 ID 通常要长得多。以下是您可能在 SimpleSAMLphp 身份提供者 (IdP) 的联合首页上看到的示例。

      SAML 2.0 IdP Metadata
      Entity ID: https://samlidp.example.com/simplesaml/saml2/idp/metadata.php
      

      我会查看身份提供者的元数据并更新 authsources 文件的“idp”字段以获取完整的实体 ID。

      身份提供者 (IdP) 的实体 ID 通常也包含在 metadata/saml20-idp-remote.php 中。我在你的例子中看不到它。所以我会在这个例子中更新 authsources 和元数据。

      【讨论】:

        【解决方案4】:

        您是否尝试用tenant2.test.com 代替“entityID”的null?

        【讨论】:

          猜你喜欢
          • 2019-09-22
          • 2017-03-18
          • 2021-02-24
          • 2018-10-13
          • 2016-03-20
          • 2016-09-01
          • 2021-10-16
          • 1970-01-01
          • 2021-07-05
          相关资源
          最近更新 更多