Autenticazione SAML 2.0 saml-2-0-authentication
Scopri come configurare e autenticare gli utenti finali (non AEM gli autori) in un IDP compatibile con SAML 2.0 di tua scelta.
Quale SAML per AEM come Cloud Service?
L'integrazione SAML 2.0 con AEM Publish (o Anteprima) consente agli utenti finali di un'esperienza web basata su AEM di autenticarsi presso un IDP (Identity Provider) non Adobe Systems e di accesso AEM come utente nominativo e autorizzato.
Il flusso tipico di un’integrazione SAML di pubblicazione AEM è il seguente:
-
L’utente invia una richiesta ad AEM Publish, che indica che è necessaria l’autenticazione.
- L’utente richiede una risorsa protetta da CUG/ACL.
- L’utente richiede una risorsa soggetta a un requisito di autenticazione.
- L'utente segue un collegamento all'endpoint di accesso di AEM (ad esempio
/system/sling/login) che richiede esplicitamente l'azione di accesso.
-
AEM invia una AuthnRequest all’IDP, richiedendo a quest’ultimo di avviare il processo di autenticazione.
-
L'utente si autentica in IDP.
- L'IDP richiede all'utente le credenziali.
- L'utente è già autenticato con l'IDP e non deve fornire ulteriori credenziali.
-
IDP genera un'asserzione SAML contenente i dati dell'utente e la firma utilizzando il certificato privato dell'IDP.
-
IDP invia l’asserzione SAML tramite HTTP POST, tramite il browser web dell’utente (RESPECTIVE_PROTECTED_PATH/saml_login), ad AEM Publish.
-
AEM Publish riceve l’asserzione SAML e ne convalida l’integrità e l’autenticità utilizzando il certificato pubblico IDP.
-
AEM Publish gestisce il record utente di AEM in base alla configurazione OSGi SAML 2.0 e al contenuto dell’asserzione SAML.
- Crea utente
- Sincronizza gli attributi utente
- Aggiorna l'iscrizione al gruppo utenti di AEM
-
AEM Publish imposta il cookie AEM
login-tokennella risposta HTTP, utilizzato per autenticare le richieste successive in AEM Publish. -
AEM Publish reindirizza l'utente all'URL in AEM Publish come specificato dal cookie
saml_request_path.
Procedura dettagliata della configurazione
Questo video illustra come configurare l’integrazione SAML 2.0 con il servizio AEM as a Cloud Service Publish e utilizzare Okta come IDP.
Prerequisiti
Per configurare l’autenticazione SAML 2.0 sono necessari i seguenti elementi:
- Deployment Manager accesso a Cloud Manager
- AEM amministratore accesso ad AEM come ambiente Cloud Service
- L'amministratore accesso all'IDP
- Facoltativamente, accesso a una coppia di chiavi pubblica/privata utilizzata per crittografare i payload SAML
- AEM Sites pagine (o strutture ad albero), pubblicate in Publish AEM e protette da gruppi di utenti chiusi (CUG)
SAML 2.0 è supportato solo per autenticare gli usi per AEM Publish o Anteprima. Per gestire l'autenticazione di AEM Autore che utilizza e IDP, integrare l'IDP con Adobe Systems IMS.
Installare il certificato pubblico IDP nel AEM
Il certificato pubblico dell'IDP viene aggiunto all'archivio attendibilità globale dell'AEM e utilizzato per convalidare che l'asserzione SAML inviata dall'IDP è valida.
- L'utente esegue l'autenticazione all'IDP.
- IDP genera un'asserzione SAML contenente i dati del utente.
- IDP firma l'asserzione SAML utilizzando il certificato privato dell'IDP.
- IDP avvia un POST HTTP lato client per AEM'endpoint SAML del Publish (
.../saml_login) che include l'asserzione SAML firmata. - AEM Publish riceve il POST HTTP contenente l'asserzione SAML firmata, può convalidare la firma utilizzando il certificato pubblico IDP.
-
Ottenere il file di certificato pubblico dall'IDP. Questo certificato AEM consente di convalidare l'asserzione SAML fornita all'AEM dall'IDP.
Il certificato è in formato PEM e deve essere simile a:
code language-none -----BEGIN CERTIFICATE----- MIIC4jCBAcoCCQC33wnybT5QZDANBgkqhkiG9w0BAQsFADAyMQswCQYDVQQGEwJV ... m0eo2USlSRTVl7QHRTuiuSThHpLKQQ== -----END CERTIFICATE----- -
Accedi all AEM Autore come amministratore AEM.
-
Passare a Strumenti > Security > Trust Store.
-
Crea o apri il Global Trust Store. Se crei un Global Trust Store, store il password un posto sicuro.
-
Espandere Aggiungi certificato da file CER.
-
Seleziona File certificati e carica il file del certificato fornito dall'IDP.
-
Lascia vuoto Map Certificate to User .
-
Seleziona Invia.
-
Il certificato appena aggiunto viene visualizzato sopra la sezione Aggiungi certificato da file CRT.
-
Prendi nota dell'alias ____, poiché questo valore viene utilizzato nella configurazione OSGi di SAML 2.0 Authentication Handler.
-
Seleziona Salva e chiudi.
L'archivio attendibilità globale è configurato con il certificato pubblico dell'IDP in Autore AEM, ma poiché SAML viene utilizzato solo su AEM Publish, l'archivio attendibilità globale deve essere replicato in AEM Publish affinché il certificato pubblico IDP sia accessibile lì.
-
Passare a Strumenti > Deployment > Packages.
-
Crea un pacchetto
- Nome pacchetto:
Global Trust Store - Versione:
1.0.0 - Gruppo:
com.your.company
- Nome pacchetto:
-
Modifica il nuovo pacchetto Archivio attendibilità globale.
-
Seleziona la scheda Filtri e aggiungi un filtro per il percorso
/etc/truststoreprincipale. -
Seleziona Fine e quindi Salva.
-
Selezionare il pulsante Genera per il pacchetto Archivio attendibilità globale.
-
Una volta generato, selezionare Altro > Replica per attivare il nodo dell'archivio fonti attendibili globale (
/etc/truststore) in AEM Publish.
Crea keystore del servizio di autenticazione authentication-service-keystore
È necessario creare un keystore per il servizio di autenticazione quando la proprietà di configurazione OSGi del gestore di autenticazione handleLogoutSAML 2.0 è impostata su true o quando è richiesta la firma AuthnRequest/la crittografia dell'asserzione SAML
-
Accedi ad AEM Author come amministratore di AEM per caricare la chiave privata.
-
Passa a Strumenti > Protezione > Utenti, seleziona l'utente authentication-service e seleziona Proprietà dalla barra delle azioni superiore.
-
Selezionare la scheda Registro chiavi.
-
Crea o apri il keystore. Se crei un keystore, proteggi la password.
- Un keystore pubblico/privato è installato in questo keystore solo se è richiesta la firma AuthnRequest/la crittografia dell'asserzione SAML.
- Se questa integrazione SAML supporta la disconnessione ma non l'asserzione di firma AuthnRequest/SAML, è sufficiente un keystore vuoto.
-
Seleziona Salva e chiudi.
-
Crea un pacchetto contenente l'utente authentication-service aggiornato.
Utilizza la seguente soluzione alternativa temporanea utilizzando i pacchetti :
-
Passa a Strumenti > Distribuzione > Pacchetti.
-
Creare un pacchetto
- Nome pacchetto:
Authentication Service - Versione:
1.0.0 - Gruppo:
com.your.company
- Nome pacchetto:
-
Modifica il nuovo pacchetto dell'archivio chiavi del servizio Authentication.
-
Seleziona la scheda Filtri e aggiungi un filtro per il percorso
/home/users/system/cq:services/internal/security/<AUTHENTICATION SERVICE UUID>/keystoreprincipale.- È
<AUTHENTICATION SERVICE UUID>possibile trovarlo accedendo a Strumenti > Security > Users e selezionando authentication-service utente. L'UUID è l'ultima parte del URL.
- È
-
Selezionare Fine , quindi Salva.
-
Selezionare il pulsante di compilazione per il pacchetto dell'archivio chiavi del servizio Authentication.
-
Una volta generato, seleziona Altro > Replica per attivare l'archivio chiavi del servizio di autenticazione in AEM Publish.
-
Installare una coppia di chiavi pubblica/privata di AEM install-aem-public-private-key-pair
L'installazione della coppia di chiavi pubblica/privata di AEM è facoltativa
AEM Publish può essere configurato per firmare AuthnRequests (in IDP) e crittografare le asserzioni SAML (in AEM). Ciò si ottiene fornendo una chiave privata per AEM Publish e la chiave pubblica corrispondente all'IDP.
L'AuthnRequest (l'richiesta all'IDP da AEM Publish che avvia il processo di login) può essere firmato da AEM Publish. A tale scopo, AEM Publish firmi AuthnRequest utilizzando la chiave privata, che l'IDP convalidi la firma utilizzando la chiave pubblica. Ciò garantisce all'IDP che AuthnRequest è stato avviato e richiesto da AEM Publish e non da una terza parte malintenzionata.
- L'utente effettua una richiesta HTTP a AEM Publish che si traduce in un'autenticazione SAML richiesta all'IDP.
- AEM Publish genera il richiesta SAML da inviare all'IDP.
- AEM Publish firma il richiesta SAML utilizzando la chiave privata di AEM.
- AEM Publish avvia AuthnRequest, un reindirizzare HTTP lato client all'IDP che contiene il richiesta SAML firmato.
- IDP riceve AuthnRequest e convalida la firma utilizzando la chiave pubblica di AEM, garantendo AEM Publish avviato AuthnRequest.
- AEM Publish convalida quindi l'integrità e l'autenticità dell'asserzione SAML decrittografata utilizzando il certificato pubblico IDP.
Tutte le comunicazioni HTTP tra IDP e AEM Publish devono avvenire tramite HTTPS e quindi sicure per impostazione predefinita. Tuttavia, se necessario, le asserzioni SAML possono essere crittografate nel caso in cui sia richiesta una maggiore riservatezza oltre a quella fornita da HTTPS. A tale scopo, l'IDP crittografa i dati dell'asserzione SAML utilizzando la chiave privata e AEM Publish decrittografa l'asserzione SAML utilizzando la chiave privata.
- L'utente esegue l'autenticazione all'IDP.
- IDP genera un'asserzione SAML contenente i dati dell'utente e la firma utilizzando il certificato privato dell'IDP.
- IDP crittografa quindi l'asserzione SAML con la chiave pubblica di AEM, che richiede la decrittografia della AEM chiave privata.
- L'asserzione SAML crittografata viene inviata, tramite l'browser web del utente a AEM Publish.
- AEM Publish riceve l'asserzione SAML e la decrittografa utilizzando la chiave privata del AEM.
- L'IDP richiede utente di eseguire l'autenticazione.
Sia la firma AuthnRequest che la crittografia delle asserzioni SAML sono facoltative, tuttavia sono entrambe abilitate, utilizzando la proprietà di configurazione OSGi del gestore di useEncryptionautenticazione SAML 2.0, il che significa che entrambe o nessuna delle due può essere utilizzata.
-
Ottenere la chiave pubblica, la chiave privata (PKCS#8 in formato DER) e il file della catena di certificati (potrebbe essere la chiave pubblica) utilizzati per firmare AuthnRequest e crittografare l'asserzione SAML. Le chiavi vengono in genere fornite dai team di sicurezza dell'organizzazione IT.
- Una coppia di chiavi autofirmata può essere generata usando openssl:
code language-none $ openssl req -x509 -sha256 -days 365 -newkey rsa:4096 -keyout aem-private.key -out aem-public.crt # Provide a password (keep in safe place), and other requested certificate information # Convert the keys to AEM's required format $ openssl rsa -in aem-private.key -outform der -out aem-private.der $ openssl pkcs8 -topk8 -inform der -nocrypt -in aem-private.der -outform der -out aem-private-pkcs8.der -
Carica la chiave pubblica nell'IDP.
- Utilizzando il
opensslmetodo indicato in precedenza, la chiave pubblica è ilaem-public.crtfile.
- Utilizzando il
-
Effettua l'accesso all AEM Autore come amministratore AEM per caricare la chiave privata.
-
Passare a Strumenti > Security > Trust Store, selezionare utente del servizio di autenticazione, quindi selezionare Proprietà dalla barra delle azioni superiore.
-
Passare a Strumenti > Security > Users, selezionare utente del servizio di autenticazione, quindi selezionare Proprietà dalla barra delle azioni superiore.
-
Selezionate l'scheda Registro chiavi .
-
Crea o apri il keystore. Se crei un keystore, proteggi la password.
-
Seleziona Aggiungi chiave privata dal file DER e aggiungi la chiave privata e il file della catena ad AEM:
- Alias: fornire un nome significativo, spesso il nome dell'IDP.
- File di chiave privata: carica il file di chiave privata (PKCS#8 in formato DER).
- Utilizzando il metodo
openssl, si tratta del fileaem-private-pkcs8.der
- Utilizzando il metodo
- Selezionare il file della catena di certificati: caricare il file della catena associato (potrebbe essere la chiave pubblica).
- Utilizzando il metodo
openssl, si tratta del fileaem-public.crt
- Utilizzando il metodo
- Seleziona Invia
-
Il certificato appena aggiunto viene visualizzato sopra la sezione Aggiungi certificato da file CRT.
- Prendi nota dell'alias ____ utilizzato nella configurazione OSGi dell'handler di autenticazione SAML 2.0
-
Seleziona Salva e chiudi.
-
Crea un pacchetto contenente la utente aggiornata del servizio di autenticazione.
Use la seguente soluzione temporanea utilizzando i pacchetti :
-
Passare a Strumenti > Deployment > Packages.
-
Crea un pacchetto
- Nome pacchetto:
Authentication Service - Versione:
1.0.0 - Gruppo:
com.your.company
- Nome pacchetto:
-
Modifica il nuovo pacchetto Archivio chiavi del servizio di autenticazione.
-
Selezionare la scheda Filtri e aggiungere un filtro per il percorso radice
/home/users/system/cq:services/internal/security/<AUTHENTICATION SERVICE UUID>/keystore.- È
<AUTHENTICATION SERVICE UUID>possibile trovarlo accedendo a Strumenti > Security > Users e selezionando authentication-service utente. L'UUID è l'ultima parte del URL.
- È
-
Selezionare Fine , quindi Salva.
-
Selezionare il pulsante di compilazione per il pacchetto dell'archivio chiavi del servizio Authentication.
-
Una volta generato, selezionare Altro > Replica per attivare il store della chiave del servizio Authentication su AEM Publish.
-
Configurare l'handler di autenticazione SAML 2.0 configure-saml-2-0-authentication-handler
La configurazione SAML di AEM viene eseguita tramite la configurazione OSGi di Adobe Systems Granite SAML 2.0 Authentication Handler .
La configurazione è una configurazione di fabbrica OSGi, il che significa che un singolo servizio di pubblicazione AEM as a Cloud Service può avere più strutture di risorse discrete di copertura della configurazione SAML dell’archivio; questo è utile per le distribuzioni AEM multisito.
Adobe Systems Configurazione OSGi di Granite SAML 2.0 Authentication Handler configure-saml-2-0-authentication-handler-osgi-configuration
| table 0-row-6 1-row-6 2-row-6 3-row-6 4-row-6 5-row-6 6-row-6 7-row-6 8-row-6 9-row-6 10-row-6 11-row-6 12-row-6 13-row-6 14-row-6 15-row-6 16-row-6 17-row-6 18-row-6 19-row-6 20-row-6 21-row-6 22-row-6 23-row-6 24-row-6 25-row-6 26-row-6 27-row-6 3-align-center 4-align-center 10-align-center 11-align-center 17-align-center 18-align-center 24-align-center 25-align-center 31-align-center 32-align-center 38-align-center 39-align-center 45-align-center 46-align-center 52-align-center 53-align-center 59-align-center 60-align-center 66-align-center 67-align-center 73-align-center 74-align-center 80-align-center 81-align-center 87-align-center 88-align-center 94-align-center 95-align-center 101-align-center 102-align-center 108-align-center 109-align-center 115-align-center 116-align-center 122-align-center 123-align-center 129-align-center 130-align-center 136-align-center 137-align-center 143-align-center 144-align-center 150-align-center 151-align-center 157-align-center 158-align-center 164-align-center 165-align-center 171-align-center 172-align-center 178-align-center 179-align-center 185-align-center 186-align-center 192-align-center 193-align-center | |||||
|---|---|---|---|---|---|
| Proprietà OSGi | Obbligatorio | Valore formato | Valore predefinito | Descrizione | |
| Percorsi | path |
✔ | Array di stringhe | / |
AEM percorsi per cui viene utilizzato questo gestore di autenticazione. |
| URL IDP | idpUrl |
✔ | Stringa | L'IDP URL il richiesta di autenticazione SAML viene inviato. | |
| Alias certificato IDP | idpCertAlias |
✔ | Stringa | Alias del certificato IDP trovato nel Global Trust Store dell'AEM | |
| IDP HTTP reindirizzare | idpHttpRedirect |
✘ | Booleano | false |
Indica se un reindirizzamento HTTP all'IDP URL invece di inviare un AuthnRequest. Imposta su true per l'autenticazione avviata da IDP. |
| Identificatore IDP | idpIdentifier |
✘ | Stringa | ID IDP univoco per garantire l'unicità di AEM utente e gruppo. Se questo campo è vuoto, viene utilizzato il serviceProviderEntityId valore desiderato. |
|
| Asserzione servizio consumer URL | assertionConsumerServiceURL |
✘ | Stringa | L'attributo AssertionConsumerServiceURL URL in AuthnRequest che specifica dove deve essere inviato il <Response> messaggio al AEM. |
|
| ID entità SP | serviceProviderEntityId |
✔ | Stringa | Identifica in modo univoco AEM all'IDP; Di solito il AEM nome host. | |
| Crittografia SP | useEncryption |
✘ | Booleano | true |
Indica se l'IDP crittografa le asserzioni SAML. Richiede spPrivateKeyAlias e keyStorePassword deve essere impostato. |
| Alias chiave privata SP | spPrivateKeyAlias |
✘ | Stringa | Alias della chiave privata nella authentication-service chiave del utente store. Obbligatorio se useEncryption è impostato su true. |
|
| Tasto SP store password | keyStorePassword |
✘ | Stringa | L'password delle chiavi del "servizio di autenticazione" utente store. Obbligatorio se useEncryption è impostato su true. |
|
| reindirizzare predefinito | defaultRedirectUrl |
✘ | Stringa | / |
La reindirizzare predefinita URL dopo un'autenticazione riuscita. Può essere relativo all'host AEM (ad esempio, /content/wknd/us/en/html). |
| Attributo ID utente | userIDAttribute |
✘ | Stringa | uid |
Nome dell'attributo di asserzione SAML contenente l'ID utente dell'utente AEM. Lascia vuoto per usare .Subject:NameId |
| Automatico creare utenti AEM | createUser |
✘ | Booleano | true |
Indica se gli utenti AEM vengono creati in seguito all'autenticazione. |
| AEM utente percorso intermedio | userIntermediatePath |
✘ | Stringa | Durante la creazione di utenti AEM, questo valore viene utilizzato come percorso intermedio (ad esempio, /home/users/<userIntermediatePath>/jane@wknd.com). Richiede createUser per essere impostato su true. |
|
| AEM attributi utente | synchronizeAttributes |
✘ | Array di stringhe | Elenco dei mapping di attributi SAML da store nel utente AEM, nel formato [ "saml-attribute-name=path/relative/to/user/node" ] (ad esempio, [ "firstName=profile/givenName" ]). Vedi l'elenco completo degli attributi AEM nativo. |
|
| Aggiungere utente a AEM gruppi | addGroupMemberships |
✘ | Booleano | true |
Indica se un utente di AEM viene aggiunto automaticamente ai gruppi di utenti di AEM dopo la corretta autenticazione. |
| Attributo di iscrizione al gruppo AEM | groupMembershipAttribute |
✘ | Stringa | groupMembership |
Nome dell'attributo di asserzione SAML contenente un elenco di AEM utente gruppi a cui deve essere aggiunto il utente. Richiede addGroupMemberships di essere impostato su true. |
| Gruppi di AEM predefiniti | defaultGroups |
✘ | Array di stringhe | Viene sempre aggiunto un elenco di AEM utente gruppi a cui vengono sempre aggiunti gli utenti autenticati (ad esempio, [ "wknd-user" ]). Richiede addGroupMemberships di essere impostato su true. |
|
| Formato NameIDPolicy | nameIdFormat |
✘ | Stringa | urn:oasis:names:tc:SAML:2.0:nameid-format:transient |
Valore del parametro di formato NameIDPolicy da inviare nel messaggio AuthnRequest. |
| Risposta SAML dello store | storeSAMLResponse |
✘ | Booleano | false |
Indica se il samlResponse valore è memorizzato nel nodo AEM cq:User . |
| Gestisci disconnessione | handleLogout |
✘ | Booleano | false |
Indica se la richiesta di logout viene gestita da questo gestore di autenticazione SAML. Richiede logoutUrl di essere impostato. |
| Disconnessione URL | logoutUrl |
✘ | Stringa | URL dell'IDP a cui viene inviata la richiesta di disconnessione SAML. Obbligatorio se handleLogout è impostato su true. |
|
| Tolleranza clock | clockTolerance |
✘ | Numero intero | 60 |
La tolleranza di sfasamento dell’orologio IDP e AEM (SP) durante la convalida delle asserzioni SAML. |
| Metodo digest | digestMethod |
✘ | Stringa | http://www.w3.org/2001/04/xmlenc#sha256 |
Algoritmo di digest utilizzato dall'IDP per firmare un messaggio SAML. |
| Metodo di firma | signatureMethod |
✘ | Stringa | http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 |
Algoritmo di firma utilizzato dall'IDP per firmare un messaggio SAML. |
| Tipo di sincronizzazione identità | identitySyncType |
✘ | default oppure idp |
default |
Non modificare from l'impostazione predefinita per AEM come Cloud Service. |
| Servizi classificazione | service.ranking |
✘ | Numero intero | 5002 |
Configurazioni di classificazione più elevate sono preferite per lo stesso path. |
AEM attributi utente aem-user-attributes
AEM utilizza i seguenti attributi di utente, che possono essere popolati tramite la synchronizeAttributes proprietà nella configurazione OSGi di Adobe Systems Granite SAML 2.0 Authentication Handler. Qualsiasi attributo IDP può essere sincronizzato con qualsiasi proprietà utente di AEM, tuttavia la mappatura per AEM utilizzare le proprietà degli attributi (elencate di seguito) AEM consente di utilizzarli naturalmente.
| table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 6-row-2 7-row-2 8-row-2 9-row-2 10-row-2 11-row-2 | |
|---|---|
| Attributo utente | Percorso relativo della proprietà dal rep:User nodo |
Titolo (ad esempio, Mrs) |
profile/title |
| Nome (cioè nome) | profile/givenName |
| Cognome (cioè cognome) | profile/familyName |
| Qualifica | profile/jobTitle |
| Indirizzo e-mail | profile/email |
| Indirizzo | profile/street |
| Città | profile/city |
| CAP | profile/postalCode |
| Paese | profile/country |
| Numero di telefono | profile/phoneNumber |
| Informazioni su di me | profile/aboutMe |
-
Crea un file di configurazione OSGi nel progetto e
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.auth.saml.SamlAuthenticationHandler~saml.cfg.jsonaprirlo nell'IDE.- Cambia
/wknd-examples/in/<project name>/ - L'identificatore dopo
~nel nome file deve identificare in modo univoco questa configurazione, quindi potrebbe essere il nome dell'IDP, ad esempio...~okta.cfg.json. Il valore deve essere alfanumerico con trattini.
- Cambia
-
Incolla il seguente codice JSON nel
com.adobe.granite.auth.saml.SamlAuthenticationHandler~...cfg.jsonfile e aggiorna iwkndriferimenti in base alle esigenze.code language-json { "path": [ "/content/wknd", "/content/dam/wknd" ], "idpCertAlias": "$[env:SAML_IDP_CERT_ALIAS;default=certalias___1652125559800]", "idpIdentifier": "$[env:SAML_IDP_ID;default=http://www.okta.com/exk4z55r44Jz9C6am5d7]", "idpUrl": "$[env:SAML_IDP_URL;default=https://dev-5511372.okta.com/app/dev-5511372_aemasacloudservice_1/exk4z55r44Jz9C6am5d7/sso/saml]", "serviceProviderEntityId": "$[env:SAML_AEM_ID;default=https://publish-p123-e456.adobeaemcloud.com]", "useEncryption": false, "createUser": true, "userIntermediatePath": "wknd/idp", "synchronizeAttributes":[ "firstName=profile/givenName" ], "addGroupMemberships": true, "defaultGroups": [ "wknd-users" ] } -
Aggiorna i valori come richiesto dal progetto. Per le descrizioni delle proprietà di configurazione, consulta il glossario di configurazione OSGi dell'handler SAML 2.0 Authentication riportato sopra. Dovrebbe
pathcontenere gli alberi contenuto protetti da gruppi di utenti chiusi (CUG) e richiedono l'autenticazione e questo gestore di autenticazione dovrebbe essere responsabile della protezione. -
È consigliato, ma non obbligatorio, utilizzare variabili di ambiente OSGi e segreti, quando i valori possono cambiare fuori Sincronizzazione con il ciclo di rilascio o quando i valori differiscono tra tipi di ambiente / livelli di servizio simili. I valori predefiniti possono essere impostati utilizzando la
$[env:..;default=the-default-value]"sintassi come mostrato sopra.
Le configurazioni OSGi per ambiente (config.publish.dev, config.publish.stage, e config.publish.prod) possono essere definite con attributi specifici se la configurazione SAML varia da un ambiente all'altro.
Usa crittografia
Quando si crittografano le asserzioni AuthnRequest e SAML, sono necessarie le seguenti proprietà: useEncryption, spPrivateKeyAlias e keyStorePassword. keyStorePassword contiene una password, pertanto il valore non deve essere memorizzato nel file di configurazione OSGi, ma inserito utilizzando valori di configurazione segreti
-
Apri
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.auth.saml.SamlAuthenticationHandler~saml.cfg.jsonnell'IDE. -
Aggiungi le tre proprietà
useEncryption,spPrivateKeyAlias, ekeyStorePasswordcome mostrato di seguito.code language-json { "path": [ "/content/wknd", "/content/dam/wknd" ], "idpCertAlias": "$[env:SAML_IDP_CERT_ALIAS;default=certalias___1234567890]", "idpIdentifier": "$[env:SAML_IDP_ID;default=http://www.okta.com/abcdef1235678]", "idpUrl": "$[env:SAML_IDP_URL;default=https://dev-5511372.okta.com/app/dev-123567890_aemasacloudservice_1/abcdef1235678/sso/saml]", "serviceProviderEntityId": "$[env:SAML_AEM_ID;default=https://publish-p123-e456.adobeaemcloud.com]", "useEncryption": true, "spPrivateKeyAlias": "$[env:SAML_AEM_KEYSTORE_ALIAS;default=aem-saml-encryption]", "keyStorePassword": "$[secret:SAML_AEM_KEYSTORE_PASSWORD]", "createUser": true, "userIntermediatePath": "wknd/idp" "synchronizeAttributes":[ "firstName=profile/givenName" ], "addGroupMemberships": true, "defaultGroups": [ "wknd-users" ] } -
Le tre proprietà di configurazione OSGi richieste per la crittografia sono:
useEncryptionimposta sutruespPrivateKeyAliascontiene l'alias della voce del keystore per la chiave privata usata dall'integrazione SAML.keyStorePasswordcontiene una variabile di configurazione segreta OSGi contenente l'password delauthentication-servicekeystore utente.
Configura filtro referrer
Durante il processo di autenticazione SAML, l'IDP avvia un POST HTTP lato client per AEM l'endpoint del .../saml_login Publish. Se l'IDP e la pubblicazione AEM esistono in un'origine diversa, il filtro referrer di AEM Publish viene configurato tramite la configurazione OSGi per consentire i POST HTTP dall'origine dell'IDP.
-
Crea (o modifica) un file di configurazione OSGi nel progetto in
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/org.apache.sling.security.impl.ReferrerFilter.cfg.json.- Cambia
/wknd-examples/in/<project name>/
- Cambia
-
Verificare che il valore
allow.emptysia impostato sutrue, cheallow.hosts(o se si preferisce,allow.hosts.regexp) contenga l'origine dell'IDP e chefilter.methodsincludaPOST. La configurazione OSGi deve essere simile a:code language-json { "allow.empty": true, "allow.hosts.regexp": [ ], "allow.hosts": [ "$[env:SAML_IDP_REFERRER;default=dev-123567890.okta.com]" ], "filter.methods": [ "POST", ], "exclude.agents.regexp": [ ] }
AEM Publish supporta una singola configurazione del filtro Referrer, in modo da unire i requisiti di configurazione SAML con eventuali configurazioni esistenti.
Le configurazioni OSGi per ambiente (config.publish.dev, config.publish.stage e config.publish.prod) possono essere definite con attributi specifici se allow.hosts (o allow.hosts.regex) variano da un ambiente all'altro.
Configurare la condivisione CORS (Cross-Origin Resource Sharing)
Durante il processo di autenticazione SAML, l'IDP avvia un HTTP POST lato client all'endpoint .../saml_login di AEM Publish. Se l'IDP e la pubblicazione AEM esistono su host/domini diversi, è necessario configurare la condivisione CORS (CRoss-Origin Resource Sharing)di AEM Publish per consentire i POST HTTP dall'host/dominio dell'IDP.
L'intestazione Origin di questa richiesta HTTP POST in genere ha un valore diverso rispetto all'host AEM Publish, pertanto è necessaria la configurazione CORS.
Durante il test dell'autenticazione SAML sul SDK AEM locale (localhost:4503), l'IDP può impostare l'intestazione Origin su null. In tal caso, aggiungere "null" all'elenco alloworigin.
-
Crea un file di configurazione OSGi nel progetto in
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.cors.impl.CORSPolicyImpl~saml.cfg.json- Cambia
/wknd-examples/con il nome del progetto - L'identificatore dopo
~nel nome file deve identificare in modo univoco questa configurazione, quindi potrebbe essere il nome dell'IDP, ad esempio...CORSPolicyImpl~okta.cfg.json. Il valore deve essere alfanumerico con trattini.
- Cambia
-
Incolla il seguente JSON nel file
com.adobe.granite.cors.impl.CORSPolicyImpl~...cfg.json.
{
"alloworigin": [
"$[env:SAML_IDP_ORIGIN;default=https://dev-1234567890.okta.com]",
"null"
],
"allowedpaths": [
".*/saml_login"
],
"supportedmethods": [
"POST"
]
}
Le configurazioni OSGi per ambiente (config.publish.dev, config.publish.stage e config.publish.prod) possono essere definite con attributi specifici se alloworigin e allowedpaths variano da un ambiente all'altro.
Configura AEM Dispatcher per consentire SAML HTTP POST
Dopo aver eseguito correttamente l'autenticazione nell'IDP, l'IDP orchestrerà un POST HTTP per tornare all'endpoint /saml_login registrato di AEM (configurato nell'IDP). Questo HTTP POST a /saml_login è bloccato per impostazione predefinita in Dispatcher, pertanto deve essere consentito esplicitamente utilizzando la seguente regola di Dispatcher:
- Apri
dispatcher/src/conf.dispatcher.d/filters/filters.anynell'IDE. - Aggiungi alla fine del file un regola consenti per HTTP POST agli URL che terminano con
/saml_login.
...
# Allow SAML HTTP POST to ../saml_login end points
/0190 { /type "allow" /method "POST" /url "*/saml_login" }
Se URL riscrittura sul server Web Apache è configurato (dispatcher/src/conf.d/rewrites/rewrite.rules), assicurarsi che le .../saml_login richieste agli endpoint non vengano accidentalmente alterate.
Iscrizione a gruppi dinamici
L'iscrizione dinamica ai gruppi è una funzionalità di Apache Jackrabbit Oak che migliora le prestazioni di valutazione e provisioning dei gruppi. Questa sezione descrive come vengono archiviati utenti e gruppi quando questa funzione è abilitata e come modificare la configurazione di SAML Authentication Handler per abilitarlo per ambienti nuovi o esistenti.
Come abilitare l'iscrizione dinamica a un gruppo per gli utenti SAML in nuovi ambienti
Per migliorare significativamente le prestazioni di valutazione dei gruppi nei nuovi ambienti AEM come Cloud Service, è consigliabile attivare la funzionalità Appartenenza dinamica ai gruppi nei nuovi ambienti.
Questo è anche un passaggio necessario quando viene attivata la sincronizzazione dei dati. Maggiori dettagli qui .
A tale scopo, aggiungere la seguente proprietà al file di configurazione OSGI:
/apps/example/osgiconfig/config.publish/com.adobe.granite.auth.saml.SamlAuthenticationHandler~example.cfg.json
Con questa configurazione, gli utenti e i gruppi vengono creati come Oak utenti esterni. In AEM, gli utenti e i gruppi esterni hanno un'impostazione predefinita rep:principalName composta da [user name];[idp] o [group name];[idp].
Si noti che gli elenchi di controllo di accesso (ACL) sono associati al PrincipalName di utenti o gruppi.
Quando si distribuisce questa configurazione in una distribuzione esistente in cui in precedenza identitySyncType non era specificato o impostato su default, verranno creati nuovi utenti e gruppi e ACL deve essere applicato a questi nuovi utenti e gruppi. Si noti che i gruppi esterni non possono contenere utenti locali. Repoinit può essere utilizzato per creare ACL per gruppi esterni SAML lineare se verranno creati solo quando il utente eseguirà un login.
Per evitare questo refactoring su ACL, è stata implementata una funzionalità di migrazione standard.
Come vengono memorizzate le appartenenze in gruppi locali ed esterni con iscrizione al gruppo dinamico
Nei gruppi locali i membri del gruppo sono memorizzati nell'attributo oak: rep:members. L'attributo contiene l'elenco degli uid di ogni membro del gruppo. Ulteriori dettagli sono disponibili qui.
Esempio:
{
"jcr:primaryType": "rep:Group",
"rep:principalName": "operators",
"rep:managedByIdp": "SAML",
"rep:members": [
"635afa1c-beeb-3262-83c4-38ea31e5549e",
"5e496093-feb6-37e9-a2a1-7c87b1cec4b0",
...
],
...
}
I gruppi esterni con iscrizione al gruppo dinamici non store alcun membro nella voce del gruppo.
Il iscrizione al gruppo viene invece memorizzato nelle voci degli utenti. La documentazione aggiuntiva è disponibile qui. Per esempio, questo è il nodo OAK per il gruppo:
{
"jcr:primaryType": "rep:Group",
"jcr:mixinTypes": [
"rep:AccessControllable"
],
"jcr:createdBy": "",
"jcr:created": "Tue Jul 16 2024 08:58:47 GMT+0000",
"rep:principalName": "GROUP_1;aem-saml-idp-1",
"rep:lastSynced": "Tue Jul 16 2024 08:58:47 GMT+0000",
"jcr:uuid": "d9c6af8a-35c0-3064-899a-59af55455cd0",
"rep:externalId": "GROUP_1;aem-saml-idp-1",
"rep:authorizableId": "GROUP_1;aem-saml-idp-1"
}
Questo è il nodo di un utente membro del gruppo:
{
"jcr:primaryType": "rep:User",
"jcr:mixinTypes": [
"rep:AccessControllable"
],
"surname": "Test",
"rep:principalName": "testUser",
"rep:externalId": "test;aem-saml-idp-1",
"rep:authorizableId": "test",
"rep:externalPrincipalNames": [
"projects-users;aem-saml-idp-1",
"GROUP_2;aem-saml-idp-1",
"GROUP_1;aem-saml-idp-1",
"operators;aem-saml-idp-1"
],
...
}
Abilitare l’iscrizione al gruppo dinamico per gli utenti SAML negli ambienti esistenti
Come spiegato nella sezione precedente, il formato degli utenti e dei gruppi esterni è leggermente diverso da quello utilizzato per gli utenti e i gruppi locali. È possibile definire un nuovo ACL per i gruppi esterni ed eseguire il provisioning di nuovi utenti esterni, oppure utilizzare lo strumento di migrazione come descritto di seguito.
Abilitazione dell’iscrizione dinamica ai gruppi per gli ambienti esistenti con utenti esterni
Il gestore di Authentication SAML crea utenti esterni quando viene specificata la seguente proprietà: "identitySyncType": "idp". In questo caso, è possibile abilitare iscrizione al gruppo dinamici modificando questa proprietà in: "identitySyncType": "idp_dynamic" Non è richiesta alcuna migrazione.
Migrazione automatica a iscrizione al gruppo dinamici per ambienti esistenti con utenti locali
Il gestore di Authentication SAML crea utenti locali quando viene specificata la seguente proprietà: "identitySyncType": "default" Questo è anche il valore predefinito quando la proprietà non è specificata. In questa sezione descriviamo i passaggi eseguiti dalla procedura di migrazione automatica.
Quando questa migrazione è abilitata, viene eseguita durante l’autenticazione dell’utente e consiste dei seguenti passaggi:
- La utente locale viene migrata in un utente esterno mantenendo il nome utente originale. Ciò implica che gli utenti locali migrati, che ora agiscono come utenti esterni, mantengano il loro nome utente originale invece di seguire la sintassi di denominazione menzionata nella sezione precedente. Verrà aggiunta un'ulteriore proprietà chiamata:
rep:externalIdcon il valore di[user name];[idp]. Il utentePrincipalNamenon viene modificato. - Per ogni gruppo esterno ricevuto nell'asserzione SAML, viene creato un gruppo esterno. Se esiste un gruppo locale corrispondente, il gruppo esterno viene aggiunto al gruppo locale come membro.
- L'utente viene aggiunto come membro del gruppo esterno.
- Il utente locale viene quindi rimosso da tutti i gruppi locali Saml di cui era membro. I gruppi locali Saml sono identificati dalla proprietà OAK:
rep:managedByIdp. Questa proprietà viene impostata dal gestore Authentication Saml quando l'attributosyncTypenon è specificato o impostato sudefault.
Ad istanza, se prima della migrazione user1 c'è un utente locale e un membro di un gruppo group1locale, dopo la migrazione si verificheranno le seguenti modifiche:user1 diventa un utente esterno. L'attributo rep:externalId viene aggiunto al suo profilo.user1diventa membro di un gruppo esterno: group1;idpnon è più un membro diretto del gruppo locale: user1 group1 è un membro del gruppo locale: group1;idp.group1
user1 è quindi un membro del gruppo locale: group1 sebbene l'ereditarietà
L'appartenenza al gruppo per i gruppi esterni è archiviata nel profilo utente nella proprietà rep:externalPrincipalNames
Come configurare la migrazione automatica all'appartenenza a un gruppo dinamico
- Abilitare la proprietà
"identitySyncType": "idp_dynamic_simplified_id"nel file di configurazione OSGi SAML:com.adobe.granite.auth.saml.SamlAuthenticationHandler~...cfg.json: - Configurare il nuovo servizio OSGi con PID di fabbrica che inizia con:
com.adobe.granite.auth.saml.migration.SamlDynamicGroupMembershipMigration~. Ad esempio, un PID può essere:com.adobe.granite.auth.saml.migration.SamlDynamicGroupMembershipMigration~myIdP. Imposta la seguente proprietà:
{
"idpIdentifier": "<value of IDP Identifier (idpIdentifier)" property from the "com.adobe.granite.auth.saml.SamlAuthenticationHandler" configuration to be migrated>"
}
Per migrare più configurazioni SAML, è necessario creare più configurazioni OSGi factory per com.adobe.granite.auth.saml.migration.SamlDynamicGroupMembershipMigration, ognuna delle quali specifica un idpIdentifier per la migrazione.
Distribuzione della configurazione SAML
Le configurazioni OSGi devono essere salvate in Git e distribuite in AEM as a Cloud Service utilizzando Cloud Manager.
$ git remote -v
adobe https://git.cloudmanager.adobe.com/myOrg/myCloudManagerGit/ (fetch)
adobe https://git.cloudmanager.adobe.com/myOrg/myCloudManagerGit/ (push)
$ git add .
$ git commit -m "SAML 2.0 configurations"
$ git push adobe saml-auth:develop
Distribuire il ramo Git Cloud Manager di destinazione (in questo esempio, develop) utilizzando una pipeline di distribuzione full stack.
Richiamare l’autenticazione SAML
Il flusso di autenticazione SAML può essere richiamato da una pagina web del sito AEM creando un collegamento creato appositamente o un pulsante. I parametri descritti di seguito possono essere impostati a livello di programmazione in base alle esigenze. Ad esempio, un pulsante di accesso può impostare saml_request_path, ovvero il punto in cui l'utente viene indirizzato dopo l'autenticazione SAML, su pagine AEM diverse, in base al contesto del pulsante.
Memorizzazione in cache protetta durante l’utilizzo di SAML
Nell’istanza di pubblicazione di AEM, la maggior parte delle pagine viene generalmente memorizzata nella cache. Tuttavia, per i percorsi protetti da SAML, la memorizzazione nella cache deve essere disabilitata o abilitata utilizzando la configurazione auth_checker. Per ulteriori informazioni, fare riferimento ai dettagli forniti qui
Tieni presente che se memorizzi nella cache i percorsi protetti senza abilitare auth_checker, potresti riscontrare un comportamento imprevedibile.
richiesta GET
L’autenticazione SAML può essere richiamata creando una richiesta HTTP GET nel formato:
HTTP GET /system/sling/login
e fornendo parametri di query:
resourcepathgestore di Authentication Adobe Systems Granite SAML 2.0 Granite.saml_request_pathAd esempio, questo collegare HTML attiverà il flusso di log in SAML e, in caso di esito positivo, porterà il utente a /content/wknd/us/en/protected/page.html. Questi parametri di query possono essere impostati in modo programmaticale in base alle esigenze.
<a href="/system/sling/login?resource=/content/wknd&saml_request_path=/content/wknd/us/en/protected/page.html">
Log in using SAML
</a>
richiesta POST
L'autenticazione SAML può essere richiamata creando un richiesta HTTP POST nel formato:
HTTP POST /system/sling/login
e fornendo i dati del modulo:
resourcepathgestore di Authentication Adobe Systems Granite SAML 2.0 Granite.saml_request_pathAd esempio, questo pulsante HTML utilizzerà un POST HTTP per attivare il flusso di log in SAML e, in caso di esito positivo, porterà il utente a /content/wknd/us/en/protected/page.html. Questi parametri dei dati del modulo possono essere impostati in base alle esigenze.
<form action="/system/sling/login" method="POST">
<input type="hidden" name="resource" value="/content/wknd">
<input type="hidden" name="saml_request_path" value="/content/wknd/us/en/protected/page.html">
<input type="submit" value="Log in using SAML">
</form>
Configurazione del Dispatcher
Sia il GET HTTP che i metodi POST richiedono accesso client agli endpoint di AEM e pertanto devono essere consentiti /system/sling/login tramite AEM Dispatcher.
Consenti i pattern di URL necessari in base all'utilizzo di GET o POST
# Allow GET-based SAML authentication invocation
/0191 { /type "allow" /method "GET" /url "/system/sling/login" /query "*" }
# Allow POST-based SAML authentication invocation
/0192 { /type "allow" /method "POST" /url "/system/sling/login" }