Shibboleth 3 – SAML响应属性

我已经configurationShibboleth 3给SAML响应包含以下属性语句

<saml2:AttributeStatement> <saml2:Attribute FriendlyName="uid" Name="urn:oid:0.9.2342.19200300.100.1.1" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"> <saml2:AttributeValue>[email protected]</saml2:AttributeValue> </saml2:Attribute> <saml2:Attribute FriendlyName="memberOf" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"> <saml2:AttributeValue>cccc\cccc-cccc-cccc</saml2:AttributeValue> </saml2:Attribute> </saml2:AttributeStatement> 

我喜欢如果可以configurationattribute-resolver.xml,以便SAML响应中包含以下xml Attribute语句。

  <saml2:AttributeStatement> <saml2:Attribute FriendlyName="uid"> <saml2:AttributeValue>[email protected]</saml2:AttributeValue> </saml2:Attribute> <saml2:Attribute FriendlyName="memberOf"> <saml2:AttributeValue>cccc\cccc-cccc-cccc</saml2:AttributeValue> </saml2:Attribute> </saml2:AttributeStatement> 

我的attribute-resolver.xml的内容

 <resolver:AttributeDefinition id="memberOf" xsi:type="ad:Simple" sourceAttributeID="memberOf"> <resolver:Dependency ref="StaticGroups" /> <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:memberOf" encodeType="false" /> <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.42" friendlyName="memberOf" encodeType="false" nameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" /> </resolver:AttributeDefinition> <!-- ========================================== --> <!-- Data Connectors --> <!-- ========================================== --> <resolver:DataConnector id="StaticGroups" xsi:type="dc:Static" xmlns="urn:mace:shibboleth:2.0:resolver:dc"> <Attribute id="memberOf"> <Value>cccc\cccc-cccc-cccc</Value> </Attribute> </resolver:DataConnector> 

SAML 2.0断言模式告诉“名称”属性是必需的。 所以你不能做你想做的事情。

 <element name="Attribute" type="saml:AttributeType"/> <complexType name="AttributeType"> <sequence> <element ref="saml:AttributeValue" minOccurs="0" maxOccurs="unbounded"/> </sequence> <attribute name="Name" type="string" use="required"/> <attribute name="NameFormat" type="anyURI" use="optional"/> <attribute name="FriendlyName" type="string" use="optional"/> <anyAttribute namespace="##other" processContents="lax"/> </complexType> 

首先,你为什么要这样做?

https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf

我会说这是不可能的。 我曾经认为Name属性是attribute标签的关键字。

但:

  1. 你有没有检查XML模式如果(因为我认为)名称是一个必需的属性?
  2. 无论如何, attribute-resolver是关于获取属性。 我不认为这是正确的地方来search你正在寻找的function;
  3. 你可以降级到SAML1吗? 只是模糊地记住属性的命名规则比较弱:也许你可以实现一些接近你的目标。