Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Detta är en guide för hur man sätter upp sk pseudonyma identifierare för Shibboleth IdP:n. Instruktionerna är baserade på en Ubuntu eller debian-baserad Linux men motsvarande bör funka även på andra unix-varianter och Windows. Instruktionerna är baserade på https://www.switch.ch/aai/docs/shibboleth/SWITCH/2.1/idp/install-idp-2.1-debian.html#shibboleth-idp och https://spaces.internet2.edu/display/SHIB2/IdPPersistentNameIdentifier.

En pseudonym identifierare är en permanent, anonym identifierare som är unik för en kombination av IdP, SP och användare. En sådan identfierare kan inte användas för att korrelera information mellan SPer och innehåller heller inte någon persondata. En pseudonym identifierare är oftast lämplig att lämna ut till alla SPer.

...

...

SWAMID rekommenderar att alla IdPer lämnar ut pseudonymer som SAML 2.0 NameID samt som attribut av typen eduPersonTargetedID till alla SPer. 
Instruktionerna nedan åstadkommer precis detta.

 

Table of Contents

Installera mysql

...

Code Block
<resolver:DataConnector id="StoredId"
            xsi:type="StoredId"
            xmlns="urn:mace:shibboleth:2.0:resolver:dc"
            generatedAttributeID="persistentId"
            sourceAttributeID="uid"
            salt="large random salt value">
       	<resolver:Dependency ref="uid" />
        <dc:BeanManagedConnection>MyGlobalDataSource</dc:BeanManagedConnection>
</resolver:DataConnector>

Ersätt "large random salt value" med ett stort (mellan 16 och 48 tecken) långt slumpmässigt lösenord. Ett sätt att generera ett sådant är programmet apg eller följande kommando:

Code Block
# openssl rand -base64 36 2>/dev/null

Detta lösenord är mycket viktigt att spara - om det går förlorat eller behöver ändras kommer alla pseudonymer att ändras vilket betyder att alla SPer kommer att uppfatta inloggningar som "nya".

Skapa följande bean i conf/global.xml

Code Block
languagexml
<!-- A Global DataSource for use in the attribute-resolver.xml for DB connectivity -->
<bean id="MyGlobalDataSource" class="org.apache.commons.dbcp2.BasicDataSource"
    p:driverClassName="com.mysql.jdbc.Driver"
    p:url="jdbc:mysql://127.0.0.1:3306/shibboleth?autoReconnect=true&amp;localSocketAddress=127.0.0.1&amp;connectTimeout=1800&amp;initialTimeout=2&amp;logSlowQueries=true&amp;autoReconnectForPools=true"
    p:username="shibboleth"
    p:password="hemligt123"
    p:maxIdle="5"
    p:maxWaitMillis="15000"
    p:testOnBorrow="true"
    p:validationQuery="select 1"
    p:validationQueryTimeout="5" />
</beans>

Ersätt "large random salt value" med ett stort (mellan 16 och 48 tecken) långt slumpmässigt lösenord. Ett sätt att generera ett sådant är programmet apg eller följande kommando:

Code Block
# openssl rand -base64 36 2>/dev/null

Detta lösenord är mycket viktigt att spara - om det går förlorat eller behöver ändras kommer alla pseudonymer att ändras vilket betyder att alla SPer kommer att uppfatta inloggningar som "nya".

Skapa slutligen en PrincipalConnector i attribute-resolver.xml enligt:

Code Block
<resolver:PrincipalConnector xsi:type="StoredId" xmlns="urn:mace:shibboleth:2.0:resolver:pc" id="saml2Persistent"
        nameIDFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
        storedIdDataConnectorRef="StoredId" />

Attribut-definitioner

...

Börja med att se till att definitionen av attributet uid finns i attribute-resolver.xml och inte är utkommenterat. Om du använder AD så kan detta vara baserat på sAMAccountName istället men attributet kan fortfarande heta uid.

Skapa nu följande två attribut-definitioner i attribute-resolver.xml. Det första är legacy-attributet eduPersonPrincipalName och det andra den nya definitionen baserat på SAML 2.0 NameID. SWAMID rekommenderar att båda görs tillgängliga till alla SPer.

Code Block
<resolver:AttributeDefinition id="eduPersonTargetedID" xsi:type="SAML2NameID"
        xmlns="urn:mace:shibboleth:2.0:resolver:ad"
        sourceAttributeID="persistentId">

   <resolver:Dependency ref="StoredId" />

   <resolver:AttributeEncoder xsi:type="SAML1XMLObject" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
             name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" />

   <resolver:AttributeEncoder xsi:type="SAML2XMLObject" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
             name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" friendlyName="eduPersonTargetedID" />
</resolver:AttributeDefinition>

<resolver:AttributeDefinition id="persistentId" xsi:type="ad:PrincipalName"
                              xmlns="urn:mace:shibboleth:2.0:resolver:ad"
                              sourceAttributeID="persistentId">

   <resolver:Dependency ref="StoredId"/>

   <resolver:AttributeEncoder xsi:type="SAML1StringNameIdentifier"
                               xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
                               nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" />

   <resolver:AttributeEncoder xsi:type="SAML2StringNameID"
                               xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
                               nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" />
</resolver:AttributeDefinition>

Attribute-release

Note

Detta kommer att göra pseudonymer tillgängliga för alla SP:er vilket är SWAMIDs rekommendation. Om du inte vill lämna ut pseudonyer till alla så måste du ändra PolicyRequirementRule nedan

SWAMID rekommenderar att dessa attribut releasas till alla SP:er. Detta gör man enklast genom följande entry i attribute-filter.xml:

...

och release

Den mest aktuella information finns på SAML IdP Best Current Practice

...

Test

Så här ska en persistent_id ser ut:

...