在 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> 元素还具有 NameNameFormat 属性。这些值来自 configuration map 你也必须设置。

配置映射是从身份提供商配置文件中 attribute_map_dir 指向的目录加载的文件:

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

attributemaps目录中,可以存在多个文件。每个文件都是 Python 源,带有一个 MAP 字典,该字典具有您的身份提供者将支持的属性格式的 SAML 标识符(名称)以及 tofro 嵌套地图。身份提供者使用 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 没关系,它用于可读性但规范不依赖它。