Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: attrValueMapper fails to parse complex AttributeValue tags (#245) #427

Commits on Mar 9, 2020

  1. fix: attrValueMapper fails to parse complex AttributeValue tags (node…

    …-saml#245)
    
    This fixes an issue where the `attrValueMapper` would fail to properly
    map the value for complex `AttributeValue` tags. This handles the case
    where the `AttributeValue` contains a nested `NameID` tag.
    
    One such example is the `eduPersonTargetedID` that is used as an
    identifier in [eduGAIN][1] which can return an Attribute of the form
    
    ```xml
    <saml2:Attribute FriendlyName="eduPersonTargetedID" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
      <saml2:AttributeValue>
        <saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="https://idp.example-university.fr/idp/shibboleth" SPNameQualifier="https://www.service-provider.com/shibboleth">a6c2c4d4-08b9-4ca7-8ff9-43d83e6e1d35</saml2:NameID>
      </saml2:AttributeValue>
    </saml2:Attribute>
    ```
    
    Note that in reality, the `AttributeValue` tags can be much more complex.
    [The Assertions and Protocols for the OASIS Security Assertion Markup
    Language (SAML) V2.0][2] uses the following schema for the `Attribute`
    tag:
    
    ```xml
    <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>
    ```
    
    and the following schema for the `AttributeValue`:
    
    ```xml
    <element name="AttributeValue" type="anyType" nillable="true"/>
    ```
    
    which means it can take any type.
    
    As pointed in [3], it is customary to use `NameQualifier` and the
    `SPNameQualifier` in addition to the actual value to create a unique
    identifier for the platform. That is why the `AttributeValue` is mapped
    to an object containing the attribute of the `NameID` tag as well as
    the string value for `eduPersonTargetedID` that is stored in the `Value`
    property.
    
    [1]: https://wiki.geant.org/display/eduGAIN/Identifier+Attributes
    [2]: https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
    [3]: node-saml#245 (comment)
    dfdeagle47 committed Mar 9, 2020
    Configuration menu
    Copy the full SHA
    c1801a4 View commit details
    Browse the repository at this point in the history