如何在SimpleSAMLphp中更改NameID

3
我正在使用simpleSAMLphp开发单点登录系统。
我已正确配置服务提供商和IdP,但必须以特定格式向SP发送XML中的NameID。
我该如何执行?在元数据中吗?或者可以通过代码完成吗?
谢谢。

你能再模糊一点吗?你是说服务提供商期望使用名称为id的XML格式,但你不知道如何格式化nameid值? - Anthony
这与他们文档中提到的 NameIDFormat 有关吗?https://simplesamlphp.org/docs/stable/simplesamlphp-reference-sp-remote - Anthony
没错,Anthony。我必须以这种格式“key1:value1; key2:value2”将NameID传递给服务提供商。但我不确定应该从身份提供者的哪里进行更改。这是我第一次使用此身份验证方法。 - JokiRuiz
还有这个链接:https://simplesamlphp.org/docs/stable/saml:nameid 如果您能说明您掌控的内容,那么这将对您的问题有所帮助。在交接之前,您如何获取NameID中的值?您在哪里进行交接?为什么不能在交接之前进行格式化?NameID中的实际值对应什么?SP/SP的基本库是谁?也许这种格式有一个名称,并且当指定时库自动知道使用该格式。也许这是SP的已知特殊问题等等。 - Anthony
3个回答

3
我已经排序好了,下面是解决方案:
在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的帮助。


3
metadata/saml20-idp-hosted 中添加以下配置:
```
  /* 自定义 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 响应声明中收到:
<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>
```

0
这可能是一个老问题,但最近我遇到了这个问题,我认为我可以简单地编辑saml20-sp-remote.php并将nameid-format更改为我所需的任何内容。我需要将我的从短暂的(transient)更改为持久(persistent),因为我的SP希望如此。仅仅用"persistent"替换"transient"是行不通的,还必须更改nameidattribute值。我的情况中是'SAML_SUBJECT'而不是NameID。在我的saml20-sp-remote.php中,属性部分如下所示: 'attributes' => array ( 0 => 'SAML_SUBJECT', 1 => 'NameID', 2 => 'ClientID', 3 => 'FirstName', 4 => 'LastName', 5 => 'Email', ), 一旦我的nameidattibute值由默认的SAML_SUBJECT更改为NameID,我就能够使用持久的nameid-format。希望这能帮助到有需要的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接