# Sicherheit in JEE Applicationen



## Deadalus (12. Jul 2010)

Hallo, 

wie regelt ihr die Sicherheit in euren JEE Applikationen? 

Programmiert ihr das alles selbst, 
verwendet ihr das ofizielle JAAS Framework. (Seid ihr mit der Flexibilität zufrieden?)
oder setzt ihr andere Sicherheitsframeworks ein? (Wenn ja warum, und welche Vorteile ihr gegen JAAS seht)

Ich wäre sehr dankbar für Anregungen jediglicher Art.


----------



## FArt (13. Jul 2010)

Bisher konnte ich alle Anforderungen mit JAAS umsetzen. Ein Vorteil: der Standard wird von vielen unterstützt. Auch eine Migration auf andere Laufzeitumgebungen war bzgl. Security so kein Problem.


----------



## Deadalus (13. Jul 2010)

Schon mal danke für die Antwort. Ich muss allerdings direkt eine Frage hinterherschieben. 

Ist es mit JAAS möglich zu Laufzeit das Rechtesystem zu konfigurieren? In meiner Anwendung gibt es folgendes Szenario. Jeder Benutzer kann genau einer Rolle zugewiesen werden. Die Zugriffsrichte der Rolle können aber jederzeit konfiguriert werden. Aber wie kann ich so ein Szenario mit JAAS umsetzen? Die Annotationen wie @RolesAllowed etc.. kann ich ja zur Laufzeit nicht mehr ändern?

Oder etwas doch? Falls das geht würde das gerade ein ziemlich großes Problem lösen.


----------



## Gelöschtes Mitglied 5909 (13. Jul 2010)

du willst gerade glaube ich die rolle Ändern und nicht dem Benutzer eine andere Rolle geben.

@RolesAllowed(ADMIN) kannst du nicht ändern. Aber du kannst Hugo die rolle Admin geben.


----------



## musiKk (13. Jul 2010)

Cool, wie geht das? Ich habe derletzt mal eine ähnliche Frage in diesem Forum gestellt, auf die leider keine Antwort kam. Vielleicht hilft mir das ja auch weiter.


----------



## Gelöschtes Mitglied 5909 (13. Jul 2010)

Also ich hab n eigenen Realm geschrieben (Tomcat) und darin gibt man dem User die Rechte die er hat. Die kommen halt aus nem eigenen System. Die Rechte werden gecached (nur wegen der Geschwindigkeit), aber alle 5 minuten neu geladen und dann man man automatisch die Rechte. Wenn ich als Admin Hugo jetzt die Rolle Poweruser oder was weiß ich geb, dann hat er die spätestens nach 5 minuten. So sollte das doch auch gehn

Ist aber keine klassische webapp, sondern Basic-Auth over SSL mit JAX-RS Webservices und dem Custom Tomcat Realm. Da macht man dann SecurityContext#isUserInRole. Ist aber vom Prinzip nix anderes.


----------



## musiKk (14. Jul 2010)

Gut, ich hätte gedacht, dass man auch ohne eigenen Realm auskommt. Schließlich kann eine solche Anforderung ja so ungewöhnlich nicht sein.


----------



## Deadalus (14. Jul 2010)

raiL hat gesagt.:


> du willst gerade glaube ich die rolle Ändern und nicht dem Benutzer eine andere Rolle geben.
> 
> @RolesAllowed(ADMIN) kannst du nicht ändern. Aber du kannst Hugo die rolle Admin geben.



Oh in meiner Anwendung will ich sowohl das eine als auch das andere. 

Einem Benutzer eine andere Rolle zu geben stelle ich mir leicht vor. Da kann ich ja im Zweifelsfalle einfach die Spalten in der jeweiligen Tabelle ändern. In einem JDBC Realm sollte das ja dann relativ einfach zu bewerkstelligen sein. 

Aber die Rechte die eine bestimmte Rolle hat zu ändern oder gar zur Laufzeit eine neue Rolle hinzuzufügen (und dieser Rechte zu vergeben) scheint wohl mit JAAS nicht möglich zu sein. 

