Wie kann ein JACC-Anbieter die Principal-to-Role-Zuordnungsfunktionen des Servers verwenden, auf dem er bereitgestellt wird?

154

Ich schreibe einen JACCAnbieter.

Auf dem Weg bedeutet dies die Implementierung eines PolicyConfiguration.

Der PolicyConfigurationist dafür verantwortlich, Konfigurationsinformationen vom Anwendungsserver zu akzeptieren, z. B. welche Berechtigungen für welche Rollen gelten. Auf diese Weise kann ein Policyspäterer Autorisierungsentscheidungen treffen, wenn er Informationen über den aktuellen Benutzer und dessen Versuche erhält.

Es ist jedoch nicht Teil des PolicyConfiguration(grausamen) Vertrags des Vertrags, eine Zuordnung zwischen Rollen und ihren Berechtigungen aufrechtzuerhalten Principals, die diesen Rollen zugewiesen sind.

Normalerweise - immer wirklich - beherbergt ein Anwendungsserver diese Zuordnung. Zum Beispiel auf Glassfish, beeinflussen Sie diese Zuordnung durch Dinge wie Versorgung sun-web.xmlund sun-ejb-jar.xmlund so weiter mit Java EE - Module. (Diese herstellerspezifischen Dateien sind dafür verantwortlich zu sagen, dass es sich beispielsweise superusersum eine Gruppe handelt, der die Anwendungsrolle zugewiesen werden soll admins.)

Ich möchte die Funktionalität dieser Dateien wiederverwenden und dies für ein möglichst breites Spektrum von Anwendungsservern tun.

Hier ist - völlig willkürlich - die Einstellung von IBM zu dieser Angelegenheit, was meinen Verdacht zu bestätigen scheint, dass das, was ich tun möchte, im Wesentlichen unmöglich ist . (Mehr Munition für meinen Fall, dass dieser spezielle Java EE-Vertrag das Papier, auf dem er gedruckt ist, nicht wert ist.)

Meine Frage: Wie komme ich zu diesen Informationen zur Zuordnung von Prinzip zu Rolle in - für den Anfang - Glassfish und JBoss aus einem heraus PolicyConfiguration? Wenn es einen Standardweg gibt, den ich nicht kenne, bin ich ganz Ohr.

Laird Nelson
quelle
7
Haben Sie in diesem Bereich Fortschritte erzielt? Ich möchte auch einen JACC-Anbieter und einen JASPIC-Authentifizierungsanbieter schreiben, um tragbare Webanwendungen zu erstellen ...
perissf
Das klingt auch nicht sehr vielversprechend: Because JSR-115 does not define how to address role mapping, WebLogic JACC classes are used for role-to-principal mapping.Siehe docs.oracle.com/cd/E24329_01/web.1211/e24485/…
Arjan Tijms
2
Ich gehe derzeit davon aus, dass Sie immer sicherstellen müssen, dass Ihr JACC-Anbieter mit einem JASPIC-Anbieter verbunden ist, zu dessen Schreiben Sie daher auch verpflichtet sind. Ich bin diesen Weg noch nicht gegangen, aber es liegt auf meinem Tisch, es zu versuchen.
Laird Nelson
@LairdNelson, wenn Sie Zeit haben, sollten Sie wahrscheinlich eine Antwort um Ihren JASPIC-Kommentar schreiben. Das klingt vielversprechend und es gibt eine Prämie von 300 Reputationen für diese Frage.
Jimhark
5
Hallo; Ich versuche nicht, jemanden in Atem zu halten. :-) Ich habe hier keine Antwort, dass ich es eilig haben könnte. Ich erinnere mich nur an Ron Monzillo, der mir geraten hat, dass die einzige Möglichkeit, Principal-to-Role-Zuweisungen auf eine Art und Weise "in" einen JACC-Anbieter zu übertragen, darin besteht, die JASPIC-Implementierung effektiv daran zu koppeln.
Laird Nelson

Antworten:

3

Die kurze Antwort lautet: Es gibt keinen Standardweg.

Obwohl Glassfish und JBoss Principal-to-Role-Zuordnungen unterstützen, übernimmt JACC nicht alle Container und delegiert daher die Verantwortung für die Beibehaltung dieser Zuordnungen an die Implementierung des JACC-Anbieters. Aus den Dokumenten (siehe: PolicyConfiguration.addToRoleMethode ):

Es ist die Aufgabe des Richtlinienanbieters, sicherzustellen, dass alle einer Rolle hinzugefügten Berechtigungen Principals erteilt werden, die der Rolle zugeordnet sind.

Mit anderen Worten, Sie müssen dies für jeden Container selbst in Ihrem JACC-Anbieter implementieren. Für JBoss können Sie beispielsweise eine der Unterklassen von verwenden AbstractRolesMappingProvider.

Diego
quelle
Abgesehen davon könnte ein tragbarer Anbieter die Zuordnung von Containerrollen ignorieren. Es könnte z. B. davon ausgegangen werden, dass ein Principal eine gleichnamige Anwendungsrolle impliziert, es sei denn, die Anwendung ( PolicyContextHandlerz. B. über eine vom Anbieter zu diesem Zweck speziell registrierte Anwendung ) vermittelt etwas anderes. Ein anderer Anbieter könnte ebenso gut den Begriff der Rollen insgesamt (und damit den von Containern bereitgestellten PolicyConfiguration) ignorieren und stattdessen ausschließlich (von Anwendungen bereitgestellte) Zuordnungen von Prinzipal zu Berechtigung verwenden (und wo diese Berechtigungen nicht auf die von JACC beschränkt sein müssen).
Uux
Randnotiz Nr. 2: Ab Java EE 8 ist die 1: 1-Zuordnung von Gruppe zu Rolle zum neuen Standard geworden (der uns jedoch nur auf halbem Weg dorthin bringt, da Rollen im Voraus noch statisch deklariert werden müssen - vorausgesetzt, es gibt keinen benutzerdefinierten JACC-Anbieter in der Tat).
Uux