Shibboleth возвращает имя пользователя как HTTP-заголовок вместо атрибута SAML

Shibboleth IDP и SP отлично общаются, и данные, которые мне нужны, есть в SAML.

Какая конфигурация требуется, чтобы shibboleth мог возвращать HTTP-заголовок с нужной мне информацией (да, я знаю, что это плохая идея, но у меня нет выбора).

Я использую SP 2.6 на IIS, и мне нужен заголовок HTTP с именем пользователя в ответе IDP shibboleth3.

Вот что я пробовал для attribute-map.xml

<Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" id="netId" nameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>

И он предоставляет мне эти данные в SAML

 <saml2:AttributeStatement>
        <saml2:Attribute FriendlyName="eduPersonPrincipalName"
                         Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
                         NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
            <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                  xsi:type="xsd:string">[email protected]</saml2:AttributeValue>
        </saml2:Attribute>
    </saml2:AttributeStatement>

Из-за программного обеспечения, с которым я работаю, мне нужно имя пользователя в заголовке HTTP.


person Eric Nord    schedule 29.09.2016    source источник
comment
Каким-то образом вам нужно проанализировать утверждение, получить требуемый атрибут и отправить в свое программное обеспечение в заголовке http.   -  person Zeigeist    schedule 30.09.2016
comment
Да, я пытаюсь избегать написания промежуточного программного обеспечения, но я уже на этом этапе.   -  person Eric Nord    schedule 30.09.2016


Ответы (1)


Вы не можете сделать так, чтобы поставщик удостоверений выпустил заголовок HTTP. Это не профиль системы единого входа в веб-браузере SAML.

У вас уже есть промежуточное программное обеспечение, о котором вы говорите, это поставщик услуг Shibboleth, и если ваш файл attribute-map.xml верен, вы сможете получить доступ к атрибутам из логики вашего приложения либо как переменные env, либо как заголовки http, как описано здесь

Ниже приведен пример того, как атрибут отображается в заголовок HTTP:

Скажем ты

  • освободить атрибут с именем SAML urn:oid:1.3.6.1.4.1.5923.1.1.1.6 от IdP и

  • в вашем SP attribute-map.xml у вас есть декодер атрибутов, например:

<Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" id="netId" nameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"/>

Принимая во внимание, что

При использовании заголовков основное отличие состоит в том, что вместо использования имен, определенных в процессе сопоставления, приложение должно добавлять к ним префикс «HTTP_», а в большинстве инструментов также используется для остальной части имени.

Заголовок HTTP в конечном итоге будет HTTP_NETID

Что касается того, как вы можете прочитать значения заголовков, как описано в этой теме ,

Чтобы перебрать все, что передано:

foreach (string key in Request.ServerVariables.AllKeys)

Чтобы указать конкретное значение:

value = Request.ServerVariables[key];

person Yiannis Kakavas    schedule 17.10.2016
comment
Не могли бы вы поделиться конкретным примером attribute-map.xml, который сопоставляет переменную с заголовком http? - person Eric Nord; 19.10.2016