在 pysaml2 中,如何在初始 AuthNResponse 中包含属性?
In pysaml2, how does one include attributes in the initial AuthNResponse?
我的示例 IdP/SP 工作正常。我可以将我的应用程序连接到示例 IdP,并且握手工作正常。但是,最初的 AuthNResponse 仅包含 eduPersonTargetedID,我希望它包含其他属性,如 sn、电子邮件等。我知道响应包含对属性服务的 link,但我需要 AuthNResponse 中的属性。
任何suggestions/pointers关于如何做到这一点?
谢谢,
肖恩
您传递了一个将 to-be 属性的键映射到它们的值的字典:
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>
如您所见,<Attribute>
元素的 FriendlyName
设置为 IDENTITY
字典中的键名。 <AttributeValue>
元素的值根据key设置为对应dict条目的值。每个 <Attribute>
元素还具有 Name
和 NameFormat
属性。这些值来自 configuration map 你也必须设置。
配置映射是从身份提供商配置文件中 attribute_map_dir
指向的目录加载的文件:
CONFIG = {
"entityid": "http://saml.example.com:saml/idp.xml",
...
"attribute_map_dir": "attributemaps"
}
在attributemaps
目录中,可以存在多个文件。每个文件都是 Python 源,带有一个 MAP 字典,该字典具有您的身份提供者将支持的属性格式的 SAML 标识符(名称)以及 to
和 fro
嵌套地图。身份提供者使用 to
映射将 IDENTITY
字典中的(传入)键的名称转换为 [=18= 中的(传出)Name
属性的值]元素。
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 source 复制地图并根据需要进行修改。 to
嵌套映射中的 keys/values 和 identifier
的值将由您的 SAML 服务提供商 expects/supports 决定。 FriendlyName
没关系,它用于可读性但规范不依赖它。
我的示例 IdP/SP 工作正常。我可以将我的应用程序连接到示例 IdP,并且握手工作正常。但是,最初的 AuthNResponse 仅包含 eduPersonTargetedID,我希望它包含其他属性,如 sn、电子邮件等。我知道响应包含对属性服务的 link,但我需要 AuthNResponse 中的属性。
任何suggestions/pointers关于如何做到这一点?
谢谢, 肖恩
您传递了一个将 to-be 属性的键映射到它们的值的字典:
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>
如您所见,<Attribute>
元素的 FriendlyName
设置为 IDENTITY
字典中的键名。 <AttributeValue>
元素的值根据key设置为对应dict条目的值。每个 <Attribute>
元素还具有 Name
和 NameFormat
属性。这些值来自 configuration map 你也必须设置。
配置映射是从身份提供商配置文件中 attribute_map_dir
指向的目录加载的文件:
CONFIG = {
"entityid": "http://saml.example.com:saml/idp.xml",
...
"attribute_map_dir": "attributemaps"
}
在attributemaps
目录中,可以存在多个文件。每个文件都是 Python 源,带有一个 MAP 字典,该字典具有您的身份提供者将支持的属性格式的 SAML 标识符(名称)以及 to
和 fro
嵌套地图。身份提供者使用 to
映射将 IDENTITY
字典中的(传入)键的名称转换为 [=18= 中的(传出)Name
属性的值]元素。
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 source 复制地图并根据需要进行修改。 to
嵌套映射中的 keys/values 和 identifier
的值将由您的 SAML 服务提供商 expects/supports 决定。 FriendlyName
没关系,它用于可读性但规范不依赖它。