Escidoc Coreservice mit LDAP

Admin

Hier wird vorrausgesetzt, dass ein LDAP-Server schon auf dem System installiert wurde.

=Konfiguration LDAP=

Schemataauswahl
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/collective.schema include /etc/openldap/schema/corba.schema include /etc/openldap/schema/duaconf.schema include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/java.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/openldap.schema include /etc/openldap/schema/pmi.schema include /etc/openldap/schema/ppolicy.schema

Konfiguration slap.conf
pidfile        /var/run/slapd/slapd.pid argsfile       /var/run/slapd/slapd.args

access to dn.base="" by * read

access to dn.base="cn=Subschema" by * read

access to attrs=userPassword,userPKCS12 by self write by * auth

access to attrs=shadowLastChange by self write by * read

access to * by * read

database       bdb suffix         "dc=mpdl,dc=mpg,dc=de" checkpoint     1024    5 cachesize      10000 rootdn         "cn=administrator,dc=mpdl,dc=mpg,dc=de" rootpw         {SSHA}Password directory      /var/lib/ldap
 * 1) Cleartext passwords, especially for the rootdn, should
 * 2) be avoid.  See slappasswd(8) and slapd.conf(5) for details.
 * 3) Use of strong authentication encouraged.
 * 4) Mit slappasswd das rootpw erstellen
 * 1) The database directory MUST exist prior to running slapd AND
 * 2) should only be accessible by the slapd and slap tools.
 * 3) Mode 700 recommended.
 * 1) Indices to maintain
 * 2) index objectClass     eq

index objectClass,uidNumber,gidNumber eq index member,mail eq,pres index cn,displayname,uid,sn,givenname sub,eq,pres

Konfiguration der ldap.conf
vi /etc/openldap/ldap.conf oder vi /etc/ldap.conf

BASE   dc=mpdl,dc=mpg,dc=de URI    ldap://localhost host 127.0.0.1 TLS_REQCERT allow
 * 1) SIZELIMIT     12
 * 2) TIMELIMIT     15
 * 3) DEREF         never

=Erstellung der LDAP-Baumstruktur=

Um die vollständige Struktur abzubilden benötigt es eine detailierte Planung.

Beispielstruktur für einen Escidoc-Coreservice
Hier ist ein Beispiel was einen allgemeinen Überblick geben soll.

=Konfiguration Escidoc Coreservice=

Bearbeitung der escidoc-login.xml
Die Datei escidoc-login.xml muss für die LDAP-Authentifizierung im Ordner conf wie folgt editiert werden.

Kommentiere folgende Zeilen aus, um das Form-Based-Login zu deaktivieren in Escidoc Coreservice

Um die LDAP Authentifizierung einzuschalten werden folgende Zeilen einkommentiert. Hierbei muss der LDAP-Server, das UserSearch-Bean und das ldapAuthProvider angepasst werden.

    

 

 

   

   <constructor-arg ref="contextSource"/> <property name="userSearch" ref="userSearch" /> </constructor-arg> <constructor-arg> <bean class="org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator"> <constructor-arg ref="contextSource"/> <constructor-arg value="ou=group"/> <property name="groupRoleAttribute" value="cn"/> <property name="groupSearchFilter" value="(memberUid={1})"/> <property name="rolePrefix" value=""/> <property name="convertToUpperCase" value="false"/> </constructor-arg> <property name="userDetailsContextMapper"> <bean class="de.escidoc.core.aa.ldap.EscidocLdapContextMapper"/> <security:custom-authentication-provider />

=Usergruppen Anlegen mit Userrollen=

Anlegen der Usergruppe
Gruppe anlegen:

PUT-Request auf /aa/user-group Body:

<?xml version="1.0" encoding="UTF-8"?> <user-group:user-group xmlns:user-group="http://www.escidoc.de/schemas/usergroup/0.6" xmlns:prop="http://escidoc.de/core/01/properties/" xmlns:srel="http://escidoc.de/core/01/structural-relations/" xmlns:xlink="http://www.w3.org/1999/xlink"> <user-group:properties> <prop:email>bla@bla.de</prop:email> <prop:name>Sysadmins Group</prop:name> <prop:label>label</prop:label> <prop:description>Group with all users that belong to LDAP-Group mpdl</prop:description> <prop:type>type</prop:type> <prop:active>true</prop:active> </user-group:properties> </user-group:user-group>

