Authentifizierungs- und Autorisierungsserver

Werbung
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
Herunterladen