21
IT Center der RWTH Aachen University Shibboleth LDAP Backend uApprove, eduPersonTargetedID und „spGroupID“ im LDAP ablegen Wolff / Kurth

Shibboleth LDAP Backend

Embed Size (px)

Citation preview

Page 1: Shibboleth LDAP Backend

IT Center der RWTH Aachen University

Shibboleth

LDAP Backend uApprove, eduPersonTargetedID

und „spGroupID“ im LDAP ablegen

Wolff / Kurth

Page 2: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 2

uApprove LDAP Backend

Implementierung LDAP Backend uApprove

Deployment und Konfiguration

eduPersonTargetedID & LDAP

Implementierung eduPersonTargetedID / storedID / computedID

mit LDAP Backend

„spGroupID“

Bedarf

Fragen

Übersicht

Page 3: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 3

uApprove LDAP Backend

Page 4: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 4

uApprove LDAP Backend

Erweiterung des User Consent Modules „uApprove“

um einen LDAP Connector

neben datenbankbasierter und nicht-persistenter Datenhaltung

nun auch mittels LDAP

Hintergrund: Shibboleth Backend komplett auf LDAP umstellen

Infrastruktur redundant

vorhanden

weitere Komponente

vermeiden

Im Frühjahr hier

Interesse seitens

Teilnehmer bekundet

Page 5: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 5

Implementierung

Interface Storage.java jeweils für

Attribute Release und Terms of Use

Bisher:

JDBCStorage.java

NOPStorage.java

Neu implementiert:

LDAPStorage.java

LDAP Anbindung mittels

Java JNDI realisiert

Verbindung zum LDAP wird

aus den Properties gelesen

Page 6: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 6

Features

gleicher Funktionsumfang wie bei Datenbank-Backend

dank Abstraktion durch Interface

SSL mittels ldaps-Protokoll möglich

kein StartTLS

Angabe mehrerer LDAP-Server möglich,

aber nur failover-Szenario

Konfiguration des LDAP-Zweiges noch nicht möglich

Page 7: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 7

Lasttest

Lasttest mit 5.000 Neuanmeldungen in 2,5 Minuten

IdP (Langeweile :)

1 VM mit 1 CPU / 2 Core, 8 GB RAM

Ubuntu 12.04 LTS, openjdk-headless7, tomcat7

LDAP (Spitzenauslastung um 50%)

1 VM mit 1 CPU / 1 Core, 4 GB RAM

Ubuntu 12.04 LTS, openLDAP

Erster Betatester: Frank Schreiterer, Uni Bamberg

Keine Performance-Unterschiede

StartTLS funktioniert nicht

Anfrage nach Konfiguration mehrerer LDAP-Server

Page 8: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 8

Roadmap

Konfigurierbarkeit LDAP Baumstruktur

November 2014

Veröffentlichung des nächsten uApprove Release

mit LDAP Backend von SWITCH vorgesehen

Weiterführung, solange uApprove sinnvoll genutzt werden kann

Page 9: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 9

uApprove und IdPv3

ursprünglich geplant:

Integration von uApprove in Shibboleth IdPv3 ohne Änderungen

aktueller Stand:

Änderungen im login workflow in v3 machen Portierung von

uApprove schwierig, Entwickler arbeiten an Neuimplementierung

Neues ToU/Consent Modul noch nicht im Alpha2 verfügbar,

aber erster Code dazu in SVN Trunk

IdP consent Daten sollen über Standard Storage API geschrieben werden

LDAP wird teilweise in v3 Standard Storage API unterstützt,

gegenwärtig noch nicht sicher, ob LDAP Unterstützung ausreichend

SWITCH plant Migrationsskripte (mindestens für DB-basierte Installationen)

und wirkt auf Beibehaltung des Funktionsumfangs hin

Page 10: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 10

Deployment: Vorbereitung

LDAP

eigenen Zweig anlegen, keine

Schemaerweiterung erforderlich

ACL‘s definieren (r/w)

Deployment

uApprove lib in lib-Verzeichnis

(…/shibboleth-idp-2/lib)

legen und IdP deployen

SSL Zertifikat des LDAP

im LDAP konfigurieren

mit keytool in den Truststore der

JVM importieren

<base>

Organization:

O=AttrRelCon

Organization:

O=ToU

Account:

uid=<userID>

Account:

uid=<userID>

Device:

cn=<version>

serialNumber=<conDate>

Description=<fingerprint>

organisationalUnit:

ou=<relPartyID>

device:

serialNumber=<conDate>

description=<valHash>

LDAP Zweig für uApprove Daten

Page 11: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 11

Deployment: Konfiguration

…/Shibboleth-idp-2/conf/uApprove.xml

Bean zum Einlesen der Properties erstellen

<property name="storage"> auf die neuen Properties

und LDAPStorage Klassen umstellen

<bean id="uApprove.ldapConnection"

class="ch.SWITCH.aai.uApprove.LDAPConnectionDetails"

p:url="${ldap.url}"

p:username="${ldap.username}"

p:password="${ldap.password}"

