2016-04-05 4 views
1

Ich bin dabei, eine sichere Anwendung zu erstellen, die auf Karaf läuft. Da ich jemand bin, der JAAS nie benutzt hat (nachdem ich nur mit Shiro gearbeitet habe), habe ich große Schwierigkeiten, meinen Kopf herumzukriegen, wie man tatsächlich etwas in JAAS implementiert. Google hilft nicht viel, da es Frühling, JavaEE und Struts jedes Mal bevorzugt, wenn es etwas sieht, das sogar mit JAAS reimt. Ich denke, dass ich herausgefunden habe, wie man Realms und Login-Module mit Karaf verwaltet, aber ich habe einige Fragen dazu der Rest der Aufgabe:Wie man JAAS mit berechtigungsbasierter Autorisierung in OSGi verwendet

  1. Wie mache ich eigentlich eine Sitzung für meine Anwendung? Ein Teil der Anwendung wird CXF REST-Dienste für die Kommunikation verwenden, was ziemlich einfach erscheint, aber ich werde auch ein von Wicket unterstütztes Web-Frontend aufbauen (ich rate durch pax-web). Wie mache ich JAAS Sitzungen in diesem Fall verwenden, um konstante Logins zu vermeiden?

  2. Erlaubnis-basierte Sicherheit mit JAAS in Karaf. Mit Shiro habe ich mich an die Erlaubnis-basierte (oder aktionsbasierte) Autorisierung gewöhnt, bei der ein Thema eine Reihe von Rollen hat und diese die Berechtigungen haben, die Sie tatsächlich validieren. Es scheint, dass JAAS dies nicht out-of-the-box unterstützt. Gibt es einen Weg dies zu implementieren, wieder mit JAAS in Karaf. Wo würde ich angeben, welche Berechtigungen mit jeder Rolle gehen?

  3. Das mag wie eine dumme Frage erscheinen, aber bitte versuche nicht zu sehr zu kichern, ich habe das Gefühl, dass ich gerade in JAAS ertrinke. Was ist die korrekte Art, Authentifizierungsprüfungen durchzuführen? Ich sehe AccessController und Subject.doAsPriviledged in verschiedenen Kontexten verwendet und ich habe Schwierigkeiten zu erkennen, was der Unterschied ist, wenn überhaupt.

Antwort

1

Sie können die CXF JAAS Login Feature verwenden. Es führt einen JAAS Login gegen das Karaf JAAS Backend ohne zusätzliche Konfiguration durch. Das Ergebnis ist eine Anmeldung am aktuellen Thread.

Das Subjekt kann unter Verwendung abgerufen werden:

Subject subject = Subject.getSubject(AccessController.getContext()); 

Sie können dann die Prinzipien aus dem Subjekt abrufen. In der Regel ist einer der Principals der Benutzer und die anderen sind die Rollen.

So mit diesem können Sie Ihren eigenen Code schreiben, um Berechtigungen zu überprüfen oder mit Shiro integrieren, denke ich.

Widder hat auch das Modul blueprint authz, das erlaubt, rollenbasierte Authentifizierung mit @RolesAllowed zu tun. Im Hintergrund verwendet es die Rollen des JAAS-Subjekts.

Ich fand auch an example für eine komplette kleine Anwendung.

+0

Hallo Christian. Danke für die schnelle Antwort. Wissen Sie, wie Sie JAAS in Karaf mit Web-Frontends handhaben? Dies würde einige benutzer-reaktive Anmeldefunktionen sowie die Sitzungsverwaltung erfordern. Es fällt mir wirklich schwer, konkrete Informationen dazu zu finden. –

+0

Eine Informationsquelle könnte die Karaf Web Console Integration sein. Es verwendet auch JAAS für die Anmeldung. Siehe https://github.com/apache/karaf/blob/master/webconsole/console/src/main/java/org/apache/felix/webconsole/internal/servlet/JaasSecurityProvider.java –

Verwandte Themen