Implementazione del nuovo gruppo utenti personalizzato

Un CUG, come è noto nel contesto dell'AEM, consiste nei seguenti passaggi:

  • Limita l'accesso in lettura alla struttura che deve essere protetta e consente la lettura solo per le entità principali elencate con una determinata istanza del gruppo utenti chiusi o escluse completamente dalla valutazione del gruppo utenti chiusi. Elemento denominato authorization.
  • Applica l’autenticazione a una determinata struttura e, facoltativamente, specifica una pagina di accesso dedicata per la struttura da escludere. Elemento authentication.

La nuova implementazione è stata progettata per tracciare una linea tra gli elementi di autenticazione e di autorizzazione. A partire da AEM 6.3, è possibile limitare l’accesso in lettura senza aggiungere esplicitamente un requisito di autenticazione. Ad esempio, se una determinata istanza richiede completamente l’autenticazione oppure una determinata struttura già risiede in una sottostruttura che richiede già l’autenticazione.

Allo stesso modo, una determinata struttura può essere contrassegnata con un requisito di autenticazione senza modificare la configurazione delle autorizzazioni effettiva. Le combinazioni e i risultati sono elencati nella sezione Combinazione di criteri CUG e requisiti di autenticazione.

Panoramica

Autorizzazione: limitazione dell’accesso in lettura

La funzione chiave di un gruppo utenti chiusi limita l’accesso in lettura a una determinata struttura nell’archivio dei contenuti per tutti gli utenti eccetto le entità selezionate. Invece di manipolare istantaneamente il contenuto di controllo di accesso predefinito, la nuova implementazione adotta un approccio diverso definendo un tipo dedicato di criteri di controllo di accesso che rappresenta un CUG.

Criterio di controllo accesso per CUG

Questo nuovo tipo di polizza presenta le seguenti caratteristiche:

  • Criteri di controllo degli accessi di tipo org.apache.jackrabbit.api.security.authorization.PrincipalSetPolicy (definito dall’API Apache Jackrabbit);
  • PrincipalSetPolicy concede privilegi a un insieme modificabile di entità;
  • I privilegi concessi e l’ambito del criterio sono un dettaglio di implementazione.

L’implementazione di PrincipalSetPolicy utilizzata per rappresentare i gruppi di utenti chiusi (CUG) definisce inoltre quanto segue:

  • I criteri CUG concedono l’accesso in lettura solo agli elementi JCR regolari (ad esempio, il contenuto di controllo dell’accesso è escluso);
  • L’ambito è definito dal nodo con controllo di accesso che detiene il criterio CUG;
  • I criteri CUG possono essere nidificati, un CUG nidificato avvia un nuovo CUG senza ereditare il set principale del CUG "padre";
  • Se la valutazione è abilitata, l'effetto del criterio viene ereditato dall'intera sottostruttura fino al successivo CUG nidificato.

Questi criteri CUG vengono distribuiti a un’istanza AEM tramite un modulo di autorizzazione separato denominato oak-authorization-cug. Questo modulo include la propria gestione del controllo di accesso e la valutazione delle autorizzazioni. In altre parole, la configurazione AEM predefinita prevede una configurazione dell’archivio dei contenuti di Oak che combina più meccanismi di autorizzazione. Per ulteriori informazioni, consulta questa pagina nella documentazione di Apache Oak.

In questa configurazione composita, un nuovo CUG non sostituisce il contenuto di controllo di accesso esistente associato al nodo di destinazione. Si tratta invece di un supplemento che può essere rimosso in seguito senza influire sul controllo di accesso originale, che per impostazione predefinita in AEM sarebbe un elenco di controllo di accesso.

A differenza della precedente implementazione, i nuovi criteri CUG vengono sempre riconosciuti e trattati come contenuti di controllo dell’accesso. Ciò implica che vengono create e modificate utilizzando l’API di gestione del controllo di accesso JCR. Per ulteriori informazioni, consulta la sezione Gestione dei criteri CUG.

Valutazione delle autorizzazioni dei criteri CUG

