В pysaml2, как включить атрибуты в начальный authnResponse?

#python #saml

#python #saml

Вопрос:

У меня есть пример IdP / SP, работающий нормально. Я могу подключить свое приложение к примеру IdP, и рукопожатие работает нормально. Однако начальный authnResponse включает только идентификатор eduPersonTargetedID, и я хочу, чтобы он включал другие атрибуты, такие как sn, email и т.д. Я знаю, что ответ включает ссылку на службу атрибутов, но мне нужны атрибуты в authnResponse.

Любые предложения / указатели на то, как это сделать?

Спасибо, Шон

Ответ №1:

Вы передаете dict, который сопоставляет ключи ваших будущих атрибутов с их значениями:

 IDENTITY = {"surName": ["Jeter"], "givenName": ["Derek"],"title": ["shortstop"]}
server.create_authn_response(IDENTITY,...); # other arguments are omitted for this example
  

Это приводит к этому <AttributeStatement> в отправленном ответе:

 <ns1:AttributeStatement>
                <ns1:Attribute FriendlyName="givenName" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
                    <ns1:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Derek</ns1:AttributeValue>
                </ns1:Attribute>
                <ns1:Attribute FriendlyName="surName" Name="urn:oid:2.5.4.4" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
                    <ns1:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Jeter</ns1:AttributeValue>
                </ns1:Attribute>
                <ns1:Attribute FriendlyName="title" Name="urn:oid:2.5.4.12" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
                    <ns1:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">shortstop</ns1:AttributeValue>
                </ns1:Attribute>
</ns1:AttributeStatement>
  

Как вы можете видеть, FriendlyName для <Attribute> элемента задается имя ключа в IDENTITY dict. Значение <AttributeValue> элемента устанавливается равным значению соответствующей записи dict на основе ключа. У каждого <Attribute> элемента также есть атрибуты Name и NameFormat . Их значения берутся из карты конфигурации, которую вы также должны настроить.

Карты конфигурации — это файлы, загружаемые из каталога, на который указывает attribute_map_dir в файле конфигурации поставщика удостоверений:

 CONFIG = {
    "entityid": "http://saml.example.com:saml/idp.xml",
    ...
    "attribute_map_dir": "attributemaps"
}
  

В attributemaps каталоге может существовать несколько файлов. Каждый файл является исходным кодом Python с MAP dict, который имеет идентификатор SAML (имя) формата атрибута, который будет поддерживать ваш поставщик удостоверений, и to и fro вложенные карты. to Map используется поставщиком удостоверений для перевода имени (входящего) ключа в IDENTITY dict в значение (исходящего) Name атрибута в <AttributeValue> элементе.

 X500ATTR_OID = "urn:oid:2.5.4."

MAP = {
    "identifier": "urn:oasis:names:tc:SAML:2.0:attrname-format:uri",
    "fro": {
        ...
    },
    "to": {
        'surName': X500ATTR_OID '4',
        'givenName': X500ATTR_OID '42',
         ...
        'title': X500ATTR_OID '12'
    }
}
  

Вы можете скопировать карты из исходного кода pysaml2 и изменить их по мере необходимости. Ключи / значения во to вложенной карте и значение identifier будут определяться тем, что ожидает / поддерживает ваш поставщик услуг SAML. FriendlyName не имеет значения, он используется для удобства чтения, но спецификация не зависит от него.