Sichere Benutzer- und Rollenvergabe durch container managed security

27.08.2014

copyright-voyager624---Fotolia.com_blogAuthentifizierungs- und Autorisierungsmechanismen stellen in unternehmenskritischen Anwendungen unerlässliche Bestandteile dar. Java EE-konforme Applikationsserver wie z.B. der Oracle GlassFish Server bieten mit der „container managed security“ ein mächtiges Werkzeug zur Umsetzung von Authentifizierung und rollenbasierter Autorisierung in Webapplikationen.

Die Idee hinter dem Konzept der container managed security ist die Definition von Benutzern und Rollen außerhalb der eigentlichen Enterprise-Applikation und der Einsatz eines standardisierten Mechanismus zur Legitimation des Benutzers. Sämtliche Entscheidungen zur Zugriffskontrolle werden automatisch durch den eingesetzten JEE-Applikationscontainer getroffen. Der Entwickler selbst definiert lediglich, welche Applikationsbestandteile abgesichert werden sollen und für welche Benutzerrollen diese verfügbar sind.

Hierfür stehen dem Entwickler diese beiden Konstrukte zur Verfügung:

Deklarative Sicherheit (declarative security)

Bei der deklarativen Konfiguration werden die Sicherheitsanforderungen der Applikation entweder über Deploymentdeskriptoren oder Java-Annotations definiert. Im Falle von Webkomponenten erfolgt dies über den Deskriptor web.xml, bei Java Enterprise Beans über die Datei ejb-jar.xml.

Folgende Beispielkonfiguration beschränkt den Zugriff auf sämtliche Web-Ressourcen unter der URL /private auf Benutzer der Rolle user:

<security-constraint>

<web-resource-collection>

            <web-resource-name>private</web-resource-name>

            <url-pattern>/private/*</url-pattern>

     </web-resource-collection>

     <auth-constraint>

            <role-name>user</role-name>

     </auth-constraint>

</security-constraint>

Erfolgt ein Zugriff auf diesen Bereich, wird der Benutzer aufgefordert sich zu authentisieren. Der Login – beispielsweise über ein HTML-Formular – wird folgendermaßen definiert:

<login-config>

     <auth-method>FORM</auth-method>

     <realm-name>myrealm</realm-name>

     <form-login-config>

            <form-login-page>/login.html</form-login-page>

            <form-error-page>/error.html</form-error-page>

     </form-login-config>

</login-config>

Die Authentifizierung erfolgt gegen die angegeben Realm. Dies kann z.B. ein vorhandener LDAP-Server im Unternehmensnetzwerk sein.

Programmatische Sicherheit (programmatic security) 

Es gibt Anwendungsfälle, in denen ein komplexeres Sicherheitsmodell in der Applikationabgebildet werden muss, das sich nicht mit der deklarativen Sicherheit beschreiben lässt. Das ist beispielsweise der Fall, wenn bei häufig fehlgeschlagenen Loginversuchen externe Systeme wie z.B. ein Security Incident Tool benachrichtigt werden müssen.

In solchen Fällen kann mit der programmatischen Sicherheit während der Authentifizierung weitere Geschäftslogik ausgeführt werden. Der Zugriff auf Methoden zur Authentifizierung und Autorisierung erfolgt hierbei über die Schnittstelle HttpServletRequest der Servlet 3.0 Spezifikation.

container managed security: sicher, effizient und wartungsfreundlich 

Die container managed security trägt maßgeblich zur Sicherheit von Unternehmensanwendungen bei, da die fehleranfällige Implementierung von Authentifizierungs- und Autorisierungsmechanismen durch den Anwendungsentwickler vermieden wird.

Durch Wegfall der Implementierung von Schnittstellen zu den dahinterliegenden Authentifizierungssystemen und Verzeichnisdiensten, wird nicht nur die Effizienz des Entwicklerteams, durch weniger Programmcode/Bugs und einfachere Konfiguration, sondern auch die Wartungsfreundlichkeit der Applikation verbessert.

 


Quellen:
[Bild] © voyager624, Fotolia.com_blog

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*