Oltre a una gestione dedicata del controllo degli accessi per i gruppi di utenti chiusi (CUG), il nuovo modello di autorizzazione consente di abilitare in modo condizionale la valutazione delle autorizzazioni per i relativi criteri. Questo consente di impostare i criteri per i gruppi utenti chiusi (CUG) in un ambiente di staging e di valutare solo le autorizzazioni valide una volta replicate nell’ambiente di produzione.

La valutazione delle autorizzazioni per i criteri CUG e l’interazione con il modello di autorizzazione predefinito o aggiuntivo segue il modello progettato per più meccanismi di autorizzazione in Apache Jackrabbit Oak. In altre parole, un determinato set di autorizzazioni viene concesso se e solo se tutti i modelli concedono l’accesso. Per ulteriori dettagli, consulta la documentazione di Jackrabbit Oak.

Le seguenti caratteristiche si applicano alla valutazione delle autorizzazioni associata al modello di autorizzazione progettato per gestire e valutare i criteri CUG:

  • Gestisce solo le autorizzazioni di lettura per i nodi e le proprietà normali, ma non il contenuto del controllo di accesso in lettura
  • Non gestisce le autorizzazioni di scrittura né i tipi di autorizzazioni necessari per la modifica del contenuto JCR protetto (tra cui, controllo degli accessi, informazioni sul tipo di nodo, controllo delle versioni, blocco o gestione degli utenti). Queste autorizzazioni non sono influenzate da un criterio per gruppi utenti chiusi (CUG) e non verranno valutate dal modello di autorizzazione associato. La concessione di queste autorizzazioni dipende dagli altri modelli configurati nella configurazione della sicurezza.

L’effetto di un singolo criterio CUG sulla valutazione delle autorizzazioni può essere riassunto come segue:

  • L’accesso in lettura è negato a tutti, ad eccezione dei soggetti che contengono i principali o i principali esclusi elencati nella policy;
  • La politica ha effetto sul nodo controllato in cui si trova la politica e le relative proprietà;
  • L’effetto viene ereditato anche nella gerarchia, ovvero nella struttura degli elementi definita dal nodo controllato dagli accessi;
  • Tuttavia, non influisce né sui fratelli e le sorelle né sugli antenati del nodo controllato dagli accessi;
  • L’ereditarietà di un determinato CUG si interrompe in corrispondenza di un CUG nidificato.

Best practice

Le seguenti best practice devono tenere conto della definizione di accesso in lettura limitato tramite CUG:

  • Decidere in modo consapevole se la necessità di un CUG riguarda la limitazione dell'accesso in lettura o un requisito di autenticazione. Se è quest’ultimo, o se sono necessari entrambi, consulta la sezione sulle best practice per i dettagli relativi al requisito di autenticazione

  • Crea un modello di minaccia per i dati o i contenuti che devono essere protetti per identificare i limiti della minaccia e ottenere un quadro chiaro della sensibilità dei dati e dei ruoli associati all’accesso autorizzato

  • Modellare il contenuto dell’archivio e i gruppi di utenti chiusi (CUG) tenendo presenti gli aspetti generali relativi alle autorizzazioni e le best practice:

    • Ricorda che l’autorizzazione di lettura viene concessa solo se un determinato CUG e la valutazione di altri moduli distribuiti nella concessione dell’impostazione consentono a un determinato soggetto di leggere un determinato elemento dell’archivio
    • Evita la creazione di CUG ridondanti in cui l’accesso in lettura è già limitato da altri moduli di autorizzazione
    • L’eccessiva necessità di CUG nidificati potrebbe potenzialmente evidenziare problemi nella progettazione del contenuto
    • Un’eccessiva necessità di gruppi di utenti chiusi (ad esempio, su ogni pagina) può indicare la necessità di un modello di autorizzazione personalizzato potenzialmente più adatto alle esigenze di sicurezza specifiche dell’applicazione e del contenuto a portata di mano.
  • Limita i percorsi supportati per i criteri CUG ad alcune strutture nell’archivio per ottimizzare le prestazioni. Ad esempio, consenti solo i CUG sotto il nodo /content come valore predefinito a partire da AEM 6.3.

  • I criteri CUG sono progettati per consentire l'accesso in lettura a un piccolo insieme di entità principali. La necessità di un numero elevato di utenti/gruppi/ruoli può evidenziare problemi nel contenuto o nella progettazione dell’applicazione e dovrebbe essere riconsiderata.

