Как изменить NameID в SimpleSAMLphp

Я разрабатываю SSO, используя simpleSAMLphp.

Я правильно настроил поставщика услуг и IdP, но мне нужно отправить XML в SP с NameID в определенном формате.

Как я могу это сделать? В метаданных? или я могу сделать это через код?

Спасибо,


person JokiRuiz    schedule 14.07.2014    source источник
comment
Не могли бы вы быть немного более расплывчатым? Вы говорите, что поставщик услуг ожидает XML с отформатированным идентификатором имени, но вы не знаете, как отформатировать значение nameid?   -  person Anthony    schedule 14.07.2014
comment
Это как-то связано с NameIDFormat, упомянутым в их документах? simplesamlphp.org/docs/stable/simplesamlphp-reference-sp-remote   -  person Anthony    schedule 14.07.2014
comment
Точно, Энтони, я должен передать поставщику услуг NameID в следующем формате: key1:value1; key2:value2 И я не уверен, где я должен изменить это из поставщика удостоверений. Я впервые использую этот метод аутентификации.   -  person JokiRuiz    schedule 14.07.2014
comment
Также есть это: simplesamlphp.org/docs/stable/saml:nameid. помогите вашему вопросу совсем немного, если бы вы могли дать некоторое представление о том, что вы контролируете. Как вы получаете значения в NameID перед их передачей? куда вы их сдаете? Почему нельзя форматировать до раздачи? чему соответствуют фактические значения в nameID? Кто является базовой библиотекой SP/SP? Возможно, для этого формата есть имя, и библиотека автоматически знает, что использовать этот формат, когда он указан. Может быть, это известная причуда SP, которая особенная и т. д. и т. д.   -  person Anthony    schedule 14.07.2014


Ответы (3)


Я уже разобрался, ниже выкладываю решение:

В файле конфигурации источников авторизации IdP:

'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 перед выполнением аутентификации.

Спасибо Антону за помощь.

person JokiRuiz    schedule 14.07.2014

В metadata/saml20-idp-hosted добавьте следующую конфигурацию:

```
  /* 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>
```
person yoborider    schedule 07.10.2020

Это может быть старый вопрос, но когда я недавно столкнулся с этой проблемой, я подумал, что могу просто отредактировать saml20-sp-remote.php и изменить формат nameid на то, что мне нужно. Мне нужно было изменить мой с временного на постоянный, поскольку мой SP ожидал этого. Простая замена «переходного» на «постоянный» не сработает. Значение nameidattribute также должно быть изменено. У меня было «SAML_SUBJECT» вместо NameID. В моем файле saml20-sp-remote.php раздел атрибутов выглядит следующим образом: 'attributes' => array ( 0 => 'SAML_SUBJECT', 1 => 'NameID', 2 => 'ClientID', 3 => 'FirstName', 4 => 'LastName', 5 => 'Email', ), После того, как значение атрибута nameidatribute было изменено на NameID вместо SAML_SUBJECT, который был моим значением по умолчанию, я смог использовать постоянный формат nameid. Надеюсь, это поможет кому-то.

person Pius    schedule 19.03.2017