Autentiseringsuppgifter för tjänsten
Integrationer med Adobe Experience Manager (AEM) as a Cloud Service måste kunna autentiseras på ett säkert sätt AEM tjänsten. AEM Developer Console ger åtkomst till Service Credentials, som används för att underlätta externa program, system och tjänster att interagera programmatiskt med AEM Author eller Publish-tjänster via HTTP.
AEM integreras med andra Adobe-produkter med hjälp av S2S OAuth som hanteras via Adobe Developer Console. För anpassade integreringar med tjänstkonton används och hanteras JWT-autentiseringsuppgifter i AEM Developer Console.
Autentiseringsuppgifterna för tjänsten kan se ut som Åtkomsttoken för lokal utveckling men skiljer sig på några viktiga sätt:
- Autentiseringsuppgifter för tjänsten är kopplade till tekniska konton. Flera tjänstreferenser kan vara aktiva för ett tekniskt konto.
- Tjänstautentiseringsuppgifterna är inte åtkomsttoken, utan de är autentiseringsuppgifter som används för att hämta åtkomsttoken.
- Tjänstautentiseringsuppgifterna är mer permanenta (certifikatet upphör att gälla var 365:e dag) och ändras inte om det inte återkallas, medan token för lokal utvecklingsåtkomst upphör att gälla dagligen.
- Tjänstautentiseringsuppgifter för en AEM as a Cloud Service-miljö mappas till en enda AEM användare, medan Local Development Access-token autentiseras som den AEM användaren som genererade åtkomsttoken.
- En AEM as a Cloud Service-miljö kan ha upp till tio tekniska konton, var och en med sina egna Service Credentials, där varje mappning görs till ett separat tekniskt konto AEM användaren.
Både tjänstautentiseringsuppgifter och åtkomsttoken som de genererar, och token för lokal utvecklingsåtkomst, ska hållas hemliga. Som alla tre kan användas för att få tillgång till deras respektive AEM as a Cloud Service-miljö.
Generera autentiseringsuppgifter för tjänsten
Generering av servicereferenser delas upp i två steg:
- Ett tekniskt konto som skapas en gång av en Adobe IMS-organisationsadministratör
- Hämtning och användning av JSON för tjänstreferenser för det tekniska kontot
Skapa ett tekniskt konto
Till skillnad från token för lokal utvecklingsåtkomst kräver tjänstautentiseringsuppgifter att ett tekniskt konto skapas av en IMS-administratör för Adobe Org innan de kan hämtas. Separata tekniska konton bör skapas för varje klient som kräver programmatisk åtkomst till AEM.
Tekniska konton skapas en gång, men de privata nycklarna använder för att hantera tjänstens autentiseringsuppgifter som är kopplade till det tekniska kontot. De kan hanteras med tiden. Till exempel måste nya privata nycklar/autentiseringsuppgifter för tjänsten genereras innan den aktuella privata nyckeln förfaller, så att en användare av tjänstautentiseringsuppgifterna kan få tillgång utan avbrott.
-
Se till att du är inloggad som:
- Systemadministratör för Adobe IMS-organisation
- Medlem av AEM administratörer IMS-produktprofil på AEM författare
-
Logga in på Adobe Cloud Manager
-
Öppna programmet som innehåller AEM as a Cloud Service-miljön för att integrera inställningarna för tjänstens autentiseringsuppgifter för
-
Tryck på ellipsen bredvid miljön i avsnittet Miljö och välj Developer Console
-
Tryck på fliken Integrationer
-
Tryck på fliken Tekniska konton
-
Tryck på knappen Skapa nytt tekniskt konto
-
Det tekniska kontots inloggningsuppgifter initieras och visas som JSON
När AEM som Cloud Service-miljöns tjänstautentiseringsuppgifter har initierats kan andra AEM i din Adobe IMS-organisation hämta dem.
Hämta tjänstens autentiseringsuppgifter
När du hämtar tjänstens autentiseringsuppgifter följer du stegen som är desamma som initieringen.
-
Se till att du är inloggad som:
- Administratör för Adobe IMS-organisation
- Medlem av AEM administratörer IMS-produktprofil på AEM författare
-
Logga in på Adobe Cloud Manager
-
Öppna programmet som innehåller AEM as a Cloud Service-miljön som du kan integrera med
-
Tryck på ellipsen bredvid miljön i avsnittet Miljö och välj Developer Console
-
Tryck på fliken Integrationer
-
Tryck på fliken Tekniska konton
-
Expandera det tekniska kontot som ska användas
-
Expandera den privata nyckeln vars tjänstautentiseringsuppgifter ska hämtas och kontrollera att statusen är Aktiv
-
Tryck på … > Visa som är associerad med den privata nyckeln, som visar JSON för tjänstautentiseringsuppgifter
-
Tryck på nedladdningsknappen i det övre vänstra hörnet för att hämta JSON-filen som innehåller värdet för tjänstens autentiseringsuppgifter och spara filen på en säker plats
Installera autentiseringsuppgifterna för tjänsten
Tjänstautentiseringsuppgifterna innehåller den information som behövs för att generera en JWT, som byts ut mot en åtkomsttoken som används för att autentisera med AEM as a Cloud Service. Tjänstinloggningsuppgifterna måste lagras på en säker plats som är tillgänglig för externa program, system eller tjänster som använder dem för att få åtkomst till AEM. Hur och var serviceautentiseringsuppgifterna hanteras är unika per kund.
För enkelhetens skull skickar den här självstudiekursen tjänstens autentiseringsuppgifter via kommandoraden. Samarbeta dock med IT-säkerhetsteamet för att förstå hur du ska lagra och få tillgång till dessa uppgifter i enlighet med organisationens säkerhetsriktlinjer.
- Kopiera hämtade JSON för tjänstautentiseringsuppgifter till en fil med namnet
service_token.json
i projektets rot- Kom ihåg att aldrig implementera några autentiseringsuppgifter för Git!
Använd tjänstens autentiseringsuppgifter
Tjänstautentiseringsuppgifterna, som är ett fullständigt JSON-objekt, är inte samma som JWT eller åtkomsttoken. I stället används tjänstens autentiseringsuppgifter (som innehåller en privat nyckel) för att generera en JWT, som byts ut mot Adobe IMS API:er för en åtkomsttoken.
- Hämta tjänstens autentiseringsuppgifter från AEM Developer Console till en säker plats
- Det externa programmet behöver programmässigt interagera med AEM as a Cloud Service-miljön
- Det externa programmet läser i tjänstens autentiseringsuppgifter från en säker plats
- Det externa programmet använder information från tjänstens autentiseringsuppgifter för att skapa en JWT-token
- JWT-token skickas till Adobe IMS för utbyte mot en åtkomsttoken
- Adobe IMS returnerar en åtkomsttoken som kan användas för åtkomst till AEM as a Cloud Service
- Åtkomsttoken kan inte ändra en förfallotid.
- Det externa programmet gör HTTP-begäranden till AEM as a Cloud Service och lägger till åtkomsttoken som en Bearer-token i HTTP-begäransens auktoriseringshuvud
- AEM as a Cloud Service tar emot HTTP-begäran, autentiserar begäran och utför det arbete som begärdes av HTTP-begäran och returnerar ett HTTP-svar till det externa programmet
Uppdateringar till det externa programmet
För att få åtkomst till AEM as a Cloud Service med hjälp av tjänstens autentiseringsuppgifter måste det externa programmet uppdateras på tre sätt:
- Läs i tjänstens autentiseringsuppgifter
- För enkelhetens skull läses tjänstens autentiseringsuppgifter in från den hämtade JSON-filen, men i realtidsscenarier måste tjänstens autentiseringsuppgifter lagras på ett säkert sätt i enlighet med organisationens säkerhetsriktlinjer
- Generera en JWT från tjänstens autentiseringsuppgifter
- Byt ut JWT för en åtkomsttoken
- När tjänstautentiseringsuppgifter finns använder det externa programmet denna åtkomsttoken i stället för den lokala utvecklingsåtkomsttoken vid åtkomst till AEM as a Cloud Service
I den här självstudiekursen används modulen Adobe @adobe/jwt-auth
npm för att både (1) generera JWT från tjänstens autentiseringsuppgifter och (2) byta ut det mot en åtkomsttoken i ett enda funktionsanrop. Om ditt program inte är JavaScript-baserat kan du läsa exempelkoden på andra språk för hur du skapar en JWT från tjänstens autentiseringsuppgifter och byta ut den mot en åtkomsttoken med Adobe IMS.
Läs autentiseringsuppgifterna för tjänsten
Granska getCommandLineParams()
så att du kan se hur JSON-filen för tjänstautentiseringsuppgifter läses med samma kod som används för att läsa i JSON-token för lokal utvecklingsåtkomst.
function getCommandLineParams() {
...
// Read in the credentials from the provided JSON file
// Since both the Local Development Access Token and Service Credentials files are JSON, this same approach can be re-used
if (parameters.file) {
parameters.developerConsoleCredentials = JSON.parse(fs.readFileSync(parameters.file));
}
...
return parameters;
}
Skapa en JWT och byt ut mot en Access-token
När tjänstens autentiseringsuppgifter läses används de för att generera en JWT som sedan byts ut mot Adobe IMS API:er för en åtkomsttoken. Denna åtkomsttoken kan sedan användas för åtkomst till AEM as a Cloud Service.
Exempelprogrammet är Node.js-baserat, så det är bäst att använda modulen @adobe/jwt-auth npm för att underlätta (1) JWT-generering och (20) utbyte med Adobe IMS. Om ditt program har utvecklats på ett annat språk kan du läsa de lämpliga kodexemplen om hur du konstruerar HTTP-begäran för Adobe IMS med andra programmeringsspråk.
-
Uppdatera
getAccessToken(..)
för att inspektera JSON-filens innehåll och avgöra om den representerar en lokal utvecklingsåtkomsttoken eller tjänstautentiseringsuppgifter. Detta kan enkelt uppnås genom att kontrollera om egenskapen.accessToken
finns, vilket bara finns för Local Development Access Token JSON.Om Service Credentials anges genererar programmet en JWT och byter ut den mot Adobe IMS för en åtkomsttoken. Använd funktionen
auth(...)
för @adobe/jwt-auth som genererar en JWT och byter ut den mot en åtkomsttoken i ett enda funktionsanrop. Parametrarna för metodenauth(..)
är ett JSON-objekt som består av specifik informationsom finns tillgänglig från JSON för tjänstautentiseringsuppgifter, vilket beskrivs nedan i koden.
async function getAccessToken(developerConsoleCredentials) {
if (developerConsoleCredentials.accessToken) {
// This is a Local Development access token
return developerConsoleCredentials.accessToken;
} else {
// This is the Service Credentials JSON object that must be exchanged with Adobe IMS for an access token
let serviceCredentials = developerConsoleCredentials.integration;
// Use the @adobe/jwt-auth library to pass the service credentials generated a JWT and exchange that with Adobe IMS for an access token.
// If other programming languages are used, please see these code samples: https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/JWT/samples/samples.md
let { access_token } = await auth({
clientId: serviceCredentials.technicalAccount.clientId, // Client Id
technicalAccountId: serviceCredentials.id, // Technical Account Id
orgId: serviceCredentials.org, // Adobe IMS Org Id
clientSecret: serviceCredentials.technicalAccount.clientSecret, // Client Secret
privateKey: serviceCredentials.privateKey, // Private Key to sign the JWT
metaScopes: serviceCredentials.metascopes.split(','), // Meta Scopes defining level of access the access token should provide
ims: `https://${serviceCredentials.imsEndpoint}`, // IMS endpoint used to obtain the access token from
});
return access_token;
}
}
Beroende på vilken JSON-fil (Local Development Access Token JSON eller Service Credentials JSON) som skickas via kommandoradsparametern "file", kommer programmet nu att erhålla en åtkomsttoken.
Kom ihåg att medan tjänstautentiseringsuppgifterna upphör att gälla var 365:e dag så upphör JWT och motsvarande åtkomsttoken ofta att gälla och måste uppdateras innan de går ut. Detta kan du göra genom att använda en refresh_token [tillhandahålls av Adobe IMS](https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/OAuth/OAuth.md#access-tokens).
-
När de här ändringarna är på plats hämtades JSON för tjänstreferenser från AEM Developer Console och sparades som
service_token.json
i samma mapp som dennaindex.js
. Nu kör vi programmet som ersätter kommandoradsparameternfile
medservice_token.json
och uppdaterarpropertyValue
till ett nytt värde så att effekterna syns i AEM.code language-shell $ node index.js \ aem=https://author-p1234-e5678.adobeaemcloud.com \ folder=/wknd-shared/en/adventures/napa-wine-tasting \ propertyName=metadata/dc:rights \ propertyValue="WKND Restricted Use" \ file=service_token.json
Utdata till terminalen ser ut så här:
code language-shell 200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting.json 403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json 403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json 403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json 403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
Raderna 403 - Otillåten anger fel i HTTP API-anropen till AEM as a Cloud Service. Dessa 403 får inte förekomma när metadata för resurserna uppdateras.
Orsaken till detta är att en åtkomsttoken härledd till tjänsten autentiserar begäran till AEM med ett automatiskt skapat tekniskt konto AEM användaren, som som standard endast har läsåtkomst. För att ge programmet skrivåtkomst till AEM måste det tekniska konto AEM användare som är associerad med åtkomsttoken beviljas behörighet i AEM.
Konfigurera åtkomst i AEM
Åtkomsttoken härledd för tjänstautentiseringsuppgifter använder ett tekniskt konto AEM användare som har medlemskap i AEM Contributors.
När det tekniska kontot AEM användaren finns i AEM (efter den första HTTP-begäran med åtkomsttoken) kan den här AEM användarens behörigheter hanteras på samma sätt som andra AEM.
- Leta först reda på det tekniska kontots AEM inloggningsnamn genom att öppna JSON för tjänstautentiseringsuppgifter som hämtats från AEM Developer Console och leta reda på värdet
integration.email
, som ska se ut ungefär som:12345678-abcd-9000-efgh-0987654321c@techacct.adobe.com
. - Logga in på motsvarande AEM författartjänst som AEM administratör
- Navigera till Verktyg > Säkerhet > Användare
- Leta reda på AEM användare med inloggningsnamnet som identifieras i steg 1 och öppna dess egenskaper
- Navigera till fliken Grupper och lägg till gruppen DAM-användare (som skrivåtkomst till resurser)
- Se listan över AEM användargrupper som du kan lägga till tjänstanvändaren i för att få optimala behörigheter. Om det inte finns tillräckligt med AEM användargrupp skapar du en egen och lägger till rätt behörigheter.
- Tryck på Spara och stäng
Kör programmet igen med det tekniska konto som AEM har skrivbehörighet för resurser:
$ node index.js \
aem=https://author-p1234-e5678.adobeaemcloud.com \
folder=/wknd-shared/en/adventures/napa-wine-tasting \
propertyName=metadata/dc:rights \
propertyValue="WKND Restricted Use" \
file=service_token.json
Utdata till terminalen ser ut så här:
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd-shared/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json
Verifiera ändringarna
- Logga in i AEM as a Cloud Service-miljön som har uppdaterats (med samma värdnamn som finns i kommandoradsparametern
aem
) - Navigera till Assets > Filer
- Navigera till resursmappen som anges av kommandoradsparametern
folder
, till exempel WKND > Engelska > Anteckningar > Napa-vindstick - Öppna egenskaperna för alla resurser i mappen
- Gå till fliken Avancerat
- Granska värdet för den uppdaterade egenskapen, till exempel Copyright som är mappad till den uppdaterade JCR-egenskapen
metadata/dc:rights
som nu återspeglar värdet som anges i parameternpropertyValue
, till exempel WKND begränsad användning
Grattis!
Nu när vi programmatiskt har kommit åt AEM as a Cloud Service via en lokal åtkomsttoken och en produktionsklar åtkomsttoken för tjänsten till tjänsten!