Selector für Usergruppe anlegen
Selector für Gruppe anlegen (Selector gibt an welche Mitglieder die Gruppe hat):

POST-Request auf /aa/user-group/${USER-GROUP-ID}/selectors/add

Body:

<param last-modification-date="<last-modification-date der gruppe>"> <selector name="groupRole" type="user-attribute">mpdl

Admin-Usergruppe
Systemadministrator Grant für Gruppe anlagen:

PUT-Request auf /aa/user-group/${USER-GROUP-ID}/resources/grants/grant

Body: <?xml version="1.0" encoding="UTF-8"?> <prefix-grants:grant xmlns:prefix-grants="http://www.escidoc.de/schemas/grants/0.5" xmlns:prefix-prop="http://escidoc.de/core/01/properties/" xmlns:prefix-srel="http://escidoc.de/core/01/structural-relations/" xmlns:prefix-xlink="http://www.w3.org/1999/xlink"> <prefix-grants:properties> <prefix-prop:grant-remark>sysadmin-grant for group escidoc:309916</prefix-prop:grant-remark> <prefix-srel:role prefix-xlink:href="/aa/role/escidoc:role-system-administrator" /> </prefix-grants:properties> </prefix-grants:grant>

Depositor-Usergruppe für Context
Depositor Grant für Gruppe anlagen:

PUT-Request auf /aa/user-group/${USER-GROUP-ID}/resources/grants/grant

Body: <?xml version="1.0" encoding="UTF-8"?> <prefix-grants:grant xmlns:prefix-grants="http://www.escidoc.de/schemas/grants/0.5" xmlns:prefix-prop="http://escidoc.de/core/01/properties/" xmlns:prefix-srel="http://escidoc.de/core/01/structural-relations/" xmlns:prefix-xlink="http://www.w3.org/1999/xlink"> <prefix-grants:properties> <prefix-prop:grant-remark>Pubmandepositor for group {USER-GROUP-ID}</prefix-prop:grant-remark> <prefix-srel:role prefix-xlink:href="/aa/role/escidoc:role-depositor" /> <prefix-srel:assigned-on prefix-xlink:href="/ir/context/{Context-ID}" /> </prefix-grants:properties> </prefix-grants:grant>

Zuteilung mehrerer Grants einer Gruppe
Natürlich kann man auch einer Gruppe mehrere Grants vergeben, die anhand des folgenden Beispiels verdeutlicht werden sollen.

<?xml version="1.0" encoding="UTF-8"?> <prefix-grants:grants xmlns:prefix-grants="http://www.escidoc.de/schemas/grants/0.5" xmlns:prefix-prop="http://escidoc.de/core/01/properties/" xmlns:prefix-srel="http://escidoc.de/core/01/structural-relations/" xmlns:prefix-xlink="http://www.w3.org/1999/xlink"> <prefix-grants:grant> <prefix-grants:properties> <prefix-prop:grant-remark>Pubmandepositor for group {USER-GROUP-ID}</prefix-prop:grant-remark> <prefix-srel:role prefix-xlink:href="/aa/role/escidoc:role-depositor" /> <prefix-srel:assigned-on prefix-xlink:href="/ir/context/{Context-ID}" /> </prefix-grants:properties> </prefix-grants:grant> <prefix-grants:grant> <prefix-grants:properties> <prefix-prop:grant-remark>Pubmanadmin for group {USER-GROUP-ID}</prefix-prop:grant-remark> <prefix-srel:role prefix-xlink:href="/aa/role/escidoc:role-system-administrator" /> <prefix-srel:assigned-on prefix-xlink:href="/ir/context/{Context-ID}" /> </prefix-grants:properties> </prefix-grants:grant> </prefix-grants:grants>

=Interessante Tabellen=

\c SELECT * From aa.escidoc_role; SELECT * From aa.user_group; SELECT * From aa.role_grant; SELECT * From aa.user_login_data; SELECT * FROM aa.user_group WHERE aa.user_group.id='escidoc:310029'; oder SELECT id, last_modification_date FROM aa.user_group WHERE aa.user_group.id='escidoc:310029';