如何在SimpleSAMLphp中更改NameID

时间:2014-07-14 08:21:22

标签: php saml simplesamlphp

我正在使用simpleSAMLphp开发SSO。

我正确配置了服务提供商和IdP,但我必须使用特定格式的NameID将XML发送到SP。

我该怎么做?在元数据中?或者我可以通过代码完成吗?

谢谢,

3 个答案:

答案 0 :(得分:2)

我已经排序了,我发布了以下解决方案:

在IdP authsources配置文件中:

'idp-name' => array(
...
'message' => 'key1:'.$value1.';key2:'.$value2,
...
),

在服务提供商的元数据中(saml20-sp-remote.php):

...
'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:persistent',
'simplesaml.nameidattribute' => 'message',
...

然后在您的代码中,您只需在执行身份验证之前指定$ value1和$ value2。

感谢Anthony的帮助。

答案 1 :(得分:0)

这可能是一个老问题,但是当我最近遇到这个问题时,我想我可以简单地编辑saml20-sp-remote.php并将nameid格式更改为我需要的任何内容。我需要将我的瞬间改为持续的sisnce我的SP期待。简单地用“持久性”替换“瞬态”是行不通的。 nameidattribute值也必须更改。我在那里有'SAML_SUBJECT'而不是NameID。在我的saml20-sp-remote.php中,属性部分如下所示: function index(){ $this->load->helper('login'); $id = 1; get_user_details($id); } 一旦我的nameidattibute值更改为NameID,而不是我的默认值SAML_SUBJECT,我能够使用持久的nameid格式。希望这有助于某人。

答案 2 :(得分:0)

元数据/ saml20-idp托管中,添加以下配置:

```
  /* Custom nameID */
  'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',     
  'authproc' => array(
    3 => array(
    'class' => 'saml:AttributeNameID',            
    'attribute' => 'uid',                 
    'Format' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',              
    ),
  ),
```

您将在SAML Response断言中收到

```
<saml:Subject>
<saml:NameID SPNameQualifier="http://127.0.0.1:8080/auth/realms/external"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
>student</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml:SubjectConfirmationData NotOnOrAfter="2020-10-07T12:12:25Z"
Recipient="http://127.0.0.1:8080/auth/realms/external/broker/simplesaml/endpoint"
InResponseTo="ID_8c4e1542-b034-4e42-93db-cec8de2e76e4"
/>
</saml:SubjectConfirmation>
</saml:Subject>
```