Autenticazione: definizione del requisito di autenticazione

Le parti relative all’autenticazione della funzione del gruppo utenti chiusi (CUG) consentono di contrassegnare gli alberi che richiedono l’autenticazione e, facoltativamente, di specificare una pagina di accesso dedicata. In conformità alla versione precedente, la nuova implementazione consente di contrassegnare gli alberi che richiedono l’autenticazione nell’archivio dei contenuti. Consente inoltre la sincronizzazione in modo condizionale con Sling org.apache.sling.api.auth.Authenticator responsabile dell'applicazione definitiva del requisito e del reindirizzamento a una risorsa di accesso.

Questi requisiti vengono registrati con Authenticator da un servizio OSGi che fornisce la proprietà di registrazione sling.auth.requirements. Queste proprietà vengono quindi utilizzate per estendere dinamicamente i requisiti di autenticazione. Per ulteriori dettagli, consulta la documentazione di Sling.

Definizione del requisito di autenticazione con un tipo mixin dedicato

Per motivi di sicurezza, la nuova implementazione sostituisce l'utilizzo di una proprietà JCR residua con un tipo mixin dedicato denominato granite:AuthenticationRequired, che definisce una singola proprietà opzionale di tipo STRING per il percorso di accesso granite:loginPath. Solo le modifiche al contenuto relative a questo tipo di mixin determinano un aggiornamento dei requisiti registrati con Apache Sling Authenticator. Le modifiche vengono tracciate in caso di modifiche temporanee persistenti e richiedono quindi una chiamata javax.jcr.Session.save() per diventare effettiva.

Lo stesso vale per la proprietà granite:loginPath. Viene rispettato solo se è definito dal tipo mixin relativo al requisito di autenticazione. L’aggiunta di una proprietà residua con questo stesso nome in un nodo JCR non strutturato non mostra l’effetto desiderato e la proprietà viene ignorata dal gestore responsabile dell’aggiornamento della registrazione OSGi.

NOTE
L'impostazione della proprietà del percorso di accesso è facoltativa e necessaria solo se la struttura che richiede l'autenticazione non può tornare alla pagina di accesso predefinita o altrimenti ereditata. Consulta la Valutazione del percorso di accesso di seguito.

Registrazione del requisito di autenticazione e del percorso di accesso con l’autenticatore Sling

Poiché si prevede che questo tipo di requisito di autenticazione sia limitato a determinate modalità di esecuzione e a un piccolo sottoinsieme di strutture all’interno dell’archivio dei contenuti, il tracciamento del tipo mixin dei requisiti e delle proprietà del percorso di accesso è condizionale. ed è associata a una configurazione corrispondente che definisce i percorsi supportati (vedi Opzioni di configurazione di seguito). Pertanto, solo le modifiche all’interno dell’ambito di questi percorsi supportati attivano un aggiornamento della registrazione OSGi, altrove vengono ignorati sia il tipo mixin che la proprietà.

La configurazione AEM predefinita ora utilizza questa configurazione consentendo di impostare il mixin in modalità di esecuzione dell’autore, ma solo per renderla effettiva al momento della replica nell’istanza di pubblicazione. Per informazioni dettagliate su come Sling applica il requisito di autenticazione, consulta la documentazione Sling Authentication - Framework.

L'aggiunta del tipo mixin granite:AuthenticationRequired nei percorsi configurati supportati causa l'aggiornamento della registrazione OSGi del gestore responsabile contenente una nuova voce aggiuntiva con la proprietà sling.auth.requirements. Se un determinato requisito di autenticazione specifica la proprietà granite:loginPath facoltativa, il valore viene registrato anche con l'autenticatore con il prefisso '-' da escludere dal requisito di autenticazione.

Valutazione ed ereditarietà del requisito di autenticazione

I requisiti di autenticazione di Apache Sling vengono ereditati tramite la gerarchia di pagine o nodi. I dettagli dell’ereditarietà e la valutazione dei requisiti di autenticazione, come ordine e precedenza, sono considerati un dettaglio di implementazione e non saranno documentati in questo articolo.

Valutazione del percorso di accesso

