Authentifizierungs- und Autorisierungsserver AAS Authentifizierung ....................................................................................................................... 2 Architektur ............................................................................................................................. 2 Das LDAP-Schema ................................................................................................................ 3 Benutzerverwaltung ............................................................................................................... 4 Rechte ..................................................................................................................................... 4 Autorisierung .............................................................................................................................. 5 Architektur ............................................................................................................................. 5 Policies ................................................................................................................................... 6 AAS-Client API ..................................................................................................................... 7 de.fhg.iais.cortex.security Enum AccessMethod .................................................................. 7 READ ................................................................................................................................. 8 WRITE ............................................................................................................................... 8 values .................................................................................................................................. 8 valueOf ............................................................................................................................... 8 de.fhg.iais.cortex.security Enum Permission ........................................................................ 9 DENY ............................................................................................................................... 10 INDETERMINATE ......................................................................................................... 10 NOT_APPLICABLE ....................................................................................................... 10 PERMIT ........................................................................................................................... 10 values ................................................................................................................................ 10 valueOf ............................................................................................................................. 10 de.fhg.iais.cortex.security Enum Protection ........................................................................ 11 PUBLIC ............................................................................................................................ 12 PROTECTED ................................................................................................................... 12 values ................................................................................................................................ 12 valueOf ............................................................................................................................. 12 de.fhg.iais.cortex.aas Class AAClient ................................................................................. 13 AAClient .......................................................................................................................... 14 login .................................................................................................................................. 14 logout ................................................................................................................................ 14 getPermission ................................................................................................................... 15 Authentifizierung Architektur Login page Https: uid, pwd Https: private key DDB-Core AAS Uid:n, signature, parms LDAP Server result Der Zugriff von der DDB-Oberfläche auf bestimmte Resourcen erfordert eine Authentifizierung. Sie wird ausgelöst durch den Login-Button der Oberfläche. Ein Eingabefenster für userid und password wird geöffnet. Der Fensterinhalt ist JS-generiert. Derzeit wird dann wie folgt verfahren: Userid und password werden via HTTPS an den AAS gesendet. Der Login Service prüft die Daten auf Konsistenz. Dann wird für die zukünftige Signierung im AAS ein Schlüsselpaar generiert. Der private Schlüssel ist für die Dauer der Sitzung gültig und wird als Antwort wieder per HTTPS zurückgeschickt. Diese Lösung ist nicht ideal wegen des nicht notwendigen Transports des privaten Schlüssels. Als Alternative bietet sich an: Das Schlüsselpaar wird von JS generiert und der öffentliche Schlüssel dem AAS zusammen mit userid und password via HTTPS zugesandt zugeschickt. Der AAS meldet als Ergebnis den Erfolg des Login. Das entscheidende Problem, der fehlende starke Zufallszahlengenerator in JS, kann so gelöst werden daß zufällige Mausbewegungen zur Generierung von Zufallszahlen benutzt werden können. Die Authentifizierung samt der Verwaltung der Benutzerdaten wird nicht vom AAS, sondern von einem LDAP-Server durchgeführt. Derzeit ist ein ein lokal laufender OpenDS im Einsatz, dies kann jedoch leicht auf andere Implementierungen eines LDAP-Servers geändert werden. 2 Das LDAP-Schema c=de o=ddb ou=users ou=kwes cn=thorsten cn=dnb ou=services c=de Dies ist in Anlehnung an Internetgepflogenheiten die Wurzel der Hierarchie. o=ddb, c=de Dies ist der Zweig für alles innerhalb der Organisation der DDB. ou=users, o=ddb, c=de In diesem Zweig werden alle angemeldeten Benutzer beschrieben. cn=user-xyz, ou=users, o=ddb, c=de Dies ist der Eintrag für die userid user-xyz. Die derzeit spezifizierten Attribute für user sind: Password (noch im Klartext, das muß geändert werden) Liste der Rechte pro KWE Darf ingesten Liste der erlaubten services mehr ou=kwes, o=ddb, c=de In diesem Zweig werden alle beteiligten KWEs beschrieben. cn=kwe-xyz, ou=kwes, o=ddb, c=de Dies ist der Eintrag für die KWE kwe-xyz. Die derzeit spezifizierten Attribute für KWEs sind: Attr 1 … Attr 2 … ou=services, o=ddb, c=de In diesem Zweig werden alle beteiligten Services beschrieben. cn=service-xyz, ou=services, o=ddb, c=de 3 Dies ist der Eintrag für den Service service-xyz. Die derzeit spezifizierten Attribute für Services sind noch nicht festgelegt. Attr 1 … Attr 2 … Das Schema befindet sich derzeit in der Entwicklung. Mit Änderungen und Erweiterungen ist jederzeit zu rechnen. Benutzerverwaltung Eine Benutzerverwaltung wurde nicht gebaut. Viele der angebotenen LDAP-Server haben ihre eigene (per Internet erreichbare) Oberfläche zur Verwaltung der Benutzer. Rechte Derzeit gibt es nur folgende Rechte: read: Dieses Recht besitzen alle Benutzer, die sich nicht anmelden und jene Benutzer, die sich zwar anmelden, für die aber keine besonderen Rechte eingetragen sind. readProtected: Dieses Recht gestattet es, geschützte Resourcen zu lesen. Es ist spezifisch für KWEs. readAllProtected: Dieses Recht gestattet es, alle geschützte Resourcen zu lesen. write: Dieses Recht gestattet es, resourcen zu schreiben. Einzig für den Ingestprozeß ist so ein Recht vorgesehen. admin: Dieses Recht gestattet es, aus dem DDB-Client heraus, die LDAP-Datenbank zu modifizieren. Der genaue Umfang dieses Rechts ist noch nicht spezifiziert. Es ist damit zu rechnen, daß die Rechte noch granularer modelliert werden. 4 Autorisierung Architektur Die Autorisierung besteht auf der Client-Seite aus dem unten beschriebenen API und dessen Implementierung. Das API gestattet es, Servicerequests zu erzeugen und an den AAS zu senden. Die technischen Details der Kommunikation sind in der Implementierung verborgen. Es gibt folgende Requests: login: Dieser Request dient lediglich Testzwecken und wird in Zukunft entfernt werden. Er gestattet es, sich unter Umgehung der DDB-Oberfläche anzumelden. Userid und password werden direkt zum AAS geschickt. logout: Beendet eine durch login gestartete Sitzung. askPermission: Dieser Request erfragt beim AAS die Rechte, um auf eine Resource zuzugreifen. Es ist als sicher anzusehen, daß weitere Requests erforderlich werden. Das zugrundeliegende Sicherheitskonzept ist wie folgt: Mit jedem Request wird als Parameter auch userid:nummer mitgegeben. Die userid dient der Identifizierung der Sitzung, die Nummer macht jeden Request eindeutig. Jede Nummer kann nur einmal verwendet werden. Neben der Userid und der Nummer wird als Signatur dieser beiden auch deren mit dem privaten Schlüssel erzeugte Codierung mitgesandt. Sie gestattet es, die Authentizität des Requests im AAS sicherzustellen. Ein anonymer Request enthält eine leere userid und eine leere Signatur. 5 Policies Die Policies sind in Groovy implementiert. Groovy ist eine ‚interpretierbare’ Java-ähnliche Sprache. Sie sind leichter zu lesen als XACML und benötigen nur die Java-Vm zur Interpretation. Eine Policy beschreibt, in welcher Weise die Rechte, die bei den usern als reine Namen LDAP verwaltet werden, zur Entscheidung über eine Erlaubnis beitragen. Das Ergebnis einer solchen Auswertung ist eins von: PERMIT: Der Zugriff auf die Resource ist gestattet. DENY: Der Zugriff auf die Resource ist nicht gestattet. INDETERMINATE: Der Zugriff konnte nicht ermittelt werden, obwohl mindestens eine Policy sich zuständig für die Entscheidung war. NOT_APPLICABLE: Keine Policy war zuständig Grundsätzlich werden alle Policies in einer nicht vorhersehbaren Reihenfolge bearbeitet. Zur Kombination verschiedener Ergebnisse sind drei Strategien implementiert. Dies sind: FIRST_APPLICABLE: Das Gesamtergebnis ist das Ergebnis der Policy, die als erste ausgewerted wird und nicht NOT_APPLICABLE zurückgibt. Derzeit findet nur diese Strategie Verwendung. PERMIT_OVERRIDES: Das Gesamtergebnis ist PERMIT, wenn mindestens eine Policy als Ergebnis PERMIT liefert. DENY_OVERRIDES: Das Gesamtergebnis ist DENY, wenn mindestens eine Policy als Ergebnis DENY liefert. Die Policy für read-protected sei hier beispielsweise angeführt: import de.fhg.iais.cortex.security.* import de.fhg.iais.cortex.aas.authorisation.*; // standard header to get the parameters String userId = binding.variables.userId AccessMethod access = binding.variables.access Protection protection = binding.variables.protection String kwe = binding.variables.kwe // check applicability if (access!=AccessMethod.READ || protection!=Protection.PROTECTED) return Permission.NOT_APPLICABLE // apply policy List<String> privileges = AuthorisationEngine.getPip().getUserProperties(userId,"privileges"); if (privileges==null) return Permission.DENY if (privileges.contains("protected")) return Permission.PERMIT Permission.DENY 6 AAS-Client API Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS SUMMARY: NESTED | ENUM CONSTANTS | FIELD | METHOD FRAMES NO FRAMES All Classes DETAIL: ENUM CONSTANTS | FIELD | METHOD de.fhg.iais.cortex.security Enum AccessMethod java.lang.Object java.lang.Enum<AccessMethod> de.fhg.iais.cortex.security.AccessMethod All Implemented Interfaces: java.io.Serializable, java.lang.Comparable<AccessMethod> public enum AccessMethod extends java.lang.Enum<AccessMethod> The enumeration AccessMethod contains the following named constants: 1. READ to specify reading access to a resource 2. WRITE to specify writing access to a resource Enum Constant Summary READ WRITE Method Summary static AccessMethod valueOf(java.lang.String name) Returns the enum constant of this type with the specified name. static AccessMethod[] values() Returns an array containing the constants of this enum type, in the order they are declared. Methods inherited from class java.lang.Enum compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf 7 Methods inherited from class java.lang.Object getClass, notify, notifyAll, wait, wait, wait Enum Constant Detail READ public static final AccessMethod READ WRITE public static final AccessMethod WRITE Method Detail values public static AccessMethod[] values() Returns an array containing the constants of this enum type, in the order they are declared. This method may be used to iterate over the constants as follows: for (AccessMethod c : AccessMethod.values()) System.out.println(c); Returns: an array containing the constants of this enum type, in the order they are declared valueOf public static AccessMethod valueOf(java.lang.String name) Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) Parameters: name - the name of the enum constant to be returned. Returns: the enum constant with the specified name Throws: java.lang.IllegalArgumentException - if this enum type has no constant with the specified name java.lang.NullPointerException - if the argument is null Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS SUMMARY: NESTED | ENUM CONSTANTS | FIELD | METHOD FRAMES NO FRAMES All Classes DETAIL: ENUM CONSTANTS | FIELD | METHOD 8 Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS SUMMARY: NESTED | ENUM CONSTANTS | FIELD | METHOD FRAMES NO FRAMES All Classes DETAIL: ENUM CONSTANTS | FIELD | METHOD de.fhg.iais.cortex.security Enum Permission java.lang.Object java.lang.Enum<Permission> de.fhg.iais.cortex.security.Permission All Implemented Interfaces: java.io.Serializable, java.lang.Comparable<Permission> public enum Permission extends java.lang.Enum<Permission> The enumeration Permission defines the following constants: 1. PERMIT to specify that the access to a resource is permitted. 2. DENY to specify that the access to a resource is denied. 3. INDETERMINATE to specify that the access to a resource is not clear, although a policy was applicable. This might happen in the case of errors. 4. NOT_APPLICABLE to specify that no applicable policy could be found. Enum Constant Summary DENY INDETERMINATE NOT_APPLICABLE PERMIT Method Summary static Permission valueOf(java.lang.String name) Returns the enum constant of this type with the specified name. static Permission[] values() Returns an array containing the constants of this enum type, in the order they are declared. Methods inherited from class java.lang.Enum 9 compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf Methods inherited from class java.lang.Object getClass, notify, notifyAll, wait, wait, wait Enum Constant Detail DENY public static final Permission DENY INDETERMINATE public static final Permission INDETERMINATE NOT_APPLICABLE public static final Permission NOT_APPLICABLE PERMIT public static final Permission PERMIT Method Detail values public static Permission[] values() Returns an array containing the constants of this enum type, in the order they are declared. This method may be used to iterate over the constants as follows: for (Permission c : Permission.values()) System.out.println(c); Returns: an array containing the constants of this enum type, in the order they are declared valueOf public static Permission valueOf(java.lang.String name) Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) Parameters: name - the name of the enum constant to be returned. Returns: the enum constant with the specified name Throws: 10 java.lang.IllegalArgumentException - if this enum type has no constant with the specified name java.lang.NullPointerException - if the argument is null Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS SUMMARY: NESTED | ENUM CONSTANTS | FIELD | METHOD FRAMES NO FRAMES All Classes DETAIL: ENUM CONSTANTS | FIELD | METHOD Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS SUMMARY: NESTED | ENUM CONSTANTS | FIELD | METHOD FRAMES NO FRAMES All Classes DETAIL: ENUM CONSTANTS | FIELD | METHOD de.fhg.iais.cortex.security Enum Protection java.lang.Object java.lang.Enum<Protection> de.fhg.iais.cortex.security.Protection All Implemented Interfaces: java.io.Serializable, java.lang.Comparable<Protection> public enum Protection extends java.lang.Enum<Protection> The enumeration Protection contains the following named constants: 1. PUBLIC to specify access to a public resource 2. PROTECTED to specify reading access to protected resource Enum Constant Summary PROTECTED PUBLIC Method Summary static Protection valueOf(java.lang.String name) Returns the enum constant of this type with the specified name. static Protection[] values() Returns an array containing the constants of this enum type, in the order they are declared. 11 Methods inherited from class java.lang.Enum compareTo, equals, getDeclaringClass, hashCode, name, ordinal, toString, valueOf Methods inherited from class java.lang.Object getClass, notify, notifyAll, wait, wait, wait Enum Constant Detail PUBLIC public static final Protection PUBLIC PROTECTED public static final Protection PROTECTED Method Detail values public static Protection[] values() Returns an array containing the constants of this enum type, in the order they are declared. This method may be used to iterate over the constants as follows: for (Protection c : Protection.values()) System.out.println(c); Returns: an array containing the constants of this enum type, in the order they are declared valueOf public static Protection valueOf(java.lang.String name) Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) Parameters: name - the name of the enum constant to be returned. Returns: the enum constant with the specified name Throws: java.lang.IllegalArgumentException - if this enum type has no constant with the specified name java.lang.NullPointerException - if the argument is null 12 Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS SUMMARY: NESTED | ENUM CONSTANTS | FIELD | METHOD FRAMES NO FRAMES All Classes DETAIL: ENUM CONSTANTS | FIELD | METHOD Package Class Use Tree Deprecated Index Help FRAMES NO FRAMES All Classes DETAIL: FIELD | CONSTR | METHOD PREV CLASS NEXT CLASS SUMMARY: NESTED | FIELD | CONSTR | METHOD de.fhg.iais.cortex.aas Class AAClient java.lang.Object de.fhg.iais.cortex.aas.AAClient public class AAClient extends java.lang.Object The class Auth2Client contains static methods to have a comfortable access the authorisation server. Author: bingenble Constructor Summary AAClient() Method Summary static de.fhg.iais.cortex.security.P getPermission(java.lang.String extende ermission dUserid, java.lang.String encryptedUserid, de.fhg.iais.cortex.security.AccessMeth od access, de.fhg.iais.cortex.security.Protection prot, java.lang.String kwe) Gets the permission. static java.lang.String login(java.lang.String userid, java.lang.String password) Deprecated. static void logout(java.lang.String extendedUserid , java.lang.String encryptedUserid) logout from the authorisation server. 13 Methods inherited from class java.lang.Object equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Constructor Detail AAClient public AAClient() Method Detail login @Deprecated public static java.lang.String login(java.lang.String userid, java.lang.String password) throws org.apache.http.client.ClientProtocolException, de.fhg.iais.cortex.aas.AAException, java.io.IOException Deprecated. This method will be removed, it exists only for test purposes Parameters: userid - A string with the userid. password - A string with the password. Returns: a string which may be used as private key for encoding. Throws: org.apache.http.client.ClientProtocolException de.fhg.iais.cortex.aas.AAException - ServerException java.io.IOException logout public static void logout(java.lang.String extendedUserid, java.lang.String encryptedUserid) throws org.apache.http.client.ClientProtocolException, de.fhg.iais.cortex.aas.AAException, java.io.IOException logout from the authorisation server. Parameters: extendedUserid - A string containing the userid, a colon and a number. This number may only be used once. encryptedUserid - A string containing the extendedUserid encrypted with the private key. Throws: org.apache.http.client.ClientProtocolException - the client protocol exception de.fhg.iais.cortex.aas.AAException - ServerException java.io.IOException - Signals that an I/O exception has occurred. 14 getPermission public static de.fhg.iais.cortex.security.Permission getPermission(java.lang.String extendedUserid, java.lang.String encryptedUserid, de.fhg.iais.cortex.security.AccessMethod access, de.fhg.iais.cortex.security.Protection prot, java.lang.String kwe) throws org.apache.http.client.ClientProtocolException, de.fhg.iais.cortex.aas.AAException, java.io.IOException Gets the permission. Parameters: extendedUserid - A string containing the userid, a colon and a number. This number may only be used once. encryptedUserid - A string containing the extendedUserid encrypted with the private key. access - An AccessMethod describing the kind of wanted access. prot - A Protection describing the kind of protection of the resource. kwe - A string containeing the kwe, which owns the resource. If this string is empty, then the userid must have the rights to access all protected resources. Returns: a Permission Throws: org.apache.http.client.ClientProtocolException - the client protocol exception de.fhg.iais.cortex.aas.AAException - ServerException java.io.IOException - Signals that an I/O exception has occurred. Package Class Use Tree Deprecated Index Help FRAMES NO FRAMES All Classes DETAIL: FIELD | CONSTR | METHOD PREV CLASS NEXT CLASS SUMMARY: NESTED | FIELD | CONSTR | METHOD 15