使用SimpleSamlPhp将ProviderName属性添加到Authnrequest

时间:2018-03-12 14:54:06

标签: php metadata saml-2.0 simplesamlphp

所以我的问题是,我如何配置authsources.php以允许将ProviderName添加到请求中,因为我连接的IDP具有此要求,尽管有Issuer。 authsources.php中的SP配置

'name-of-sp' => array(
    'saml:SP',
    'privatekey'  => '/certs/privkey.pem',
    'certificate' => '/certs/cert.pem',
    'entityID' => 'my-entityid',
    'idp' => 'idp-used',
    'ProviderName' => 'I WANT TO SET THIS',

),

以上不起作用。那么如何配置它以将ProviderName添加到SP?如果这是标准SAML协议,那么这是另一个问题,但这个IDP不受我的控制。

IDP远程元数据以防万一有人想知道:

$metadata['idp-used'] = array(
    'name' => array(
        'en' => 'idp-used'
    ),
    'description'          => 'Here you can login with your account on idp-used',

    'SingleSignOnService'  =>   array (
        0 =>
        array (
          'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
          'Location' => 'https://idp-used-location/saml',
        ),),
    'SingleLogoutService'  => 'https://idp-used-location/saml/logout',
    'redirect.sign' => TRUE,
    'NameIDPolicy' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',
);

除此之外,simplesamlPhp使用当前设置以下列方式生成请求。

<samlp:AuthnRequest
    AssertionConsumerServiceURL="http://localhost:8080/simplesaml/module.php/saml/sp/saml2-acs.php/name-of-idp"
    Destination="IDP DESTINATION URL"
    ID="_0946191c7de9389b04bd2c389af9a24c5fe5bb575f" IssueInstant="2018-03-12T12:48:47Z"
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer>The Issuer</saml:Issuer>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
            <ds:Reference URI="#_0946191c7de9389b04bd2c389af9a24c5fe5bb575f">
                <ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                <ds:DigestValue>The Digest Value</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>The Signature</ds:SignatureValue>
        <ds:KeyInfo>
            <ds:X509Data>
                <ds:X509Certificate>The Certificate</ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
    </ds:Signature><samlp:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/></samlp:AuthnRequest>

关于请求它应该具有以下结构,所以我还需要

<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">Issuer but with and xmlns:saml attribute</saml:Issuer>

要求的头部要求如下:

<samlp:AuthnRequest
ID="_1e736a31-a41c-4c35-b17f-0f9ab4c741b3"
Version="2.0"
IssueInstant="2011-02-17T11:15:24Z"
Destination="DestinationURLOFIDP"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
AssertionConsumerServiceURL="ACS-URL"
ProviderName="Service Provider Name"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">ISSUER</saml:Issuer>

有没有办法使用saml authsources.php或idp-remote.php添加ProviderName,并将属性断言从authnrequest设置为发布者?

此IDP不会在任何地方公开metadata.xml,无法获取完整的metadata.xml。

提前致谢

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题,因为在IdP提供的文档中,属性 ProviderName 是必需的,尽管我不知道是否应该这样做,但我找到了一种实现此目的的方法。完成。我可以通过添加

来在samlp:AuthnRequest中设置 ProviderName
$root->setAttribute('ProviderName', 'TheProviderName');

在simplesamlphp / vendor / simplesamlphp / saml2 / src / SAML2 / Message.php中,更具体地说,在功能 toUnsignedXML 中,设置ID,Version和IssueInstant的属性后。 希望这会有所帮助!