Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich setze im Moment eine Web-Anwendung unter Zuhilfenahme von JSF um.
Da es anfangs nur für den Betrieb im Intranet gedacht war, habe ich das Sicherheitsthema ein bisschen vernachlässigt.
Nun kann es sein, dass es eventuell doch auch eine Schnittstelle nach außen geben wird, weshalb ich nun nachholen will, mich hier zu informieren.
Mir geht es allgemein darum, wie sicher ist JSF von sich aus und was muss man wie am besten selbst einbauen.
Ein großes Augenmerk gilt auch einem LogIn-System mit verschiedenen Nutzer spezifischen Rechten (und wohl später auch noch Gruppen).
Leider finde ich auf Anhieb nicht wirklich viele Fakten dazu. Im großen und ganzen findet man wenn man danach googelt hauptsächlich Umsetzungs-Beschreibungen, wie man ein Framework einsetzt. Wieso eins benötigt wird, welche Vorteile es hat und wo die Grenzen der einzelnen Methoden liegen finde ich nur schwerlich (oder vielleicht nutze ich die falschen Suchbegriffe).
In einem Buch zu JSF fand ich einen Satz, bei dem ich gehofft habe, dass nun mehr Informationen genau zu diesem Bereich kommen:
"Die Sicherheit von Unternehmensanwendung ist von hoher Relevanz, so dass die im Java-EE- und EJB-Bereich vorhandenen rudimentären Möglichkeiten häufig nicht ausreichen und explizit Sicherheits-Frameworks zum Einsatz kommen oder individuelle Lösungen realisiert werden."
Wirklich viel mehr steht hier nicht - leider.
Die häufigst genannten Frameworks die für die Authentifikation genannt werden, sind JBoss Seam und Spring Security. Beide Frameworks werden bis jetzt noch nicht im Projekt verwendet.
Leider habe ich niergends Vorteile und Nachteile der Frameworks gefunden oder gar Gegenüberstellungen davon.
Auch weiß ich nicht, was genau gegen eine eigene Lösung spricht, die in einem Phaselistener abfrägt, ob ein Nutzer eingeloggt ist und wenn ja, ob dieser die Rechte hat und dem entsprechend weiter leiten kann.
Nicht das ich dies machen will, suche eher Argumente dagegen.
Was ich bis jetzt gefunden habe ist, dass es Arbeit ist, die man sich von Frameworks abnehmen lassen kann, Rollen-Rechte besser gemanaged werden können und man auch Komponenten eine Option geben kann, die je nach Rechten das Element rendert (und somit das if herum spart).
Mir geht es erstmal nur um Hintergründe, Fakten und Vorteile einzelner Frameworks (bzw. von Spring und JBoss Seam). Die Umsetzung wird später angegangen.
Wäre super, wenn ihr mir hier weiterhelfen könnt und Tipps geben, wo ich dazu am besten gute Informationen finde.
Wenn Du JSF 2 und einen EE-Server verwendest, würde ich JAAS empfehlen. Damit kannst Du recht viel Out-of-the-box abfackeln. In Zusammenarbeit mit EJB ist das eine schöne Geschichte.
Aber um genauere Tips zu geben, müsstest Du ein wenig mehr über die genutzte Technologie erzählen.
Ja das Projekt nutzt JSF 2.0 und läuft auf einem Glassfish-Server (also mit der JSF Implementierung Mojarra). Darüber hinaus werden so gut wie keine Frameworks eingesetzt.
ich würde dir sehr empfehlen dir mal Apache Shiro anzuschauen. Das ist wirklich ein sehr einfaches und flexibles Security Framework. Von Spring Security würde ich die Finger lassen, da man immer wieder hört, das es unnötig kompliziert sein soll.
Seam Security (ab der 3.0) ist halt sehr stark an CDI gekoppelt.
Das schöne an Shiro ist, das es komplett unabhängig von der verwendeten Technologie ist, es aber trotzdem sehr einfach und intuitiv zu bedienen ist.
Noch ein Satz zu JAAS. JASS ist im JEE Umfeld wirklich nett und einfach zu verwenden. Aber furchtbar unflexibel. Wenn du in deiner Anwendung eine feste Anzahl von statischen Rollen hast, deren Zugriffsrechte sich nie ändern können nimm JAAS. Willst du zur Laufzeit dynamisch Rollen hinzufügen und Rechte ändern mach bitte einen großen Bogen darum.
Seam 2 löst das hervorragend, ist aber kein kleines zusätzliche einsetzbares Framework sondern ein arg dicker, monolithischer Brocken (aber mit Sicherheit JSF 2.0 ohne sonstige weitere Frameworks weit überlegen). Man setzt ein Projekt entweder als seam2-Projekt auf oder nicht, aber man kann nicht klein und elegant seam für Sicherheit einbinden.
Seam 3 (für JSF 2.0 und JEE6) ist da meines Wissens nach noch ziemlich unzureichend.
Ansonsten ist das Seam2-Prinzip (identiy-Komponente) auch relativ einfach selber nachbaubar, das würde ich wohl machen wenn ich ein JSF 2.0-Projekt ohne seam aufsetzen müsste. Eine Session Scope-"identity"-Komponente, die Namen und Password und Login-Status und Rollen des Users speichert, die man per JSF-EL abfragen kann mit #{identity.loggedIn} und #{identity.hasRole('superDuperAdmin')}. Dann kann man die JSF-Seiten direkt darüber filtern und braucht auch keinen PhaseListener mehr.
Ansonsten ist das Seam2-Prinzip (identiy-Komponente) auch relativ einfach selber nachbaubar, das würde ich wohl machen wenn ich ein JSF 2.0-Projekt ohne seam aufsetzen müsste. Eine Session Scope-"identity"-Komponente, die Namen und Password und Login-Status und Rollen des Users speichert, die man per JSF-EL abfragen kann mit #{identity.loggedIn} und #{identity.hasRole('superDuperAdmin')}. Dann kann man die JSF-Seiten direkt darüber filtern und braucht auch keinen PhaseListener mehr.