Das würde für mich bedeuten, dass ich das komplette Rechte System selbst implementieren muss. ;(


----------



## Siassei (14. Jul 2010)

Deadalus hat gesagt.:


> Aber die Rechte die eine bestimmte Rolle hat zu ändern oder gar zur Laufzeit eine neue Rolle hinzuzufügen (und dieser Rechte zu vergeben) scheint wohl mit JAAS nicht möglich zu sein.


So etwas suche ich für ein privates Projekt auch gerade. Das muss doch irgendwie gehen.
Gibt es ein Framework, das so etwas kann?
Ich denke da gerade an Spring, Lift, eine Tomcat-Erweiterung?


----------



## Deadalus (14. Jul 2010)

Siassei hat gesagt.:


> So etwas suche ich für ein privates Projekt auch gerade. Das muss doch irgendwie gehen.
> Gibt es ein Framework, das so etwas kann?
> Ich denke da gerade an Spring, Lift, eine Tomcat-Erweiterung?



Ja ich verstehe auch echt nicht warum ein solch häufiger Anwendungsfall einfach komplett außer acht gelassen wird. Das ist ja jetzt wirklich keine ungewöhnliche Anforderung.


----------



## Gelöschtes Mitglied 5909 (14. Jul 2010)

Die Frage die ich mir stelle ist auf welcher Ebene ihr das machen wollt. Wenn Ihr das ganze  Feingranular braucht (methodenebene oder noch feiner) dann frage ich mich wie ihr euch das vorstellt. Ist es dann nicht sinnvoller, von vornerein mehr rollen zu verwenden und den usern viele dieser rollen zu geben? (Kann man dann ja auch Problemlos gruppieren)

Beispiel:

Rechte (aka Role): lesen, schreiben, ausführen
Gruppen: ADMIN(Roles: lesen, schreiben, ausführen), EDITOR(lesen, schreiben) User(lesen)

Einzelnen Usern weist man nun eine gruppe zu. Hugo(Admin)

Wenn man die Rechte (aka Rollen) nun sinnvoll verteilt, sollte es nie nötig sein einer Methode eine andere Rolle zuzuweisen.

Das ganze kann man dann auch noch weiter treiben und kann Usern rollen und einzelne rechte geben und entziehen.

Hugo(admin, execute deny)

Dr.Panik(user, execute grant)

Damit sollte man alles abdecken können. Ich habe z.b. bei unserer Anwendung als Admin ca. 50 Rechte, die aus 3 Gruppen kommen. Das kann man natürlich auch übertreiben, da ist immer ein sinvoller mittelweg gefragt (Anwendungsabhängig)


----------



## FArt (15. Jul 2010)

raiL sagt es.

In einem Projekt, bei dem ich mitgearbeitet habe, wurde auch ein ganz tolles Rollenkonzept benötigt. Hierarchisch, Rollen erben von anderen Rollen, Rollen überschreiben andere Rollen, das ganze natürlich kann vom Enduser über eine GUI verwaltet werden.

Effekt: die meisten User benötigen so fein granulare Berechtigungen nicht und/oder können bzw. wollen so komplexe Strukturen nicht verwalten.

... und ja, es geht über JAAS. Aber natürlich kann ich die Rollen nicht per Annotation an die Methoden schreiben... das Loginmodul, welches die Authorisierung vornehmen soll, muss natürlich eine Zuordnung Rolle <-> "Funktion" besitzen (das kann eine Methode sein, ein fachlicher Ablauf mit Anfang und Ende, ...). Im Loginmodul müssen diese Informationen über den Kontext zu ermitteln sein... fertig.


----------



## Deadalus (15. Jul 2010)

@Rail, 

Ja ich werde mal versuchen, ob ich sowas hinbekomme. Das problem ist, das es sich um einen Rewrite einer bestehenden Anwendung handelt. Diese hat die besagte funktionalität schon. 
Ich denke mal es wird schwer werden zu kommunizieren, das unser neues Rechte System weniger flexibel wird als das alte (auch wenn das alte vielleicht unnötig komplex ist). 

Verwalten will das heute übrigens auch schon niemand


----------

