Versions Compared

Key

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

...

Info

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

# apt-get install mysql-server

.. under installationen sätts ett root-lösenord ..

...

Skapa en databas...

Code Block

# mysql -p
... använd lösenordet från installationen
mysql> SET NAMES 'utf8';
SET CHARACTER SET utf8;
CHARSET utf8;
CREATE DATABASE IF NOT EXISTS shibboleth CHARACTER SET=utf8;
USE shibboleth;
Query OK, 0 rows affected (0.00 sec)

Skapa en tabell (för versioner från och med Shibboleth 3.2.0)...

Code Block
mysql> CREATE TABLE IF NOT EXISTS shibpid (
  localEntity VARCHAR(255) NOT NULL,
  peerEntity VARCHAR(255) NOT NULL,
  principalName VARCHAR(255) NOT NULL default '',
  localId VARCHAR(255) NOT NULL,
  persistentId VARCHAR(50) NOT NULL,
  peerProvidedId VARCHAR(255) default NULL,
  creationDate timestamp NOT NULL default CURRENT_TIMESTAMP
  on update CURRENT_TIMESTAMP,
  deactivationDate timestamp NULL default NULL,
  KEY persistentId (persistentId),
  KEY persistentId_2 (persistentId, deactivationDate),
  KEY localEntity (localEntity, peerEntity,localId),
  KEY localEntity_2 (localEntity, peerEntity, localId, deactivationDate)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)

Skapa en tabell (för versioner upp till Shibboleth 3.1.2)...

Code Block
mysql> CREATE TABLE IF NOT EXISTS shibpid (
  localEntity TEXT NOT NULL,
  peerEntity TEXT NOT NULL,
  principalName VARCHAR(255) NOT NULL default '',
  localId VARCHAR(255) NOT NULL,
  persistentId VARCHAR(36) NOT NULL,
  peerProvidedId VARCHAR(255) default NULL,
  creationDate timestamp NOT NULL default CURRENT_TIMESTAMP
  on update CURRENT_TIMESTAMP,
  deactivationDate timestamp NULL default NULL,
  KEY persistentId (persistentId),
  KEY persistentId_2 (persistentId, deactivationDate),
  KEY localEntity (localEntity(16), peerEntity(16),localId),
  KEY localEntity_2 (localEntity(16), peerEntity(16),
  localId, deactivationDate)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)

skapa slutligen en user och ge rättigheter på tabellen. Denna user bör ha ett annat lösenord än hemligt123.

Code Block

mysql> create user shibboleth identified by 'hemligt123';
Query OK, 0 rows affected (0.00 sec)
mysql> grant ALL on shibboleth.shibpid to 'shibboleth'@'localhost';
Query OK, 0 rows affected (0.00 sec)

...

Hämta en JDBC-connector för mysql från http://dev.mysql.com/downloads/connector/j/ (tex mysql-connector-java-5.1.13.tar.gz). Packa upp i lämplig katalog och kopiera jar-filen (tex mysql-connector-java-5.1.13-bin.jar) till lib-katalogen för binär-paketet till shibboleth. Detta är katalogen med en install.sh och install.bat. Kör sedan install.sh} (eller {{instal.bat om du använder Windows) för att skapa en ny version av idp.war med mysql-connectorn instoppad. Starta sedan om din servlet-motor.

Code Block

# cp mysql-connector-java-5.1.13-bin.jar /opt/jboss/server/default/lib

...

Skapa följande DataConnector i attribute-resolver.xml:

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" />
   <ApplicationManagedConnection
            jdbcDriver="com.mysql.jdbc.Driver"
            jdbcURL="jdbc:mysql://localhost:3306/shibboleth?autoReconnect=true"
            jdbcUserName="shibboleth"
            jdbcPassword="hemligt123" />
</resolver:DataConnector>

...

Här ska myLDAP ersättas med @id-attributet från den DataConnector som används för att hämta user-information. 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

...

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" />

...

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>

...

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

Code Block

<AttributeFilterPolicy id="releasePermanentIdToAnyone">
   <PolicyRequirementRule xsi:type="basic:ANY" />
   <AttributeRule attributeID="persistentId">
      <PermitValueRule xsi:type="basic:ANY" />
   </AttributeRule>
   <AttributeRule attributeID="eduPersonTargetedID">
      <PermitValueRule xsi:type="basic:ANY" />
   </AttributeRule>
</AttributeFilterPolicy

...