p:base="${ldap.base}"

p:contextFactory="com.sun.jndi.ldap.LdapCtxFactory"

p:authentification="simple"

/>

Page 12: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 12

Deployment: Konfiguration

…/Shibboleth-idp-2/conf/uApprove.properties # Konfiguration der LDAP Backend Verbindung ldap.url = <URL zum LDAP> ldap.username = <LDAP-Benutzer mit dem die Aktionen ausgefuehrt werden> ldap.password = <Benutzerpasswort> ldap.base = <LDAP-Zweig, ab dem die uApprove Eintraege vorgenommen werden duerfen>

LDAPS:// für SSL-Verbindungen verwenden

mehrere URLs mit Leerzeichen getrennt (failover)

Page 13: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 13

eduPersonTargetedID

& LDAP

Page 14: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 14

eduPersonTargetedID

& LDAP

eigene lib für diverse Attribute (ShibbolethAttributeScripts.jar)

scriptbasiertes Attribut

eigener LDAP Zweig (r/w)

ID wird im LDAP nachgesehen

wenn vorhanden, ausliefern,

sonst: erzeugen

uid und EntityID vom SP

werden übergeben

aktuell ca. 280.000 IDs

<base>

Organization:

O=ssoTargetedID

Account:

uid=<userID>

organisationalUnit:

ou=users

LDAP Zweig für eduPersonTargetedIDs

Page 15: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 15

Implementierung

getID(uid, spID) personDN = getPerson(uid)

search from ldapBase, get DN, where uid=uid

return dn

createPerson(uid)

dn = constructDN(uid)

Return "uid=XX, userOU, ldapBase"

targetedID = getTargetedID(personDN, spID)

search from personDN, get eduPerson where eduID=spID;*

return getIDFromTargetedIDTupel(targetID) [split at ; and take second]

createTargetedID( personDN, spID)

targetedID= constructTargetedID( spID)

return "spID;randomGenerated64ID"

Return getIDFromTargetedIDTupel(targetedID) [split at ; and take second]

add targetedID to ldap at personDN

dn found dn not found

create new ldap entry for uid at dn

return dn

eduID found

eduID not found

return targetedID

Page 16: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 16

Einbindung im attribute resolver

…/Shibboleth-idp-2/conf/attribute-resolver.xml <resolver:AttributeDefinition

xsi:type="Script" xmlns="urn:mace:shibboleth:2.0:resolver:ad" id="eduPersonTargetedID"

nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">

<resolver:Dependency ref="myLDAP" />

<resolver:Dependency ref="uid" />

<Script><![CDATA[ importPackage(Packages.edu.internet2.middleware.shibboleth.common.attribute.provider);

importPackage(Packages.edu.internet2.middleware.shibboleth.common.profile.provider);

importPackage(Packages.de.rwth.rz.idm.sso);

# Attribute erzeugen

eduPersonTargetedID = new BasicAttribute(„eduPersonTargetedID");

persitentID = new LdapauthStoredID();

# Attribut mit Hilfe des eigenen Codes befüllen

# persistentID.getID('uid', 'entityID_des_SP')

eduPersonTargetedID.getValues().add(persitentID.getID(uid.getValues().get(0),

requestContext.getPeerEntityId()));

]]></Script>

</resolver:AttributeDefinition>

Page 17: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 17

„spGroupID“

Page 18: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 18

Bedarf

ePPN aus Datenschutzsicht problematisch

Aggregation von Daten möglich

nicht kontrollierbare Querverbindungen

Idee:

gemeinsame PersonenID für eine Gruppe von Service Providern

Warum:

IT Center betreibt mehrere Kundenplattformen,

in denen eine Person als dieselbe zu identifizieren sein soll

auch in der DFN-AAI denkbar:

Interdisziplinäre Projekte mit mehreren Plattformen o. Ä.,

in der eine Person als dieselbe erkannt werden soll

Page 19: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 19

Fragen

Geeignetes Attribut?

eduPersonTargetedID verwenden

neues / eigenes Attribut definieren

Pflege der SP Gruppen?

in der Konfiguration (ShibbolethAttributeScripts.jar)

Nutzung der „Entity Attributes“ Extension

der SP definiert, in welchen Gruppen er ist

der Verwalter der Metadaten der Föderation prüft und signiert

Page 20: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 20

Herzlichen Dank

an

Lukas Hämmerle / SWITCH

und

für Ihr Interesse

Page 21: Shibboleth LDAP Backend

Shibboleth LDAP Backend

Wolff / Kurth | IT Center der RWTH Aachen University 21

Infolinks

Offizielle uApprove Site

https://www.switch.ch/de/aai/support/tools/uApprove.html

Entity Attributes

https://www.aai.dfn.de/der-dienst/entity-attribute/

Anleitung für MySQL DB via TLS/SSL

https://www.switch.ch/aai/downloads/uApprove-manual/

4.9. MySQL connection via TLS/SSL

Mailingliste Shib / RWTH

https://mailman.rwth-aachen.de/mailman/listinfo/shib-dev