所以我的问题是,我如何配置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。
提前致谢
答案 0 :(得分:0)
我也遇到了这个问题,因为在IdP提供的文档中,属性 ProviderName 是必需的,尽管我不知道是否应该这样做,但我找到了一种实现此目的的方法。完成。我可以通过添加
来在samlp:AuthnRequest中设置 ProviderName$root->setAttribute('ProviderName', 'TheProviderName');
在simplesamlphp / vendor / simplesamlphp / saml2 / src / SAML2 / Message.php中,更具体地说,在功能 toUnsignedXML 中,设置ID,Version和IssueInstant的属性后。 希望这会有所帮助!