Seit Einführung von AEM 6.3 gibt es eine neue Implementierung des Features „Geschlossene Benutzergruppe“, welche die Probleme hinsichtlich der Leistung, Skalierbarkeit und Sicherheit der bestehenden Implementierung beheben soll.
Der Einfachheit halber wird das Feature im Rahmen dieser Dokumentation als „CUG“ abgekürzt (für Closed User Group, geschlossene Benutzergruppe).
Ziel der neuen Implementierung ist es, bei Bedarf vorhandene Funktionen abzudecken und gleichzeitig Probleme und Designbeschränkungen älterer Versionen zu beheben. Das Ergebnis ist eine neue CUG-Version mit den folgenden Eigenschaften:
Eine CUG besteht im Kontext von AEM aus den folgenden Schritten:
Die neue Implementierung unterscheidet zwischen Autorisierungselementen und Authentifizierungselementen. Seit AEM 6.3 ist es möglich, den Lesezugriff zu beschränken, ohne eine Authentifizierungspflicht hinzufügen. Dies ist beispielsweise gebräuchlich, wenn eine bestimmte Instanz eine vollständige Authentifizierung anfordert oder eine gegebene Baumstruktur bereits in einem Teilbaum vorhanden ist, der bereits eine Authentifizierung anfordert.
Ebenso kann eine bestimmte Baumstruktur mit einer Authentifizierungspflicht markiert werden, ohne dass die effektive Einrichtung der Berechtigungen geändert werden muss. Die Kombinationen und die Ergebnisse werden im Abschnitt Kombinieren von CUG-Richtlinien und der Authentifizierungspflicht aufgeführt.
Das zentrale Feature einer CUG besteht in der Einschränkung des Lesezugriffs auf eine bestimmte Baumstruktur im Content-Repository für alle außer ausgewählte Prinzipale. Die neue Implementierung manipuliert nicht spontan die Standardinhalte der Zugriffssteuerung, sondern definiert einen dedizierten Typ von Zugriffssteuerungsrichtlinie, der eine CUG darstellt.
Dieser neue Typ von Richtlinie weist die folgenden Eigenschaften auf:
Die Implementierung von PrincipalSetPolicy, die zur Darstellung von CUGs verwendet wird, definiert zusätzlich Folgendes:
Diese CUG-Richtlinien werden über ein separates Autorisierungsmodul namens oak-authorization-cug in einer AEM-Instanz bereitgestellt. Dieses Modul verfügt über eine eigene Zugriffssteuerungsverwaltung und Berechtigungsprüfung. Das heißt, die Standardversion von AEM umfasst eine Oak-Content-Repository-Konfiguration, die mehrere Autorisierungsmechanismen kombiniert. Weitere Informationen finden Sie unter diese Seite in der Apache Oak-Dokumentation.
Bei dieser Composite-Konfiguration ersetzt eine neue CUG nicht den vorhandenen Zugriffssteuerungsinhalt, der an den Zielknoten angehängt ist, sondern dient als Ergänzung, die später auch entfernt werden kann, ohne die ursprüngliche Zugriffskontrolle zu beeinträchtigen. Standardmäßig wäre dies in AEM eine Zugriffssteuerungsliste.
Anders als bei der vorherigen Implementierung werden neue CUG-Richtlinien immer als Zugriffssteuerungsinhalt erkannt und behandelt. Dies bedeutet, dass sie mit der JCR-Zugriffssteuerungsverwaltungs-API erstellt und bearbeitet werden. Weitere Informationen finden Sie unter Verwalten von CUG-Richtlinien Abschnitt.
Neben einer dedizierten Zugriffssteuerungsverwaltung für CUGs, ermöglicht das neue Autorisierungsmodell bedingt die Aktivierung der Berechtigungsprüfung für seine Richtlinien. Dies ermöglicht die Einrichtung von CUG-Richtlinien in einer Staging-Umgebung. Dabei wird die Prüfung der effektiven Berechtigungen erst aktiviert, wenn sie in die Produktionsumgebung repliziert werden.
Die Berechtigungsprüfung für CUG-Richtlinien und die Interaktion mit dem standardmäßigen oder zusätzlichen Autorisierungsmodellen folgen dem Muster, das für mehrere Autorisierungsmechanismen in Apache Jackrabbit Oak entworfen wurde: Ein gegebener Berechtigungssatz wird gewährt, falls – und nur falls – alle Modelle Zugriff erteilen. Siehe diese Seite für weitere Details.
Die folgenden Eigenschaften gelten für die Berechtigungsprüfung, die mit dem Autorisierungsmodell verknüpft ist, das CUG-Richtlinien verarbeiten und prüfen soll:
Die Auswirkungen einer einzelnen CUG-Richtlinie auf die Berechtigungsprüfung lassen sich wie folgt zusammenfassen:
Die folgenden bewährten Vorgehensweisen müssen bei der Definition des eingeschränkten Lesezugriffs durch CUGs berücksichtigt werden:
Entscheiden Sie bewusst, ob Sie die CUG benötigen, um Lesezugriff einzuschränken oder die Authentifizierung zu erzwingen. Sollte dies der Fall sein oder beides erforderlich sein, finden Sie im Abschnitt Best Practices weitere Informationen zur Authentifizierungspflicht .
Erstellen Sie ein Bedrohungsmodell für die Daten oder Inhalte, die geschützt werden müssen, um Bedrohungsgrenzen zu identifizieren und ein klares Bild der Empfindlichkeit der Daten und Rollen zu erhalten, die mit autorisiertem Zugriff verbunden sind.
Modellieren Sie die Repository-Inhalte und CUGs unter Berücksichtigung allgemeiner Aspekte bezüglich der Autorisierung und bewährter Vorgehensweisen:
Beschränken Sie die Pfade mit Unterstützung für CUG-Richtlinien auf einige wenige Baumstrukturen im Repository, um eine optimale Leistung zu ermöglichen. Beispielsweise nur CUGs unter dem Knoten /content zulassen, die seit AEM 6.3 als Standardwert geliefert wurden.
CUG-Richtlinien sind darauf ausgelegt, einem kleinen Prinzipalsatz Lesezugriff zu gewähren. Der Bedarf an einer sehr großen Anzahl an Prinzipalen deutet möglicherweise auf Fehler beim Content- bzw. Anwendungsdesign hin und sollte überdacht werden.
Die Teile des CUG-Features, die für Authentifizierung relevant sind, ermöglichen die Markierung von Baumstrukturen, die Authentifizierung erfordern, und optional die Angabe einer dedizierten Anmeldeseite. Gemäß der vorherigen Version ermöglicht die neue Implementierung die Kennzeichnung von Baumstrukturen, die eine Authentifizierung im Content-Repository erfordern, und die bedingte Aktivierung der Synchronisierung mit der Sling org.apache.sling.api.auth.Authenticator
verantwortlich für die Durchsetzung der Anforderung und die Umleitung zu einer Anmelderessource.
Diese Anforderungen werden mit dem Authenticator anhand eines OSGi-Services registriert, der die Registrierungseigenschaft sling.auth.requirements
zur Verfügung stellt. Diese Eigenschaften werden dann dazu verwendet, die Authentifizierungspflichten dynamisch zu erweitern. Weitere Informationen finden Sie in der Sling-Dokumentation.
Aus Sicherheitsgründen ersetzt die neue Implementierung die Verwendung einer verbleibenden JCR-Eigenschaft durch einen dedizierten Mixin-Typ namens granite:AuthenticationRequired
, der eine einzelne optionale Eigenschaft des Typs STRING für den Anmeldepfad definiert granite:loginPath
. Nur Inhaltsänderungen mit Bezug zu diesem Mixin-Typ führen zur Aktualisierung der beim Apache Sling Authenticator registrierten Anforderungen. Die Änderungen werden beim Beibehalten vorübergehender Änderungen nachverfolgt und erfordern daher eine javax.jcr.Session.save()
auffordern, wirksam zu werden.
Dasselbe gilt für die granite:loginPath
-Eigenschaft. Sie wird nur berücksichtigt, wenn sie von dem Mixin-Typ definiert wird, der mit der Authentifizierungspflicht zusammenhängt. Wenn Sie eine Resteigenschaft mit genau diesem Namen auf einem unstrukturierten JCR-Knoten hinzufügen, wird die gewünschte Wirkung nicht angezeigt und die Eigenschaft wird von dem Handler ignoriert, der für die Aktualisierung der OSGi-Registrierung verantwortlich ist.
Die Anmeldepfadeigenschaft ist optional und muss nur dann festgelegt werden, wenn die Baumstruktur, welche die Authentifizierung erfordert, nicht auf den Standard oder eine anderweitig übernommene Anmeldeseite zurückfallen kann. Siehe dazu unten die Prüfung des Anmeldepfads.
Da diese Art von Authentifizierungspflicht voraussichtlich auf bestimmte Ausführungsmodi und auf eine kleine Untergruppe von Baumstrukturen im Inhalts-Repository beschränkt ist, ist das Tracking des Anforderungs-Mixin-Typs und der Eigenschaften des Anmeldepfads an eine bedingte und an eine entsprechende Konfiguration gebunden, die die unterstützten Pfade definiert (siehe Konfigurationsoptionen unten). Daher lösen nur Änderungen im Rahmen dieser unterstützten Pfade eine Aktualisierung der OSGi-Registrierung aus, anderswo werden der Mixin-Typ und die Eigenschaft ignoriert.
Das standardmäßige AEM-Setup nutzt diese Konfiguration jetzt, indem es ermöglicht, das Mixin im Autorenausführungsmodus festzulegen, es jedoch nur bei Replikation auf der Veröffentlichungsinstanz wirksam zu machen. Siehe diese Seite für Details, wie Sling die Authentifizierungspflicht durchsetzt.
Hinzufügen der granite:AuthenticationRequired
Der Mixin-Typ innerhalb der konfigurierten unterstützten Pfade führt dazu, dass die OSGi-Registrierung des verantwortlichen Handlers mit einem neuen, zusätzlichen Eintrag mit dem sling.auth.requirements
-Eigenschaft. Wenn eine bestimmte Authentifizierungspflicht das optionale granite:loginPath
-Eigenschaft, wird der Wert zusätzlich beim Authenticator mit dem Präfix "-"registriert, um von der Authentifizierungspflicht ausgeschlossen zu werden.
Apache Sling-Authentifizierungspflichten sollen anhand der Seiten- oder Knotenhierarchie vererbt werden. Die Details der Vererbung und der Prüfung von Authentifizierungspflichten (wie Reihenfolge und Rangfolge) sind ein Implementierungsdetail und werden in diesem Artikel nicht behandelt.
Die Bewertung des Anmeldepfads und die Umleitung zur entsprechenden Ressource bei Authentifizierung sind derzeit ein Implementierungsdetail des Authentifizierungs-Handlers der Adobe Granite Login Selector ( com.day.cq.auth.impl.LoginSelectorHandler
), ein standardmäßig mit AEM konfigurierter Apache Sling AuthenticationHandler.
Bei Aufruf AuthenticationHandler.requestCredentials
Dieser Handler versucht, die Zuordnungs-Anmeldeseite zu ermitteln, an die der Benutzer umgeleitet wird. Dies umfasst die folgenden Schritte:
Es wird unterschieden, ob der Grund für die Weiterleitung ein abgelaufenes Kennwort oder eine normale Anmeldeanfrage ist.
Im Falle einer regulären Anmeldung wird in der folgenden Reihenfolge überprüft, ob ein Anmeldepfad abgerufen werden kann:
com.adobe.granite.auth.requirement.impl.RequirementService
,LoginSelectorHandler
,LoginSelectorHandler
.Sobald anhand der oben genannten Aufrufe ein gültiger Anmeldepfad abgerufen wurde, wird die Anforderung des Benutzers an diese Seite weitergeleitet.
Ziel dieser Dokumentation ist die Bewertung des Anmeldepfads, wie er von der internen LoginPathProvider
-Schnittstelle. Die seit Einführung von AEM 6.3 enthaltene Implementierung verhält sich wie folgt:
Die Registrierung des Anmeldepfads hängt von der Unterscheidung ab, ob der Grund für die Weiterleitung ein abgelaufenes Kennwort oder eine normale Anmeldeanfrage ist.
Im Falle einer regulären Anmeldung wird in der folgenden Reihenfolge überprüft, ob ein Anmeldepfad abgerufen werden kann:
LoginPathProvider
durch die neue com.adobe.granite.auth.requirement.impl.RequirementService
,LoginSelectorHandler
,LoginSelectorHandler
.Sobald anhand der oben genannten Aufrufe ein gültiger Anmeldepfad abgerufen wurde, wird die Anforderung des Benutzers an diese Seite weitergeleitet.
Die LoginPathProvider
wie von der neuen Unterstützung für Authentifizierungsanforderungen in Granite implementiert, stellt Anmeldepfade bereit, die durch die granite:loginPath
-Eigenschaften, die wiederum vom Mixin-Typ wie oben beschrieben definiert werden. Die Zuordnung des Ressourcenpfads, der den Anmeldepfad und den Eigenschaftswert selbst enthält, wird im Speicher aufbewahrt und wird geprüft, um einen geeigneten Anmeldepfad für andere Knoten in der Hierarchie zu ermitteln.
Die Prüfung wird nur für Anfragen durchgeführt, die mit Ressourcen verknüpft sind, die sich in den konfigurierten unterstützten Pfaden befinden. Für alle anderen Anfragen werden die alternativen Möglichkeiten zum Ermitteln des Anmeldepfads geprüft.
Die folgenden bewährten Vorgehensweisen müssen bei der Definition von Authentifizierungspflichten berücksichtigt werden:
Verschachtelung von Authentifizierungspflichten vermeiden: Eine einzelne „auth-requirement“-Markierung am Anfang einer Baumstruktur sollte ausreichen und wird an den gesamten vom Zielknoten definierten Teilbaum weitergegeben. Zusätzliche Authentifizierungspflichten innerhalb dieser Baumstruktur sind als redundant zu betrachten und führen möglicherweise zu Leistungseinbußen bei der Prüfung der Authentifizierungspflicht in Apache Sling. Aufgrund der Trennung der autorisierungs- und authentifizierungsrelevanten CUG-Bereiche ist es möglich, den Lesezugriff anhand von CUG-Richtlinien oder anderen Richtlinien einzuschränken und gleichzeitig in der gesamten Baumstruktur die Authentifizierung zu erzwingen.
Passen Sie Repository-Inhalte so an, dass die Authentifizierungspflicht für die gesamte Baumstruktur gilt, ohne verschachtelte Nebenbäume wieder von ihr ausnehmen zu müssen.
Zur Vermeidung genauer Angaben und der darauf folgenden Registrierung redundanter Anmeldepfade:
LoginSelectorHandler
verknüpft sind.In der Oak-Dokumentation wird beschrieben, wie die neuen CUG-Richtlinien im Repository-Inhalt dargestellt werden. Weitere Informationen finden Sie auf dieser Seite.
Die Notwendigkeit einer separaten Authentifizierungspflicht spiegelt sich im Repository-Inhalt wider, wobei ein dedizierter Mixin-Knotentyp auf dem Zielknoten platziert wird. Der Mixin-Typ definiert eine optionale Eigenschaft, um für die vom Zielknoten definierte Baumstruktur eine dedizierte Anmeldeseite festzulegen.
Die mit dem Anmeldepfad verknüpfte Seite kann sich innerhalb oder außerhalb dieser Baumstruktur befinden. Sie ist von der Authentifizierungspflicht ausgenommen.
[granite:AuthenticationRequired]
mixin
- granite:loginPath (STRING)
Der neue Typ von Zugriffssteuerungsrichtlinien zur Beschränkung des Lesezugriffs für eine CUG wird mithilfe der JCR-Zugriffssteuerungs-Management-API verwaltet und folgt den Mechanismen, die mit der JCR 2.0-Spezifikation.
Code für die Anwendung einer neuen CUG-Richtlinie auf einen Knoten, der vorher keinen CUG-Satz aufwies. Bitte beachten Sie, dass getApplicablePolicies
gibt nur neue Richtlinien zurück, die noch nicht festgelegt wurden. Am Ende muss die Richtlinie zurückgeschrieben und Änderungen müssen beibehalten werden.
String path = [...] // needs to be a supported, absolute path
Principal toAdd1 = [...]
Principal toAdd2 = [...]
Principal toRemove = [...]
AccessControlManager acMgr = session.getAccessControlManager();
PrincipalSetPolicy cugPolicy = null;
AccessControlPolicyIterator it = acMgr.getApplicablePolicies(path);
while (it.hasNext()) {
AccessControlPolicy policy = it.nextAccessControlPolicy();
if (policy instanceof PrincipalSetPolicy) {
cugPolicy = (PrincipalSetPolicy) policy;
break;
}
}
if (cugPolicy == null) {
log.debug("no applicable policy"); // path not supported or no applicable policy (e.g.
// the policy was set before)
return;
}
cugPolicy.addPrincipals(toAdd1, toAdd2);
cugPolicy.removePrincipals(toRemove));
acMgr.setPolicy(path, cugPolicy); // as of this step the policy can be edited/removed
session.save();
Die folgenden Schritte sind erforderlich, um eine vorhandene CUG-Richtlinie zu bearbeiten. Die angepasste Richtlinie muss zurückgeschrieben und Änderungen müssen mit javax.jcr.Session.save()
() beibehalten werden.
String path = [...] // needs to be a supported, absolute path
Principal toAdd1 = [...]
Principal toAdd2 = [...]
Principal toRemove = [...]
AccessControlManager acMgr = session.getAccessControlManager();
PrincipalSetPolicy cugPolicy = null;
for (AccessControlPolicy policy : acMgr.getPolicies(path)) {
if (policy instanceof PrincipalSetPolicy) {
cugPolicy = (PrincipalSetPolicy) policy;
break;
}
}
if (cugPolicy == null) {
log.debug("no policy to edit"); // path not supported or policy not set before
return;
}
if (cugPolicy.addPrincipals(toAdd1, toAdd2) || cugPolicy.removePrincipals(toRemove)) {
acMgr.setPolicy(path, cugPolicy);
session.save();
} else {
log.debug("cug policy not modified");
}
Die JCR-Zugriffssteuerungsverwaltung definiert eine optimale Methode zum Abrufen der Richtlinien, die an einem gegebenen Pfad wirksam sind. Da die Auswertung von CUG-Richtlinien bedingt ist und von der entsprechenden Konfiguration abhängt, die aktiviert werden muss, wird getEffectivePolicies
ist eine praktische Methode, um zu überprüfen, ob eine bestimmte CUG-Richtlinie in einer bestimmten Installation wirksam wird.
Zwischen getEffectivePolicies
und dem folgenden Codebeispiel, das die Hierarchie von unten nach oben betrachtet, um herauszufinden, ob ein gegebener Pfad bereits Teil einer bestehenden CUG ist, bestehen Unterschiede.
String path = [...] // needs to be a supported, absolute path
AccessControlManager acMgr = session.getAccessControlManager();
PrincipalSetPolicy cugPolicy = null;
// log an debug message of all CUG policies that take effect at the given path
// there could be zero, one or many (creating nested CUGs is possible)
for (AccessControlPolicy policy : acMgr.getEffectivePolicies(path) {
if (policy instanceof PrincipalSetPolicy) {
String policyPath = "-";
if (policy instanceof JackrabbitAccessControlPolicy) {
policyPath = ((JackrabbitAccessControlPolicy) policy).getPath();
}
log.debug("Found effective CUG for path '{}' at '{}', path, policyPath);
}
}
Suchen aller verschachtelten CUGs, die an einem bestimmten Pfad definiert wurden, gleichgültig, ob sie wirksam sind oder nicht. Weitere Informationen finden Sie im Abschnitt Konfigurationsoptionen.
String path = [...]
List<AccessControlPolicy> cugPolicies = new ArrayList<AccessControlPolicy>();
while (isSupportedPath(path)) {
for (AccessControlPolicy policy : acMgr.getPolicies(path)) {
if (policy instanceof PrincipalSetPolicy) {
cugPolicies.add(policy);
}
}
path = (PathUtils.denotesRoot(path)) ? null : PathUtils.getAncestorPath(path, 1);
}
Die von JackrabbitAccessControlManager
definierten Erweiterungen, welche die Bearbeitung von Zugriffssteuerungsrichtlinien nach Prinzipalen ermöglichen, werden nicht anhand der CUG-Zugriffssteuerungsverwaltung implementiert, da CUG-Richtlinien per Definition immer alle Prinzipale betreffen: Den mit der PrincipalSetPolicy
aufgeführten Prinzipalen wird Lesezugriff gewährt, während alle anderen Prinzipale in der vom Zielknoten definierten Baumstruktur keine Inhalte lesen können.
Die entsprechenden Methoden geben immer ein leeres Richtlinienfeld zurück, aber keine Ausnahmefehler.
Die Erstellung, Änderung oder Entfernung neuer Authentifizierungsanforderungen wird durch Änderung des effektiven Knotentyps des Zielknotens erreicht. Die optionale Anmeldepfadeigenschaft kann dann mit der normalen JCR-API geschrieben werden.
Die Änderungen an einem bestimmten Zielknoten, die oben erwähnt werden, werden nur dann auf dem Apache Sling Authenticator angezeigt, wenn die RequirementHandler
wurde konfiguriert und das Ziel ist in den Baumstrukturen enthalten, die von den unterstützten Pfaden definiert werden (siehe Abschnitt Konfigurationsoptionen).
Weitere Informationen finden Sie unter [Zuweisen von Mixin-Knotentypen](https://docs.adobe.com/docs/en/spec/jcr/2.0/10_Writing.html#10.10.3 Zuweisen von Mixin-Knotentypen) und [Hinzufügen von Knoten und Festlegen von Eigenschaften](https://docs.adobe.com/docs/en/spec/jcr/2.0/10_Writing.html#10.4 Hinzufügen von Knoten und Festlegen von Eigenschaften)
Im Folgenden finden Sie Schritte zum Erstellen einer neuen Authentifizierungspflicht. Beachten Sie, dass die Anforderung nur beim Apache Sling Authenticator registriert wird, wenn die RequirementHandler
wurde für den Baum konfiguriert, der den Zielknoten enthält.
Node targetNode = [...]
targetNode.addMixin("granite:AuthenticationRequired");
session.save();
Hier finden Sie Schritte zum Erstellen einer neuen Authentifizierungspflicht mit einem Anmeldepfad. Die Pflicht und die Ausnahme für den Anmeldepfad wird nur dann beim Apache Sling Authenticator registriert, wenn der RequirementHandler
für die Baumstruktur mit dem Zielknoten konfiguriert wurde.
Node targetNode = [...]
String loginPath = [...] // STRING property
Node targetNode = session.getNode(path);
targetNode.addMixin("granite:AuthenticationRequired");
targetNode.setProperty("granite:loginPath", loginPath);
session.save();
Im Folgenden finden Sie Schritte zum Ändern eines vorhandenen Anmeldepfads. Die Änderung wird nur beim Apache Sling Authenticator registriert, wenn die RequirementHandler
wurde für den Baum konfiguriert, der den Zielknoten enthält. Der vorherige Anmeldepfadwert wird aus der Registrierung entfernt. Die mit dem Zielknoten verknüpfte Authentifizierungspflicht ist von dieser Änderung nicht betroffen.
Node targetNode = [...]
String newLoginPath = [...] // STRING property
if (targetNode.isNodeType("granite:AuthenticationRequired")) {
targetNode.setProperty("granite:loginPath", newLoginPath);
session.save();
} else {
log.debug("cannot modify login path property; mixin type missing");
}
Hier finden Sie Schritte zum Entfernen eines vorhandenen Anmeldepfads. Die Registrierung des Anmeldepfadeintrags wird nur dann aus dem Apache Sling Authenticator entfernt, wenn der RequirementHandler
für die Baumstruktur mit dem Zielknoten konfiguriert wurde. Die mit dem Zielknoten verknüpfte Authentifizierungspflicht ist nicht betroffen.
Node targetNode = [...]
if (targetNode.hasProperty("granite:loginPath") &&
targetNode.isNodeType("granite:AuthenticationRequired")) {
targetNode.setProperty("granite:loginPath", null);
session.save();
} else {
log.debug("cannot remove login path property; mixin type missing");
}
Alternativ erfüllt die unten aufgeführte Methode denselben Zweck:
String path = [...] // absolute path to target node
String propertyPath = PathUtils.concat(path, "granite:loginPath");
if (session.propertyExists(propertyPath)) {
session.getProperty(propertyPath).remove();
// or: session.removeItem(propertyPath);
session.save();
}
Hier finden Sie Schritte zum Entfernen einer vorhandenen Authentifizierungspflicht. Die Registrierung der Pflicht wird nur dann aus dem Apache Sling Authenticator entfernt, wenn der RequirementHandler
für die Baumstruktur mit dem Zielknoten konfiguriert wurde.
Node targetNode = [...]
targetNode.removeMixin("granite:AuthenticationRequired");
session.save();
Es gibt keine dedizierte öffentliche API, um alle effektiven Authentifizierungsanforderungen zu lesen, die beim Apache Sling Authenticator registriert sind. Die Liste wird jedoch in der Systemkonsole unter https://<serveraddress>:<serverport>/system/console/slingauth
unter "Konfiguration der Authentifizierungspflicht".
Die folgende Abbildung zeigt die Authentifizierungspflichten einer AEM -Veröffentlichungsinstanz mit Demoinhalten an. Der hervorgehobene Pfad der Community-Seite zeigt, wie eine von der in diesem Dokument beschriebenen Implementierung hinzugefügte Anforderung im Sling Apache Authenticator dargestellt wird.
In diesem Beispiel wurde die optionale Anmeldepfadeigenschaft nicht festgelegt. Folglich ist beim Authenticator kein zweiter Eintrag registriert.
Es gibt derzeit keine öffentliche API zum Abrufen des Anmeldepfads, der beim anonymen Zugriff auf eine Ressource, für die eine Authentifizierung erforderlich ist, wirksam wird. Im Abschnitt „Prüfung des Anmeldepfades“ finden Sie weitere Informationen dazu, wie der Anmeldepfad abgerufen wird.
Neben den anhand dieser Funktion definierten Anmeldepfaden gibt es noch andere Wege, die Weiterleitung zur Anmeldung zu definieren. Diese sollten bei der Entwicklung des Inhaltsmodells und der Authentifizierungspflichten einer jeweiligen AEM-Installation immer erwogen werden.
Wie beim Anmeldepfad gibt es keine öffentlichen APIs zum Abrufen der im Inhalt definierten geerbten Authentifizierungspflichten. Das folgende Beispiel zeigt, wie alle Authentifizierungsanforderungen aufgelistet werden, die mit einer bestimmten Hierarchie definiert wurden, unabhängig davon, ob sie wirksam werden oder nicht. Weitere Informationen finden Sie unter Konfigurationsoptionen.
Es wird empfohlen, sich sowohl für Authentifizierungsanforderungen als auch für den Anmeldepfad auf den Vererbungsmechanismus zu verlassen und die Erstellung verschachtelter Authentifizierungspflichten zu vermeiden.
Weitere Informationen finden Sie unter Auswertung und Vererbung der Authentifizierungspflicht, Auswertung des Anmeldepfads und Best Practices.
String path = [...]
Node node = session.getNode(path);
Map<String, String> authRequirements = new ArrayList<String, String>();
while (isSupported(node)) {
if (node.isNodeType("granite:AuthenticationRequired")) {
String loginPath = (node.hasProperty("granite:loginPath") ?
node.getProperty("granite:loginPath").getString() :
"";
authRequirements.put(node.getPath(), loginPath);
node = node.getParent();
}
}
In der folgenden Tabelle finden Sie die gültigen Kombinationen von CUG-Richtlinien und der Authentifizierungspflicht in einer AEM-Instanz, in der aufgrund der Konfiguration beide Module aktiviert sind.
Authentifizierung erforderlich | Anmeldepfad | Eingeschränkter Lesezugriff | Erwarteter Effekt |
---|---|---|---|
Ja | Ja | Ja | Ein bestimmter Benutzer kann die mit der CUG-Richtlinie markierte Unterstruktur nur anzeigen, wenn die effektive Berechtigungsprüfung den Zugriff gewährt. Ein nicht authentifizierter Benutzer wird an die angegebene Anmeldeseite umgeleitet. |
Ja | Nein | Ja | Ein bestimmter Benutzer kann die mit der CUG-Richtlinie markierte Unterstruktur nur anzeigen, wenn die effektive Berechtigungsprüfung den Zugriff gewährt. Ein nicht authentifizierter Benutzer wird an eine übernommene Standardanmeldeseite umgeleitet. |
Ja | Ja | Nein | Ein nicht authentifizierter Benutzer wird zur angegebenen Anmeldeseite weitergeleitet. Ob es erlaubt ist, die mit der Authentifizierungspflicht markierte Baumstruktur anzuzeigen, hängt von den effektiven Berechtigungen der einzelnen Elemente in dem Teilbaum ab. Es ist keine dedizierte CUG vorhanden, die den Lesezugriff einschränkt. |
Ja | Nein | Nein | Ein nicht authentifizierter Benutzer wird an eine übernommene Standardanmeldeseite umgeleitet. Ob es erlaubt ist, die mit der Authentifizierungspflicht markierte Baumstruktur anzuzeigen, hängt von den effektiven Berechtigungen der einzelnen Elemente in dem Teilbaum ab. Es ist keine dedizierte CUG vorhanden, die den Lesezugriff einschränkt. |
Nein | Nein | Ja | Ein bestimmter authentifizierter oder nicht authentifizierter Benutzer kann die mit der CUG-Richtlinie markierte Unterstruktur nur anzeigen, wenn die effektive Berechtigungsprüfung den Zugriff gewährt. Ein nicht authentifizierter Benutzer wird gleich behandelt und nicht zur Anmeldeseite weitergeleitet. |
Die Kombination Authentifizierungspflicht = Ja und Anmeldepfad = Ja wird oben nicht angeführt, da es sich beim Anmeldepfad um eine optionales, mit einer Authentifizierungspflicht verknüpftes Attribut handelt. Das Angeben einer JCR-Eigenschaft mit diesem Namen ohne Hinzufügen des definierten Mixin-Typs hat keine Auswirkungen und wird vom entsprechenden Handler ignoriert.
Diese Abschnitte bieten einen Überblick über die OSGi-Komponenten und die einzelnen Konfigurationsoptionen, die mit der neuen CUG-Implementierung eingeführt wurden.
Eine umfassende Zuordnung der Konfigurationsoptionen zwischen der alten und der neuen Implementierung finden Sie in der Dokumentation zur CUG-Zuordnung .
Die neuen Teile für die Autorisierung gehören zum Bundle Oak CUG Authorization (org.apache.jackrabbit.oak-authorization-cug
), das Teil der Standardinstallation von AEM ist. Das Bundle definiert ein separates Berechtigungsmodell, das als zusätzliche Option für die Verwaltung des Lesezugriffs gedacht ist.
Die Einrichtung der CUG-Autorisierung wird im Abschnitt relevante Apache-Dokumentation. Standardmäßig stellt AEM die CUG-Autorisierung in allen Ausführungsmodi bereit. Die schrittweisen Anweisungen können auch verwendet werden, um die CUG-Autorisierung in Installationen zu deaktivieren, die eine andere Autorisierungseinrichtung erfordern.
Außerdem müssen Sie die Sling Referrer Filter mit allen Hostnamen, die für den Zugriff auf AEM verwendet werden können; z. B. über CDN, Load Balancer und andere.
Wenn der Referrer-Filter nicht konfiguriert ist, treten Fehler wie der folgende auf, wenn ein Benutzer versucht, sich bei einer CUG-Website anzumelden:
31.01.2017 13:49:42.321 *INFO* [qtp1263731568-346] org.apache.sling.security.impl.ReferrerFilter Rejected referrer header for POST request to /libs/granite/core/content/login.html/j_security_check : https://hostname/libs/granite/core/content/login.html?resource=%2Fcontent%2Fgeometrixx%2Fen%2Ftest-site%2Ftest-page.html&$$login$$=%24%24login%24%24&j_reason=unknown&j_reason_code=unknown
Die folgenden beiden OSGi-Komponenten wurden hinzugefügt, um Authentifizierungspflichten zu definieren und dedizierte Anmeldepfade festzulegen:
org.apache.jackrabbit.oak.spi.security.authorization.cug.impl.CugConfiguration
org.apache.jackrabbit.oak.spi.security.authorization.cug.impl.CugExcludeImpl
org.apache.jackrabbit.oak.spi.security.authorization.cug.impl.CugConfiguration
Bezeichnung | Apache Jackrabbit Oak CUG-Konfiguration |
Beschreibung | Autorisierungskonfiguration zum Einrichten und Auswerten von CUG-Berechtigungen. |
Konfigurationseigenschaften |
Siehe auch Konfigurationsoptionen unten. |
Konfigurationsrichtlinie | ConfigurationPolicy.REQUIRE |
Verweise | CugExclude (ReferenceCardinality.OPTIONAL_UNARY) |
org.apache.jackrabbit.oak.spi.security.authorization.cug.impl.CugExcludeImpl
Bezeichnung | Apache Jackrabbit Oak CUG Exclude List |
Beschreibung | Ermöglicht den Ausschluss von Prinzipalen mit den konfigurierten Namen von der CUG-Auswertung. |
Konfigurationseigenschaften |
Siehe auch den Abschnitt Konfigurationsoptionen unten. |
Konfigurationsrichtlinie | ConfigurationPolicy.REQUIRE |
Verweise | nicht vorhanden |
Die wichtigsten Konfigurationsoptionen sind:
cugSupportedPaths
: gibt die Teilbäume an, die CUGs enthalten dürfen. Es ist kein Standardwert festgelegt.cugEnabled
: Konfigurationsoption zur Aktivierung der Berechtigungsprüfung für die vorhandenen CUG-Richtlinien.Die mit dem CUG-Autorisierungsmodul verknüpften verfügbaren Konfigurationsoptionen werden in der Apache Oak-Dokumentation aufgeführt und genauer beschrieben.
Das Ausnehmen einzelner Prinzipale von der CUG-Prüfung wurde aus der vorherigen Implementierung übernommen. Die neue CUG-Autorisierung behandelt dies mit einer dedizierten Schnittstelle namens CugExclude. Apache Jackrabbit Oak 1.4 umfasst eine Standardimplementierung, die einen festen Satz von Prinzipalen sowie eine erweiterte Implementierung umfasst, welche die Konfiguration individueller Prinzipalnamen ermöglicht. Letztere ist in AEM-Veröffentlichungsinstanzen konfiguriert.
Der Standard seit Einführung von AEM 6.3 verhindert, dass die folgenden Prinzipale von CUG-Richtlinien beeinflusst werden:
Weitere Informationen finden Sie in der Tabelle im folgenden Abschnitt Standardkonfiguration seit Einführung von AEM 6.3.
Der Ausschluss der Gruppe "Administratoren"kann in der Systemkonsole im Konfigurationsabschnitt von Apache Jackrabbit Oak CUG Exclude List.
Alternativ ist es möglich, eine benutzerdefinierte Implementierung der CugExclude-Schnittstelle bereitzustellen und bereitzustellen, um den Satz ausgeschlossener Prinzipale bei besonderen Bedürfnissen anzupassen. Weitere Informationen finden Sie in der Dokumentation unter CUG-Pluggabelbarkeit für Details und eine Beispielimplementierung.
Die neuen Teile für die Authentifizierung gehören zum Bundle Adobe Granite Authentication Handler (com.adobe.granite.auth.authhandler
Version 5.6.48). Dieses Bundle ist Teil der Standardinstallation von AEM
Zur Einrichtung des Authentifizierungspflichtersatzes für die veraltete CUG-Unterstützung müssen einige OSGi-Komponenten in einer jeweiligen AEM-Installation vorhanden und aktiv sein. Weitere Informationen finden Sie im Abschnitt Eigenschaften von OSGi-Komponenten unten.
Aufgrund der obligatorischen Konfigurationsoption mit dem RequirementHandler sind die zur Authentifizierung gehörigen Teile nur aktiv, falls das Feature durch Angabe eines Satzes unterstützter Pfade aktiviert wurde. Bei einer Standardinstallation von AEM ist das Feature im Autorenausführungsmodus deaktiviert und für „/content“ im Veröffentlichungsausführungsmodus aktiviert.
Eigenschaften von OSGi-Komponenten
Die folgenden beiden OSGi-Komponenten wurden hinzugefügt, um Authentifizierungspflichten zu definieren und dedizierte Anmeldepfade festzulegen:
com.adobe.granite.auth.requirement.impl.RequirementService
com.adobe.granite.auth.requirement.impl.DefaultRequirementHandler
com.adobe.granite.auth.requirement.impl.RequirementService
Bezeichnung | - |
Beschreibung | Dedizierter OSGi-Dienst für Authentifizierungsanforderungen, der einen Beobachter für Inhaltsänderungen registriert, die sich auf die Authentifizierungspflicht auswirken (über das granite:AuthenticationRequirement Mixin-Typ) und Anmeldepfade mit werden für die LoginSelectorHandler . |
Konfigurationseigenschaften | - |
Konfigurationsrichtlinie | ConfigurationPolicy.OPTIONAL |
Verweise |
|
com.adobe.granite.auth.requirement.impl.DefaultRequirementHandler
Bezeichnung | Adobe Granite-Authentifizierungspflicht und Anmeldungspfad-Handler |
---|---|
Beschreibung | RequirementHandler -Implementierung, die die Authentifizierungsanforderungen für Apache Sling und den entsprechenden Ausschluss für die zugehörigen Anmeldepfade aktualisiert. |
Konfigurationseigenschaften | supportedPaths |
Konfigurationsrichtlinie | ConfigurationPolicy.REQUIRE |
Verweise | nicht vorhanden |
Die Teile der CUG-Umschreibung, die für Authentifizierung relevant sind, umfassen nur eine einzelne Konfigurationsoption, die „Adobe Granite Authentication Requirement and Login Path Handler“ zugehörig ist:
„Authentication Requirement and Login Path Handler“
Eigenschaft | Typ | Standardwert | Beschreibung |
Beschriftung = Unterstützte Pfade Name = 'supportedPaths' |
Satz<string> | - | Pfade, unter denen Authentifizierungsanforderungen von diesem Handler eingehalten werden. Lassen Sie diese Konfiguration deaktiviert, wenn Sie die granite:AuthenticationRequirement Mixin-Typ zu Knoten, ohne dass sie erzwungen werden (z. B. in Autoreninstanzen). Wenn nicht vorhanden, ist die Funktion deaktiviert. |
Neue Installationen von AEM verwenden standardmäßig die neuen Implementierungen für die autorisierungs- und authentifizierungsrelevanten Teile des CUG-Features. Die alte Implementierung „Adobe Granite Closed User Group (CUG) Support“ ist veraltet und wird standardmäßig in allen Installationen von AEM deaktiviert. Stattdessen werden die neuen Implementierungen wie folgt aktiviert:
"Apache Jackrabbit Oak CUG Configuration" | Erklärung |
---|---|
Unterstützte Pfade /content |
Die Zugriffssteuerungsverwaltung für CUGpolicies ist aktiviert. |
CUG-Auswertung aktiviert FALSE | Die Berechtigungsprüfung ist deaktiviert. CUG-Richtlinien sind nicht wirksam. |
Ranking | 200 |
Für Apache Jackrabbit Oak CUG Exclude List und Adobe Granite Authentication Requirement and Login Path Handler ist auf standardmäßigen Autoreninstanzen keine Konfiguration vorhanden.
"Apache Jackrabbit Oak CUG Configuration" | Erklärung |
---|---|
Unterstützte Pfade /content |
Die Zugriffssteuerungsverwaltung für CUG-Richtlinien wird unter den konfigurierten Pfaden aktiviert. |
CUG-Prüfung aktiviert TRUE | Die Berechtigungsprüfung wird unter den konfigurierten Pfaden aktiviert. CUG-Richtlinien werden wirksam Session.save() . |
Ranking | 200 |
"Apache Jackrabbit Oak CUG Exclude List" | Erklärung |
---|---|
Prinzipalnamen-Administratoren | Schließt den Administratorprinzipal aus der CUG-Auswertung aus. |
"Adobe Granite Authentication Requirement and Login Path Handler" | Erklärung |
---|---|
Unterstützte Pfade /content |
Authentifizierungsanforderungen, die im Repository mithilfe des granite:AuthenticationRequired Mixin-Typ wird unten wirksam /content upon Session.save() . Sling Authenticator wird aktualisiert. Wird der Mixin-Typ außerhalb der unterstützten Pfade hinzugefügt, so wird dies ignoriert. |
Diese neue Implementierung kann u. U. vollständig deaktiviert werden, falls eine bestimmte Installation keine CUGs nutzt bzw. eine andere Möglichkeit für Authentifizierung und Autorisierung verwendet.
In der Dokumentation zur CUG-Austauschbarkeit finden Sie Informationen dazu, wie Sie das CUG-Autorisierungsmodell aus der kombinierten Autorisierungseinrichtung entfernen.
Zum Deaktivieren der Unterstützung der Authentifizierungspflicht, die vom Modul granite.auth.authhandler
bereitgestellt wird, muss nur die Konfiguration entfernt werden, die mit Adobe Granite Authentication Requirement and Login Path Handler verknüpft ist.
Beachten Sie jedoch, dass das Entfernen der Konfiguration nicht dazu führt, dass die Registrierung des Mixin-Typs aufgehoben wird, der weiterhin für Knoten gilt, ohne wirksam zu werden.
Die von Apache Jackrabbit definierte API wurde erweitert, um dem neuen Typ von Zugriffssteuerungsrichtlinie zu entsprechen, die vom CUG-Autorisierungsmodell verwendet wird. Seit Version 2.11.0 des jackrabbit-api
-Modul definiert eine neue Schnittstelle namens org.apache.jackrabbit.api.security.authorization.PrincipalSetPolicy
, die sich auf javax.jcr.security.AccessControlPolicy
.
Der Importmechanismus von Apache Jackrabbit FileVault wurde angepasst, um Zugriffssteuerungsrichtlinien vom Typ PrincipalSetPolicy
.
Weitere Informationen finden Sie oben im Abschnitt Apache Jackrabbit FileVault.
Das Replikationsmodul wurde etwas angepasst, um in der Lage zu sein, die CUG-Richtlinien zwischen verschiedenen AEM-Instanzen zu replizieren:
DurboImportConfiguration.isImportAcl()
wird wörtlich interpretiert und betrifft nur die Richtlinien zur Zugriffskontrolle, die implementieren javax.jcr.security.AccessControlList
DurboImportTransformer
berücksichtigt diese Konfiguration nur für echte ACLs
Andere Richtlinien, z. B. vom CUG-Autorisierungsmodell erstellte org.apache.jackrabbit.api.security.authorization.PrincipalSetPolicy
-Instanzen, werden immer repliziert und die Konfigurationsoption DurboImportConfiguration.isImportAcl
() wird ignoriert.
Es gibt eine Einschränkung hinsichtlich der Replikation von CUG-Richtlinien. Wenn eine bestimmte CUG-Richtlinie entfernt wird, ohne den entsprechenden Mixin-Knotentyp zu entfernen rep:CugMixin,
die Entfernung wird bei der Replikation nicht berücksichtigt. Dies wurde korrigiert, indem bei Entfernung einer Richtlinie immer der Mixin-Typ entfernt wird. Die Einschränkung macht sich aber möglicherweise bemerkbar, wenn der Mixin-Typ manuell hinzugefügt wurde.
Der Authentifizierungs-Handler Adobe Granite HTTP Header Authentication Handler im Bundle com.adobe.granite.auth.authhandler
verweist auf die Schnittstelle CugSupport
, die vom selben Modul definiert wird. Sie wird unter bestimmten Bedingungen zur Berechnung des Bereichs verwendet, wobei auf den mit dem Handler konfigurierten Bereich zurückgefallen wird.
Dies wurde angepasst, um den Verweis auf CugSupport
optional zu machen, um die größtmögliche Abwärtskompatibilität zu erreichen, wenn eine Einrichtung entscheidet, die veraltete Implementierung erneut zu aktivieren. Bei Installationen, die die Implementierung verwenden, wird der Bereich nicht mehr aus der CUG-Implementierung extrahiert, sondern der Bereich wird immer wie definiert angezeigt mit Adobe Granite HTTP Header Authentication Handler.
Standardmäßig ist Adobe Granite HTTP Header Authentication Handler nur im Veröffentlichungsausführungsmodus konfiguriert, wobei die Option „Anmeldeseite deaktivieren“ (auth.http.nologin
) aktiviert ist.
Die Konfiguration von CUGs in Verbindung mit LiveCopy wird im Repository durch Hinzufügen eines zusätzlichen Knotens und einer zusätzlichen Eigenschaft wie folgt dargestellt:
/content/we-retail/us/en/blueprint/rep:cugPolicy
/content/we-retail/us/en/LiveCopy@granite:loginPath
Beide Elemente werden unter dem cq:Page
. Mit dem aktuellen Design verarbeitet MSM nur Knoten und Eigenschaften, die sich unter der cq:PageContent
(jcr:content
).
Daher können CUG-Gruppen nicht in Live Copies aus Blueprints bereitgestellt werden. Planen Sie dies ein, wenn Sie eine Live Copy konfigurieren.
Das Ziel dieses Abschnitts besteht darin, einen Überblick über die am CUG-Feature vorgenommenen Änderungen sowie einen Vergleich der alten und der neuen Implementierung zur Verfügung zu stellen. Es werden alle Änderungen aufgeführt, die beeinflussen, wie CUG-Unterstützung konfiguriert wird, und beschrieben, wie und von wem CUGs im Repository-Content verwaltet werden.
Die veraltete OSGi-Komponente Adobe Granite Closed User Group (CUG) Support (com.day.cq.auth.impl.cug.CugSupportImpl
) wurde durch neue Komponenten ersetzt, damit die autorisierungs- und authentifizierungsrelevanten Teile des vorherigen CUG-Features getrennt verwaltet werden können.
Die folgenden Abschnitte beschreiben die Unterschiede zwischen der alten und der neuen Implementierung aus der Implementierungs- und Sicherheitsperspektive. Die neue Implementierung soll dieselbe Funktionalität zur Verfügung stellen, aber es gibt einige dezente Unterschiede, die Sie kennen sollten, wenn Sie das neue CUG-Feature verwenden.
Im Folgenden finden Sie eine Zusammenfassung der wichtigsten Unterschiede hinsichtlich Autorisierung:
Dedizierter Zugriffssteuerungsinhalt für CUGs
In der alten Implementierung wurde das standardmäßige Autorisierungsmodell dazu verwendet, die Zugriffssteuerungslistenrichtlinien auf der Veröffentlichungsinstanz zu manipulieren, wobei bestehende ACEs aufgrund der von der CUG erzwungenen Einrichtung ersetzt wurden. Dies wurde durch die Eingabe regulärer JCR-Resteigenschaften ausgelöst, die auf der Veröffentlichungsinstanz interpretiert wurden.
Bei der neuen Implementierung wird die Zugriffssteuerungseinrichtung des Standardautorisierungsmodells nicht von der Erstellung, Änderung oder Entfernung von CUGs beeinflusst. Stattdessen wurde eine neue Art von Richtlinie mit dem Namen PrincipalSetPolicy
wird als zusätzlicher Zugriffssteuerungsinhalt auf den Zielknoten angewendet. Diese zusätzliche Richtlinie ist ein untergeordnetes Element des Zielknotens und ist ein gleichrangiges Element des Standardrichtlinienknotens, falls dieser vorhanden ist.
Bearbeiten von CUG-Richtlinien in der Zugriffssteuerungsverwaltung
Dieses Abweichen von JCR-Resteigenschaften hin zu einer dedizierten Zugriffssteuerungsrichtlinie hat Auswirkungen auf die Berechtigung, die zum Erstellen oder Ändern des Autorisierungsteils des CUG-Features benötigt wird. Da dies als Änderung beim Inhalt der Zugriffskontrolle betrachtet wird, ist dies erforderlich jcr:readAccessControl
und jcr:modifyAccessControl
-Berechtigungen, um in das Repository geschrieben zu werden. Daher können nur Inhaltsautoren, die zur Änderung der Zugriffssteuerungsinhalte einer Seite berechtigt sind, diese Inhalte einrichten oder ändern. Im Vergleich dazu war in der alten Implementierung die Berechtigung zum Schreiben regulärer JCR-Eigenschaften ausreichend. Dies führt zu einer Berechtigungseskalation.
Durch eine Richtlinie definierter Zielknoten
CUG-Richtlinien sollen am JCR-Knoten erstellt werden und die Leseberechtigung für den Teilbaum einschränken. Hierbei handelt es sich wahrscheinlich um eine AEM-Seite, falls die CUG die gesamte Baumstruktur betreffen soll.
Beachten Sie, dass das Platzieren der CUG-Richtlinie nur im Knoten jcr:content unterhalb einer bestimmten Seite nur den Zugriff auf den Inhalt einer bestimmten Seite einschränkt, jedoch nicht auf gleichrangigen oder untergeordneten Seiten wirkt. Dies kann ein gültiger Anwendungsfall sein. Sie erreichen dies mithilfe eines Repository-Editors, der die Anwendung detaillierter Zugriffssteuerungsinhalte erlaubt. Sie steht jedoch im Gegensatz zur früheren Implementierung, bei der das Platzieren einer cq:cugEnabled -Eigenschaft auf dem Knoten jcr:content intern dem Seitenknoten neu zugeordnet wurde. Diese Zuordnung wird nicht mehr durchgeführt.
Berechtigungsprüfung mit CUG-Richtlinien
Die Umstellung von der alten CUG-Unterstützung auf ein zusätzliches Autorisierungsmodell verändert die Art und Weise, wie wirksame Leseberechtigungen geprüft werden. Wie in der Jackrabbit-Dokumentation beschrieben, wird einem jeweiligen Prinzipal mit der Berechtigung zum Anzeigen des CUGcontent
nur dann Lesezugriff gewährt, wenn die Berechtigungsprüfung aller im Oak-Repository konfigurierten Modelle Lesezugriff gewährt.
Anders ausgedrückt, bei der Auswertung der wirksamen Berechtigungen werden sowohl die CUGPolicy
als auch die Standardzugriffssteuerungseinträge berücksichtigt. Lesezugriff auf den CUG-Inhalt wird nur gewährt, wenn beide Richtlinientypen ihn gewähren. In einer standardmäßigen AEM Veröffentlichungsinstallation, bei der Lesezugriff auf die vollständige /content
-Struktur für alle bestimmt ist, wird die Wirkung der CUG-Richtlinien mit der alten Implementierung übereinstimmen.
Prüfung nach Bedarf
Das CUG-Autorisierungsmodell ermöglicht das individuelle Aktivieren von Zugriffssteuerungsverwaltung und Berechtigungsprüfung:
In der neuen Standardeinrichtung von AEM wird die Prüfung von CUG-Richtlinien nur im Ausführungsmodus „publish“ aktiviert. Zeigen Sie dazu die näheren Informationen zur Standardkonfiguration seit Einführung von AEM 6.3 an. Dies lässt sich durch den Vergleich der wirksamen Richtlinien eines Pfades mit den im Inhalt gespeicherten Richtlinien verifizieren. Wirksame Richtlinien werden nur angezeigt, wenn die Berechtigungsprüfung für CUGs aktiviert ist.
Wie oben erläutert, werden die CUG-Zugriffssteuerungsrichtlinien jetzt immer im Inhalt gespeichert. Eine Bewertung der effektiven Berechtigungen, die sich aus diesen Richtlinien ergeben, wird jedoch nur dann erzwungen, wenn CUG-Prüfung aktiviert ist in der Systemkonsole bei Apache Jackrabbit Oak aktiviert CUG-Konfiguration. Standardmäßig ist sie nur mit dem Ausführungsmodus 'publish' aktiviert.
Im Folgenden werden die Unterschiede im Hinblick auf die Authentifizierung beschrieben.
In der bisherigen Implementierung wurden die Autorisierungs- und Authentifizierungsaspekte einer CUG durch eine einzelne JCR-Eigenschaft ausgelöst ( cq:cugEnabled
). Insoweit die Authentifizierung betroffen ist, hat dies zu einer aktualisierten Liste von Authentifizierungspflichten geführt, die in der Apache Sling Authenticator-Implementierung gespeichert werden. Bei der neuen Implementierung wird dasselbe Ergebnis erzielt, indem der Zielknoten mit einem dedizierten Mixin-Typ (granite:AuthenticationRequired
) markiert wird.
Der Mixin-Typ definiert eine einzelne optionale Eigenschaft mit dem Namen granite:loginPath
, was im Wesentlichen der cq:cugLoginPage
-Eigenschaft. Im Gegensatz zur früheren Implementierung wird die Anmeldepfadeigenschaft nur berücksichtigt, wenn ihr deklarierender Knotentyp im Mixin-Typ aufgeführt wird. Wird eine Eigenschaft mit diesem Namen hinzugefügt, ohne den Mixin-Typ festzulegen, hat dies keine Auswirkungen und an den Authenticator werden keine neue Pflicht und keine Ausnahme für den Anmeldepfad gemeldet.
Zum Hinzufügen oder Entfernen eines Mixin-Typs ist die Berechtigung jcr:nodeTypeManagement
erforderlich. In der vorherigen Implementierung wird die jcr:modifyProperties
-Berechtigung zum Bearbeiten der Resteigenschaft verwendet.
Was granite:loginPath
angeht, wird dieselbe Berechtigung benötigt, um die Eigenschaft hinzuzufügen, zu ändern oder zu entfernen.
Authentifizierungspflichten sollen am JCR-Knoten erstellt werden und die Authentifizierungspflicht für den Teilbaum definieren. Hierbei handelt es sich wahrscheinlich um eine AEM-Seite, falls die CUG die gesamte Baumstruktur betreffen soll. Die Benutzeroberfläche für die neue Implementierung fügt den Mixin-Typ „auth-requirement“ konsequent dem Seitenknoten hinzu.
Wenn Sie die CUG-Richtlinie nur auf den Knoten jcr:content platzieren, der sich unter einer bestimmten Seite befindet, wird der Zugriff auf den Inhalt nur eingeschränkt, jedoch nicht auf den Seitenknoten selbst oder auf untergeordneten Seiten.
Dies kann ein gültiges Szenario sein. Sie erreichen dies mithilfe eines Repository-Editors, der die Platzierung des Mixin-Typs an allen Knoten ermöglicht. Das Verhalten steht jedoch im Gegensatz zur vorherigen Implementierung, bei der das Platzieren einer Eigenschaft cq:cugEnabled oder cq:cugLoginPage auf dem Knoten jcr:content intern auf den Seitenknoten neu zugeordnet wurde. Diese Zuordnung wird nicht mehr durchgeführt.
Beide granite:AuthenticationRequired
Mixin-Typ und die Eigenschaft granite:loginPath werden nur innerhalb des durch den Satz von Unterstützte Pfade -Konfigurationsoption, die bei der Adobe Granite-Authentifizierungspflicht und Anmeldungspfad-Handler. Wenn keine Pfade festgelegt werden, wird das Authentifizierungspflicht-Feature komplett deaktiviert. In diesem Fall werden der Mixin-Typ und die Eigenschaft wirksam, wenn sie hinzugefügt oder auf einen bestimmten JCR-Knoten festgelegt werden.
Das folgende Dokument bietet eine umfassende Zuordnung von OSGi-Diensten, Konfigurationen und Repository-Inhalten zwischen der alten und der neuen Implementierung.
CUG-Zuordnung seit Einführung von AEM 6.3
Die alte CUG-Unterstützungsimplementierung ist veraltet und wird aus zukünftigen Versionen entfernt. Es wird empfohlen, bei der Aktualisierung von Versionen vor AEM 6.3 auf die neuen Implementierungen umzustellen.
Bei aktualisierten AEM-Installationen darf nur eine CUG-Implementierung aktiviert sein. Die Kombination der neuen und der veralteten CUG-Unterstützung wurde nicht getestet und verursacht wahrscheinlich ein unerwartetes Verhalten:
Adobe stellt ein Tool für die Migration zur neuen CUG-Implementierung zur Verfügung. Sie müssen die folgenden Schritte ausführen, um es zu verwenden:
https://<serveraddress>:<serverport>/system/console/cug-migration
, um auf das Tool zuzugreifen.Wenn Probleme auftreten, können Sie eine bestimmte Protokollfunktion unter DEBUG Ebene auf com.day.cq.auth.impl.cug
, um die Ausgabe des Migrationstools zu erhalten. Weitere Informationen dazu finden Sie unter Protokollierung.