#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
не имеет значения, он используется для удобства чтения, но спецификация не зависит от него.