SAML 2.0-autentisering saml-2-0-authentication
Lär dig hur du konfigurerar och autentiserar slutanvändare (inte författare till AEM) till en SAML 2.0-kompatibel IDP som du väljer.
Vilken SAML för AEM as a Cloud Service?
SAML 2.0-integration med AEM Publish (eller Preview) gör det möjligt för slutanvändare av en AEM-baserad webbupplevelse att autentisera sig mot en icke-Adobe IDP (Identity Provider) och få tillgång till AEM som namngiven, auktoriserad användare.
Det typiska flödet för en AEM Publish SAML-integration är följande:
-
Användaren gör en begäran om AEM Publish vilket indikerar att autentisering krävs.
- Användaren begär en CUG/ACL-skyddad resurs.
- Användaren begär en resurs som omfattas av ett autentiseringskrav.
- Användaren följer en länk till AEM:s inloggningsslutpunkt (dvs.
/system/sling/login) som uttryckligen begär inloggningsåtgärden.
-
AEM gör en AuthnRequest till IDP:n och begär att IDP ska starta autentiseringsprocessen.
-
Användaren autentiserar sig mot IDP.
- Användaren blir tillfrågad av IDP:n om inloggningsuppgifter.
- Användaren är redan autentiserad med IDP:n och behöver inte lämna ytterligare inloggningsuppgifter.
-
IDP genererar en SAML-assertion som innehåller användarens data och signerar den med IDP:ns privata certifikat.
-
IDP skickar SAML-assertionen via HTTP POST, via användarens webbläsare (RESPECTIVE_PROTECTED_PATH/saml_login), till AEM Publish.
-
AEM Publish tar emot SAML-assertionen och validerar SAML-assertionens integritet och äkthet med hjälp av IDP:s publika certifikat.
-
AEM Publish hanterar AEM-användarposten baserat på SAML 2.0 OSGi-konfigurationen och innehållet i SAML-assertionen.
- Skapar användare
- Synkroniserar användarattribut
- Uppdaterar medlemskap i AEM-användargruppen
-
AEM Publish sätter AEM-cookien
login-tokenpå HTTP-svaret, som används för att autentisera efterföljande förfrågningar till AEM Publish. -
AEM Publish omdirigerar användaren till URL på AEM Publish enligt cookien
saml_request_path.
Konfigurationsgenomgång
Den här videon går igenom hur man sätter upp SAML 2.0-integration med AEM som en Cloud Service Publish-tjänst och använder Okta som IDP.
Förkunskapskrav
Följande krävs vid installation av SAML 2.0-autentisering:
- Tillgång till Cloud Manager för Distributionshanteraren
- AEM Administrator-åtkomst till AEM as a Cloud Service-miljön
- Administratörsåtkomst till IDP:n
- Tillgång till ett offentligt/privat nyckelpar som används för att kryptera SAML-nyttolaster
- AEM Sites-sidor (eller sidträd), publicerade till AEM Publish och skyddade av stängda användargrupper (CUG)
SAML 2.0 stöds endast för att autentisera användning av AEM Publish eller Preview. Om du vill hantera autentiseringen av AEM Author med hjälp av och IDP integrerar du IDP med Adobe IMS.
Installera IDP publikt certifikat på AEM
IDP:ns publika certifikat läggs till i AEM:s Global Trust Store och används för att validera att SAML-assertionen som skickas av IDP:n är giltig.
- Användaren autentiserar sig mot IDP.
- IDP genererar en SAML-assertion som innehåller användarens data.
- IDP undertecknar SAML-påståendet med IDP:ns privata certifikat.
- IDP initierar en klientsida HTTP POST till AEM Publishs SAML-endpoint (
.../saml_login) som inkluderar den signerade SAML-assertionen. - AEM Publish tar emot HTTP POST som innehåller den signerade SAML-assertionen, kan validera signaturen med IDP:s publika certifikat.
-
Hämta den publika certifikatfilen från IDP:n. Detta certifikat gör det möjligt för AEM att validera SAML-assertionen som tillhandahålls AEM av IDP:n.
Certifikatet är i PEM-format och bör likna:
code language-none -----BEGIN CERTIFICATE----- MIIC4jCBAcoCCQC33wnybT5QZDANBgkqhkiG9w0BAQsFADAyMQswCQYDVQQGEwJV ... m0eo2USlSRTVl7QHRTuiuSThHpLKQQ== -----END CERTIFICATE----- -
Logga in på AEM Author som AEM-administratör.
-
Navigera till verktyg > säkerhet > Trust Store.
-
Skapa eller öppna Global Trust Store. Om du skapar en Global Trust Store, spara lösenordet på en säker plats.
-
Expandera Lägg till certifikat från CER-fil.
-
Välj Certifikatfil och ladda upp certifikatfilen som IDP:n tillhandahåller.
-
Lämna kartcertifikatet tomt till användaren .
-
Välj Skicka.
-
Det nyligen tillagda certifikatet visas ovanför avsnittet Lägg till certifikat från CRT-filen .
-
Notera aliaset, eftersom detta värde används i SAML 2.0 Authentication Handler OSGi-konfigurationen.
-
Välj Spara & Stäng.
Global Trust Store har konfigurerats med IDP:s offentliga certifikat på AEM Author, men eftersom SAML bara används på AEM Publish måste Global Trust Store replikeras till AEM Publish för att IDP:s offentliga certifikat ska vara tillgängligt där.
-
Navigera till Verktyg > Distribution > Paket.
-
Skapa ett paket
- Paketnamn:
Global Trust Store - Version:
1.0.0 - Grupp:
com.your.company
- Paketnamn:
-
Redigera det nya Global Trust Store-paketet .
-
Välj fliken Filter och lägg till ett filter för rotvägen
/etc/truststore. -
Välj Klart och sedan Spara ____.
-
Välj Bygg-knappen för Global Trust Store-paketet .
-
När den är byggd, välj More > Replicate för att aktivera Global Trust Store-noden (
/etc/truststore) till AEM Publish.
Skapa autentiseringstjänst-nyckellagring authentication-service-keystore
Att skapa en nyckellagring för autentiseringstjänst krävs när SAML 2.0-autentiseringshanterarens OSGi-konfigurationsegenskap handleLogout sätts till true eller när AuthnRequest-signering/SAML-assertionskryptering krävs
-
Logga in på AEM Author som AEM-administratör för att ladda upp den privata nyckeln.
-
Gå till Verktyg > Säkerhet > Användare, välj autentiseringstjänstanvändare , och välj Egenskaper från den övre åtgärdsfältet.
-
Välj fliken Keystore ____.
-
Skapa eller öppna keystore. Om du skapar en nyckelbutik, förvara lösenordet säkert.
- En publik/privat keystore installeras i denna keystore endast om AuthnRequest-signering/SAML-assertionskryptering krävs.
- Om denna SAML-integration stödjer utloggning, men inte AuthnRequest-signering/SAML-assertion, är en tom keystore tillräcklig.
-
Välj Spara & Stäng.
-
Skapa ett paket som innehåller den uppdaterade autentiseringsanvändaren .
Use följande tillfälliga lösning med hjälp av paket :
-
Gå till verktyg > distribution > paket.
-
Skapa ett paket
- Paketnamn:
Authentication Service - Version:
1.0.0 - Grupp:
com.your.company
- Paketnamn:
-
Redigera det nya nyckelarkivet för autentiseringstjänsten.
-
Markera fliken Filter och lägg till ett filter för rotsökvägen
/home/users/system/cq:services/internal/security/<AUTHENTICATION SERVICE UUID>/keystore.- Du hittar
<AUTHENTICATION SERVICE UUID>genom att gå till Verktyg > Säkerhet > Användare och välja authentication-service-användare. UUID är den sista delen av URL:en.
- Du hittar
-
Välj Klart och sedan Spara ____.
-
Välj Bygg-knappen för paketet Authentication Service Key Store .
-
När den är byggd, välj More > Replicate för att aktivera Authentication Service-nyckellagret till AEM Publish.
-
Installera AEM offentlig/privat nyckelpar install-aem-public-private-key-pair
Installation av AEM:s publika/privata nyckelpar är valfritt
AEM Publish kan konfigureras för att signera AuthnRequests (till IDP) och kryptera SAML-assertioner (till AEM). Detta uppnås genom att tillhandahålla en privat nyckel till AEM Publish, och dess publika nyckel matchar IDP:n.
AuthnRequest (begäran till IDP från AEM Publish som initierar inloggningsprocessen) kan signeras av AEM Publish. För att göra detta signerar AEM Publish AuthnRequest med den privata nyckeln, som IDP:n sedan validerar signaturen med den publika nyckeln. Detta garanterar IDP att AuthnRequest initierades och begärdes av AEM Publish, och inte en illvillig tredje part.
- Användaren gör en HTTP-förfrågan till AEM Publish som resulterar i en SAML-autentiseringsförfrågan till IDP:n.
- AEM Publish genererar SAML-förfrågan som skickas till IDP:n.
- AEM Publish signerar SAML-förfrågan med AEM:s privata nyckel.
- AEM Publish initierar AuthnRequest, en HTTP-klientsidans omdirigering till IDP:n som innehåller den signerade SAML-förfrågan.
- IDP tar emot AuthnRequest och validerar signaturen med AEM:s publika nyckel, vilket garanterar att AEM Publish initierade AuthnRequest.
- AEM Publish validerar sedan den dekrypterade SAML-assertionens integritet och äkthet med hjälp av IDP:s publika certifikat.
All HTTP-kommunikation mellan IDP och AEM Publish bör ske över HTTPS och därmed vara säker som standard. Men vid behov kan SAML-assertioner krypteras om extra sekretess krävs utöver det som ges av HTTPS. För att göra detta krypterar IDP:n SAML-assertionsdata med den privata nyckeln, och AEM Publish dekrypterar SAML-assertionen med den privata nyckeln.
- Användaren autentiserar sig mot IDP.
- IDP genererar en SAML-assertion som innehåller användarens data och signerar den med IDP:ns privata certifikat.
- IDP krypterar sedan SAML-assertionen med AEMs publika nyckel, vilket kräver att AEM:s privata nyckel dekrypteras.
- Den krypterade SAML-assertionen skickas via användarens webbläsare till AEM Publish.
- AEM Publish tar emot SAML-assertionen och dekrypterar den med AEM:s privata nyckel.
- IDP uppmanar användaren att autentisera sig.
Både AuthnRequest-signering och SAML-assertionskryptering är valfria, men båda är aktiverade, med hjälp av SAML 2.0-autentiseringshanteraren OSGi-konfigurationsegenskapen useEncryption, vilket innebär att båda eller ingen kan användas.
-
Hämta den offentliga nyckeln, privata nyckeln (PKCS#8 i DER-format) och certifikatkedjefilen (detta kan vara den offentliga nyckeln) som används för att signera AuthnRequest och kryptera SAML-försäkran. Nycklarna tillhandahålls vanligtvis av IT-organisationens säkerhetsteam.
- Ett självsignerat nyckelpar kan genereras med 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 -
Överför den offentliga nyckeln till IDP.
- Med metoden
opensslovan är den publika nyckeln filenaem-public.crt.
- Med metoden
-
Logga in på AEM Author som AEM-administratör för att ladda upp den privata nyckeln.
-
Gå till Verktyg > Säkerhet > Trust Store, välj autentiseringstjänstanvändare , och välj Egenskaper från den övre åtgärdsfältet.
-
Gå till Verktyg > Säkerhet > Användare, välj autentiseringstjänstanvändare , och välj Egenskaper från den övre åtgärdsfältet.
-
Välj fliken Keystore ____.
-
Skapa eller öppna keystore. Om du skapar en nyckelbutik, förvara lösenordet säkert.
-
Välj Lägg till privat nyckel från DER-filen och lägg till den privata nyckel- och kedjefilen i AEM:
- Alias: Ge ett meningsfullt namn, ofta namnet på IDP:n.
- Privat nyckelfil: Ladda upp filen för privat nyckel (PKCS#8 i DER-format).
- Med metoden
opensslovan äraem-private-pkcs8.derdetta filen
- Med metoden
- Välj certifikatkedjefil: Ladda upp den tillhörande kedjefilen (detta kan vara den publika nyckeln).
- Med metoden
opensslovan äraem-public.crtdetta filen
- Med metoden
- Välj Skicka in
-
Det nyligen tillagda certifikatet visas ovanför avsnittet Lägg till certifikat från CRT-filen .
- Notera aliaset eftersom detta används i SAML 2.0-autentiseringshanteraren OSGi-konfigurationen
-
Välj Spara & Stäng.
-
Skapa ett paket som innehåller den uppdaterade autentiseringsanvändaren .
Use följande tillfälliga lösning med hjälp av paket :
-
Gå till verktyg > distribution > paket.
-
Skapa ett paket
- Paketnamn:
Authentication Service - Version:
1.0.0 - Grupp:
com.your.company
- Paketnamn:
-
Redigera det nya nyckelarkivet för autentiseringstjänsten.
-
Markera fliken Filter och lägg till ett filter för rotsökvägen
/home/users/system/cq:services/internal/security/<AUTHENTICATION SERVICE UUID>/keystore.- Du hittar
<AUTHENTICATION SERVICE UUID>genom att gå till Verktyg > Säkerhet > Användare och välja authentication-service-användare. UUID är den sista delen av URL:en.
- Du hittar
-
Välj Klar och sedan Spara.
-
Välj knappen Skapa för nyckelarkivet för autentiseringstjänsten-paketet.
-
Välj Mer > Replikera när du har skapat autentiseringstjänstens nyckelarkiv för AEM Publish.
-
Konfigurera autentiseringshanteraren för SAML 2.0 configure-saml-2-0-authentication-handler
AEM:s SAML-konfiguration utförs via Adobe Granite SAML 2.0 Authentication Handler OSGi-konfigurationen .
Konfigurationen är en OSGi-fabrikskonfiguration, vilket innebär att en enskild AEM som Cloud Service Publish-tjänst kan ha flera SAML-konfigurationer som täcker diskreta resursträd i arkivet; detta är användbart för AEM-installationer på flera platser.
Adobe Granite SAML 2.0 Authentication Handler OSGi-konfiguration 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 | |||||
|---|---|---|---|---|---|
| OSGi-egenskap | Obligatoriskt | Värdeformat | Standardvärde | Beskrivning | |
| Vägar | path |
✔ | Strängarray | / |
AEM-vägar som denna autentiseringshanterare används för. |
| IDP-URL | idpUrl |
✔ | Sträng | IDP-URL:en där SAML-autentiseringsförfrågan skickas. | |
| IDP-certifikatalias | idpCertAlias |
✔ | Sträng | Alias för IDP-certifikatet som hittades i AEM:s Global Trust Store | |
| IDP HTTP-omdirigering | idpHttpRedirect |
✘ | Boolesk | false |
Indikerar om en HTTP-omdirigering till IDP-URL:en istället för att skicka en AuthnRequest. Ställ in på true för IDP-initierad autentisering. |
| IDP-identifierare | idpIdentifier |
✘ | Sträng | Unikt IDP-ID för att säkerställa AEM-användares och gruppens unikhet. Om tomt används istället för det serviceProviderEntityId . |
|
| Assertion konsumenttjänst-URL | assertionConsumerServiceURL |
✘ | Sträng | URL-attributet AssertionConsumerServiceURL i AuthnRequest som anger var <Response>-meddelandet måste skickas till AEM. |
|
| SP-enhets-ID | serviceProviderEntityId |
✔ | Sträng | Identifierar unikt AEM till IDP; vanligtvis AEM:s värdnamn. | |
| SP-kryptering | useEncryption |
✘ | Boolesk | true |
Indikerar om IDP:n krypterar SAML-påståenden. Kräver spPrivateKeyAlias och keyStorePassword måste vara satt. |
| SP privata nyckelalias | spPrivateKeyAlias |
✘ | Sträng | Alias för den privata nyckeln i authentication-service användarens nyckellagring. Krävs om useEncryption är satt till true. |
|
| SP nyckellagringslösenord | keyStorePassword |
✘ | Sträng | Lösenordet till användarens nyckel lagrar användarens nyckel i 'autentiseringstjänsten'. Krävs om useEncryption är satt till true. |
|
| Standardomdirigering | defaultRedirectUrl |
✘ | Sträng | / |
Den standardomdirigerade URL:en efter lyckad autentisering. Kan vara relativ till AEM-värden (till exempel, /content/wknd/us/en/html). |
| User Id-attributet | userIDAttribute |
✘ | Sträng | uid |
Namnet på attributet SAML-assertion som innehåller användar-ID:t för AEM-användaren. Lämna tomt för att använda Subject:NameId. |
| Automatiskt skapa AEM-användare | createUser |
✘ | Boolesk | true |
Indikerar om AEM-användare skapas vid lyckad autentisering. |
| AEM-användarintermediär väg | userIntermediatePath |
✘ | Sträng | När du skapar AEM-användare används det här värdet som mellanliggande sökväg (till exempel /home/users/<userIntermediatePath>/jane@wknd.com). createUser måste anges till true. |
|
| AEM användarattribut | synchronizeAttributes |
✘ | Strängarray | Lista över SAML-attributmappningar att lagra på AEM-användaren, i formatet [ "saml-attribute-name=path/relative/to/user/node" ] (till exempel [ "firstName=profile/givenName" ]). Se den fullständiga listan över inbyggda AEM-attribut. |
|
| Lägg till användare i AEM-grupper | addGroupMemberships |
✘ | Boolesk | true |
Indikerar om en AEM-användare automatiskt läggs till i AEM-användargrupper efter framgångsrik autentisering. |
| AEM-gruppmedlemskapsattributet | groupMembershipAttribute |
✘ | Sträng | groupMembership |
Namnet på SAML-assertionsattributet som innehåller en lista över AEM-användargrupper som användaren bör läggas till i. Kräver addGroupMemberships att den sätts till true. |
| Standard AEM-grupper | defaultGroups |
✘ | Strängarray | En lista över AEM-användargrupper som autentiserade användare alltid läggs till i (till exempel [ "wknd-user" ]). Kräver addGroupMemberships att den sätts till true. |
|
| NameIDPolicy-format | nameIdFormat |
✘ | Sträng | urn:oasis:names:tc:SAML:2.0:nameid-format:transient |
Värdet på NamnIDPolicy-formatparametern som ska skickas in AuthnRequest-meddelandet. |
| Svar på Store SAML | storeSAMLResponse |
✘ | Boolesk | false |
Indikerar om samlResponse värdet lagras på AEM-noden cq:User . |
| Hantera utloggning | handleLogout |
✘ | Boolesk | false |
Indikerar om utloggningsbegäran hanteras av denna SAML-autentiseringshanterare. Måste logoutUrl vara inställd. |
| Loggout-URL | logoutUrl |
✘ | Sträng | IDP:ns URL dit SAML-utloggningsförfrågan skickas till. Krävs om handleLogout är satt till true. |
|
| Klocktolerans | clockTolerance |
✘ | Heltal | 60 |
IDP- och AEM (SP)-klocksnedvridningstolerans vid validering av SAML-påståenden. |
| Sammanfattningsmetod | digestMethod |
✘ | Sträng | http://www.w3.org/2001/04/xmlenc#sha256 |
Den sammandragsalgoritm som IDP använder vid signering av ett SAML-meddelande. |
| Signaturmetod | signatureMethod |
✘ | Sträng | http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 |
Signaturalgoritmen som IDP:n använder när de signerar ett SAML-meddelande. |
| Identitetssynkroniseringstyp | identitySyncType |
✘ | default eller idp |
default |
Ändra from inte standarden för AEM som molntjänst. |
| Tjänsteranking | service.ranking |
✘ | Heltal | 5002 |
Högre rankade konfigurationer föredras för samma path. |
AEM-användarattribut aem-user-attributes
AEM använder följande användarattribut, som kan fyllas i via egenskapen synchronizeAttributes i Adobe Granite SAML 2.0 Authentication Handler OSGi-konfigurationen. Alla IDP-attribut kan synkroniseras med vilken AEM-användaregenskap som helst, men mappning till AEM-användningsattributegenskaper (listad nedan) gör att AEM naturligt kan använda dem.
| 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 | |
|---|---|
| Användarattribut | Relativ egenskapsväg från rep:User nod |
Titel (till exempel, Mrs) |
profile/title |
| Förnamn (dvs. förnamn) | profile/givenName |
| Familjenamn (dvs. efternamn) | profile/familyName |
| Jobbtitel | profile/jobTitle |
| E-postadress | profile/email |
| Gatuadress | profile/street |
| Stad | profile/city |
| Postnummer | profile/postalCode |
| Land | profile/country |
| Telefonnummer | profile/phoneNumber |
| Om mig | profile/aboutMe |
-
Skapa en OSGi-konfigurationsfil i ditt projekt på
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.auth.saml.SamlAuthenticationHandler~saml.cfg.jsonoch öppna i din IDE.- Ändra
/wknd-examples/till din/<project name>/ - Identifieraren efter
~i filnamnet bör unikt identifiera den här konfigurationen, så det kan vara namnet på IDP:n, till exempel...~okta.cfg.json. Värdet ska vara alfanumeriskt med bindestreck.
- Ändra
-
Klistra in följande JSON i filen
com.adobe.granite.auth.saml.SamlAuthenticationHandler~...cfg.jsonoch uppdaterawknd-referenserna efter behov.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" ] } -
Uppdatera de värden som krävs för projektet. Se SAML 2.0 Authentication Handler OSGi-konfigurationsordlistan ovan för beskrivningar av konfigurationsegenskaper. De
pathbör innehålla innehållsträd som skyddas av slutna användargrupper (CUG) och kräver autentisering, och denna autentiseringshanterare bör ansvara för skyddet. -
Vi rekommenderar, men behöver inte göra det, att du använder OSGi-miljövariabler och hemligheter när värdena kan ändras osynkroniserade med versionscykeln eller när värdena skiljer sig åt mellan liknande miljötyper/tjänstnivåer. Standardvärden kan ställas in med syntaxen
$[env:..;default=the-default-value]"som visas ovan.
OSGi-konfigurationer per miljö (config.publish.dev, config.publish.stage, och config.publish.prod) kan definieras med specifika attribut om SAML-konfigurationen varierar mellan miljöer.
Använd kryptering
Vid kryptering av AuthnRequest- och SAML-assertionen krävs följande egenskaper: useEncryption, spPrivateKeyAlias, och keyStorePassword. Innehåller keyStorePassword ett lösenord, därför får värdet inte lagras i OSGi-konfigurationsfilen, utan istället injiceras med hjälp av hemliga konfigurationsvärden
-
Öppna
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.auth.saml.SamlAuthenticationHandler~saml.cfg.jsoni din IDE. -
Lägg till de tre egenskaperna
useEncryption,spPrivateKeyAlias, ochkeyStorePasswordsom visas nedan.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" ] } -
De tre OSGi-konfigurationsegenskaper som krävs för kryptering är:
useEncryptionStäll in påtruespPrivateKeyAliasinnehåller nyckellagringsinskrymningsalias för den privata nyckel som används av SAML-integrationen.keyStorePasswordinnehåller en OSGi-hemlig konfigurationsvariabel som innehållerauthentication-serviceanvändarens nyckelstores lösenord.
Configure Referrer-filter
Under SAML-autentiseringsprocessen initierar IDP:n en klientsida HTTP POST till AEM Publishs .../saml_login slutpunkt. Om IDP och AEM Publish finns på en annan plats är AEM Publish Referer-filter konfigurerat via OSGi-konfigurationen för att tillåta HTTP POST från IDP:ns ursprung.
-
Skapa (eller redigera) en OSGi-konfigurationsfil i ditt projekt på
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/org.apache.sling.security.impl.ReferrerFilter.cfg.json.- Ändra
/wknd-examples/till din/<project name>/
- Ändra
-
Kontrollera att värdet
allow.emptyär inställt påtrue, attallow.hosts(eller om du föredrarallow.hosts.regexp) innehåller IDP:ns ursprung och attfilter.methodsinkluderarPOST. OSGi-konfigurationen ska vara som: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 har stöd för en enda konfiguration av referensfilter, så sammanfoga SAML-konfigurationskraven med befintliga konfigurationer.
OSGi-konfigurationer per miljö (config.publish.dev, config.publish.stage och config.publish.prod) kan definieras med specifika attribut om allow.hosts (eller allow.hosts.regex) varierar mellan miljöer.
Konfigurera Cross-Origin Resource Sharing (CORS)
Under SAML-autentiseringsprocessen initierar IDP en HTTP POST på klientsidan till AEM Publish .../saml_login-slutpunkten. Om IDP och AEM Publish finns på olika värdar/domäner måste AEM Publish CRoss-Origin Resource Sharing (CORS) konfigureras så att HTTP POST tillåts från IDP:s värd/domän.
HTTP POST-begärans Origin-huvud har vanligtvis ett annat värde än AEM Publish-värden, vilket kräver CORS-konfiguration.
När SAML-autentisering testas på det lokala AEM SDK:n (localhost:4503), kan IDP:n ställa in Origin headern till null. Om så är fallet, lägg till "null" på listan alloworigin .
-
Skapa en OSGi-konfigurationsfil i ditt projekt på
/ui.config/src/main/content/jcr_root/wknd-examples/osgiconfig/config.publish/com.adobe.granite.cors.impl.CORSPolicyImpl~saml.cfg.json- Byt
/wknd-examples/namn på ditt projekt - Identifieraren efter i
~filnamnet bör unikt identifiera denna konfiguration, så det kan vara namnet på IDP:n, såsom...CORSPolicyImpl~okta.cfg.json. Värdet ska vara alfanumeriskt med bindestreck.
- Byt
-
Klistra in följande JSON i filen
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"
]
}
OSGi-konfigurationer per miljö (config.publish.dev, config.publish.stage, och config.publish.prod) kan definieras med specifika attribut om och alloworigin allowedpaths varierar mellan miljöer.
Konfigurera AEM Dispatcher för att tillåta SAML HTTP POSTs
Efter framgångsrik autentisering till IDP:n kommer IDP:n att orkestrera en HTTP POST tillbaka till AEM:s registrerade /saml_login slutpunkt (konfigurerad i IDP:n). Denna HTTP POST till /saml_login blockeras som standard hos Dispatcher, så den måste uttryckligen tillåtas med följande Dispatcher-regel:
- Öppna
dispatcher/src/conf.dispatcher.d/filters/filters.anyi din IDE. - Lägg till längst ner i filen en tillåt-regel för HTTP POSTs till URL:er som slutar på
/saml_login.
...
# Allow SAML HTTP POST to ../saml_login end points
/0190 { /type "allow" /method "POST" /url "*/saml_login" }
Om URL-omskrivning på Apache-webbservern är konfigurerad (dispatcher/src/conf.d/rewrites/rewrite.rules), se till att förfrågningar till .../saml_login slutpunkterna inte av misstag förstörs.
Dynamiskt gruppmedlemskap
Dynamiskt gruppmedlemskap är en funktion i Apache Jackrabbit Oak som ökar prestandan vid grupputvärdering och provisionering. Detta avsnitt beskriver hur användare och grupper lagras när denna funktion aktiveras och hur man kan ändra konfigurationen av SAML Authentication Handler för att möjliggöra den för nya eller befintliga miljöer.
Hur man aktiverar dynamiskt gruppmedlemskap för SAML-användare i nya miljöer
För att avsevärt förbättra grupputvärderingsprestandan i nya AEM som molntjänst-miljöer rekommenderas aktivering av funktionen Dynamiskt gruppmedlemskap i nya miljöer.
Detta är också ett nödvändigt steg när datasynkronisering aktiveras. Mer information här .
För att göra detta, lägg till följande egenskap i OSGI-konfigurationsfilen:
/apps/example/osgiconfig/config.publish/com.adobe.granite.auth.saml.SamlAuthenticationHandler~example.cfg.json
Med denna konfiguration skapas användare och grupper som Oak Externa användare. I AEM har externa användare och grupper en standard rep:principalName komponerad av [user name];[idp] eller [group name];[idp].
Observera att åtkomstkontrolllistor (ACL) är kopplade till användarnas eller gruppers huvudnamn.
När denna konfiguration distribueras i en befintlig distribution där det tidigare identitySyncType inte specificerades eller sattes till default, kommer nya användare och grupper att skapas och ACL måste tillämpas på dessa nya användare och grupper. Observera att externa grupper inte kan innehålla lokala användare. Repoinit kan användas för att skapa ACL för SAML Externa grupper, även om de bara skapas när användaren gör en inloggning.
För att undvika denna omstrukturering på ACL har en standard migreringsfunktion implementerats.
Hur medlemskap lagras i lokala och externa grupper med dynamiskt gruppmedlemskap
På lokala grupper lagras gruppmedlemmarna i ekattributet: rep:members. Attributet innehåller listan över uid för varje medlem i gruppen. Ytterligare detaljer finns här.
Exempel:
{
"jcr:primaryType": "rep:Group",
"rep:principalName": "operators",
"rep:managedByIdp": "SAML",
"rep:members": [
"635afa1c-beeb-3262-83c4-38ea31e5549e",
"5e496093-feb6-37e9-a2a1-7c87b1cec4b0",
...
],
...
}
Externa grupper med dynamiskt gruppmedlemskap lagrar ingen medlem i gruppposten.
Gruppmedlemskapet lagras istället i användarens poster. Ytterligare dokumentation finns här. Till exempel är detta OAK-noden för gruppen:
{
"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"
}
Detta är noden för en användarmedlem i den gruppen:
{
"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"
],
...
}
Aktivera dynamiskt gruppmedlemskap för SAML-användare i befintliga miljöer
Som förklaras i föregående avsnitt skiljer sig formatet för externa användare och grupper något från formatet som används för lokala användare och grupper. Det går att definiera en ny åtkomstkontrollista för externa grupper och etablera nya externa användare, eller använda migreringsverktyget enligt beskrivningen nedan.
Aktivera dynamiskt gruppmedlemskap för befintliga miljöer med externa användare
Hanteraren för SAML-autentisering skapar externa användare när följande egenskap anges: "identitySyncType": "idp". I detta fall kan dynamiskt gruppmedlemskap aktiveras genom att modifiera denna egenskap till: "identitySyncType": "idp_dynamic". Ingen migration krävs.
Automatisk migrering till dynamiskt gruppmedlemskap för befintliga miljöer med lokala användare
SAML-autentiseringshanteraren skapar lokala användare när följande egenskap anges "identitySyncType": "default": . Detta är också standardvärdet när egenskapen inte är specificerad. I detta avsnitt beskriver vi de steg som utförs av den automatiska migrationsproceduren.
När denna migrering är aktiverad utförs den under användarautentisering och består av följande steg:
- Den lokala användaren migreras till en extern användare samtidigt som det ursprungliga användarnamnet bevaras. Det innebär att migrerade lokala användare, som nu fungerar som externa användare, behåller sitt ursprungliga användarnamn i stället för att följa den namnsyntax som nämndes i föregående avsnitt. Ytterligare en egenskap läggs till med namnet
rep:externalIdoch värdet[user name];[idp]. AnvändarenPrincipalNamehar inte ändrats. - För varje extern grupp som tas emot i SAML-försäkran skapas en extern grupp. Om det finns en motsvarande lokal grupp läggs den externa gruppen till som medlem i den lokala gruppen.
- Användaren läggs till som medlem i den externa gruppen.
- Den lokala användaren tas sedan bort från alla lokala Saml-grupper han var medlem i. Saml lokala grupper identifieras av OAK-egenskapen:
rep:managedByIdp. Den här egenskapen anges av hanteraren för Saml-autentisering när attributetsyncTypeinte har angetts eller angetts tilldefault.
Om migreringen user1 till exempel är en lokal användare och medlem i den lokala gruppen group1 sker följande ändringar efter migreringen:user1 blir en extern användare. Attributet rep:externalId har lagts till i den här profilen.user1 blir medlem i den externa gruppen: group1;idpuser1 är inte längre en direkt medlem i den lokala gruppen: group1group1;idp är medlem i den lokala gruppen: group1.user1 är sedan medlem i den lokala gruppen: group1 genom arv
Gruppmedlemskapet för externa grupper lagras i användarprofilen i egenskapen rep:externalPrincipalNames
Konfigurera automatisk migrering till dynamiskt gruppmedlemskap
- Aktivera egenskapen
"identitySyncType": "idp_dynamic_simplified_id"i SAML OSGi-konfigurationsfilen:com.adobe.granite.auth.saml.SamlAuthenticationHandler~...cfg.json: - Konfigurera den nya OSGi-tjänsten med Factory PID som börjar med:
com.adobe.granite.auth.saml.migration.SamlDynamicGroupMembershipMigration~. Ett PID kan till exempel vara:com.adobe.granite.auth.saml.migration.SamlDynamicGroupMembershipMigration~myIdP. Ange följande egenskap:
{
"idpIdentifier": "<value of IDP Identifier (idpIdentifier)" property from the "com.adobe.granite.auth.saml.SamlAuthenticationHandler" configuration to be migrated>"
}
Om du vill migrera flera SAML-konfigurationer måste du skapa flera OSGi-fabrikskonfigurationer för com.adobe.granite.auth.saml.migration.SamlDynamicGroupMembershipMigration, där var och en anger en idpIdentifier som ska migreras.
Distribuera SAML-konfiguration
OSGi-konfigurationerna måste implementeras i Git och distribueras till AEM as a Cloud Service med 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
Distribuera Cloud Manager Git-målgrenen (i det här exemplet develop) med hjälp av en pipeline för distribution av Full Stack.
Anropa SAML-autentisering
SAML-autentiseringsflödet kan anropas från en AEM-webbplats, genom att skapa särskilt utformade länkar eller knappar. De parametrar som beskrivs nedan kan programmatiskt ställas in vid behov, så till exempel kan en inloggningsknapp ställa in saml_request_path, vilket är där användaren tas vid lyckad SAML-autentisering, till olika AEM-sidor, baserat på knappens kontext.
Säker cache medan jag använder SAML
På AEM publiceringsinstansen är de flesta sidor vanligtvis cachade. För SAML-skyddade vägar bör dock caching antingen inaktiveras eller säkrad caching aktiveras med auth_checker-konfigurationen. Mer information finns i här
Observera att om du cachelagrar skyddade sökvägar utan att aktivera auth_checker kan du uppleva oförutsägbara beteenden.
GET-begäran
SAML-autentisering kan anropas genom att skapa en HTTP GET-förfrågan i formatet:
HTTP GET /system/sling/login
och tillhandahåller frågeparametrar:
resourcepath egenskap.saml_request_pathTill exempel kommer denna HTML-länk att trigga SAML:s inloggningsflöde, och när det lyckas tas användaren till /content/wknd/us/en/protected/page.html. Dessa frågeparametrar kan programmatiskt ställas in efter behov.
<a href="/system/sling/login?resource=/content/wknd&saml_request_path=/content/wknd/us/en/protected/page.html">
Log in using SAML
</a>
POST-förfrågan
SAML-autentisering kan anropas genom att skapa en HTTP POST-förfrågan i formatet:
HTTP POST /system/sling/login
och tillhandahålla formulärdata:
resourcepath egenskap.saml_request_pathTill exempel använder denna HTML-knapp en HTTP POST för att trigga SAML-inloggningsflödet, och när det lyckas ta användaren till /content/wknd/us/en/protected/page.html. Dessa formulärdataparametrar kan programmatiskt ställas in efter behov.
<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>
Dispatcherkonfiguration
Både HTTP GET och POST-metoderna kräver klientåtkomst till AEM:s /system/sling/login endpoints, och därför måste de tillåtas via AEM Dispatcher.
Tillåt nödvändiga URL-mönster baserat på om GET eller POST används
# 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" }