La valutazione del percorso di accesso e del reindirizzamento alla risorsa corrispondente al momento dell'autenticazione è un dettaglio di implementazione dell'Adobe Granite Login Selector Authentication Handler ( com.day.cq.auth.impl.LoginSelectorHandler), un Apache Sling AuthenticationHandler configurato con AEM per impostazione predefinita.

Quando si chiama AuthenticationHandler.requestCredentials, il gestore tenta di determinare la pagina di accesso di mapping a cui l'utente viene reindirizzato. Ciò include i seguenti passaggi:

  • distinguere tra password scaduta e necessità di accesso regolare come motivo del reindirizzamento;

  • Se l’accesso è regolare, verifica se è possibile ottenere un percorso di accesso nell’ordine seguente:

    • dal LoginPathProvider implementato dal nuovo com.adobe.granite.auth.requirement.impl.RequirementService,
    • dalla precedente implementazione obsoleta di CUG,
    • dalle mappature pagina di accesso, come definite con LoginSelectorHandler,
    • e infine, tornare alla pagina di accesso predefinita, come definita con LoginSelectorHandler.
  • Quando si ottiene un percorso di accesso valido tramite le chiamate elencate sopra, la richiesta dell’utente viene reindirizzata a tale pagina.

La destinazione di questa documentazione è la valutazione del percorso di accesso esposto dall'interfaccia interna di LoginPathProvider. L’implementazione spedita da AEM 6.3 si comporta come segue:

  • La registrazione dei percorsi di accesso dipende dalla distinzione tra password scaduta e necessità di accesso regolare come motivo del reindirizzamento

  • Se l’accesso è regolare, verifica se è possibile ottenere un percorso di accesso nell’ordine seguente:

    • da LoginPathProvider come implementato dal nuovo com.adobe.granite.auth.requirement.impl.RequirementService,
    • dalla precedente implementazione obsoleta di CUG,
    • dalle mappature pagina di accesso definite con LoginSelectorHandler,
    • e infine tornare alla pagina di accesso predefinita come definita con LoginSelectorHandler.
  • Quando si ottiene un percorso di accesso valido tramite le chiamate elencate sopra, la richiesta dell’utente viene reindirizzata a tale pagina.

L'implementazione di LoginPathProvider da parte del nuovo supporto dei requisiti di autenticazione in Granite espone i percorsi di accesso come definiti dalle proprietà di granite:loginPath, che a loro volta sono definiti dal tipo mixin come descritto in precedenza. La mappatura del percorso della risorsa contenente il percorso di accesso e il valore della proprietà stessa vengono conservati in memoria e valutati per trovare un percorso di accesso appropriato per altri nodi nella gerarchia.

NOTE
La valutazione viene eseguita solo per le richieste associate alle risorse che si trovano in nei percorsi supportati configurati. Per qualsiasi altra richiesta verranno valutati i modi alternativi per determinare il percorso di accesso.

Best practice

Nel definire i requisiti di autenticazione è necessario tenere conto delle seguenti best practice:

  • Evita di nidificare i requisiti di autenticazione: il posizionamento di un singolo marcatore di requisito di autenticazione all’inizio di una struttura deve essere sufficiente ed essere ereditato dall’intera sottostruttura definita dal nodo di destinazione. Requisiti di autenticazione aggiuntivi all’interno di tale struttura devono essere considerati ridondanti e possono causare problemi di prestazioni durante la valutazione dei requisiti di autenticazione in Apache Sling. Con la separazione delle aree CUG relative all'autorizzazione e all'autenticazione, è possibile limitare l'accesso in lettura per CUG o altri tipi di criteri applicando l'autenticazione per l'intera struttura.

  • Contenuto dell’archivio del modello tale che i requisiti di autenticazione si applichino all’intera struttura senza dover escludere nuovamente le sottostrutture nidificate dai requisiti.

  • Per evitare di specificare e quindi registrare percorsi di accesso ridondanti:

    • affidarsi all’ereditarietà ed evitare di definire percorsi di accesso nidificati,
    • non impostare il percorso di accesso facoltativo su un valore corrispondente al valore predefinito o ereditato,
    • gli sviluppatori di applicazioni devono identificare i percorsi di accesso da configurare nelle configurazioni dei percorsi di accesso globali (sia predefiniti che mappati) associate a LoginSelectorHandler.