Le integrazioni con AEM as a Cloud Service devono essere in grado di eseguire l’autenticazione in modo sicuro per AEM. AEM Developer Console consente di accedere alle credenziali del servizio, utilizzate per facilitare l’interazione programmatica di applicazioni, sistemi e servizi esterni con i servizi di authoring o pubblicazione AEM tramite HTTP.
Le credenziali del servizio possono apparire simili Token di accesso allo sviluppo locale ma sono diversi in alcuni modi chiave:
Sia le credenziali di servizio che i token di accesso da esse generati, nonché i token di accesso allo sviluppo locale dovrebbero essere mantenuti segreti, in quanto tutti e tre possono essere utilizzati per ottenere l'accesso ai rispettivi ambienti AEM as a Cloud Service
La generazione delle credenziali del servizio è suddivisa in due passaggi:
Le credenziali del servizio, a differenza dei token di accesso allo sviluppo locale, richiedono un inizializzazione una tantum dall’amministratore IMS dell’organizzazione Adobe prima di poter scaricare i file.
Si tratta di un'inizializzazione una tantum per AEM ambiente as a Cloud Service
Una volta inizializzata l’AEM come credenziali di servizio dell’ambiente di Cloud Service, altri sviluppatori AEM nella tua organizzazione Adobe IMS possono scaricarle.
Il download delle credenziali del servizio segue gli stessi passaggi dell'inizializzazione. Se l'inizializzazione non si è ancora verificata, all'utente verrà visualizzato un errore che causa il tocco del pulsante Ottieni credenziali servizio pulsante .
Le credenziali del servizio forniscono i dettagli necessari per generare un JWT, scambiato con un token di accesso utilizzato per l’autenticazione con AEM as a Cloud Service. Le credenziali del servizio devono essere archiviate in un percorso sicuro accessibile dalle applicazioni, dai sistemi o dai servizi esterni che le utilizzano per accedere alle AEM. Come e dove vengono gestite le credenziali del servizio saranno univoci per cliente.
Per semplicità, questa esercitazione passa le credenziali di servizio in tramite la riga di comando, tuttavia, collabora con il tuo team di sicurezza IT per comprendere come archiviare e accedere a tali credenziali in conformità alle linee guida di sicurezza della tua organizzazione.
service_token.json
nella directory principale del progetto
Le credenziali del servizio, un oggetto JSON completo, non sono uguali né al JWT né al token di accesso. Le credenziali del servizio (che contengono una chiave privata) vengono invece utilizzate per generare un JWT, che viene scambiato con le API Adobe IMS per un token di accesso.
Per accedere AEM as a Cloud Service tramite le credenziali del servizio, l’applicazione esterna deve essere aggiornata in 3 modi:
In questa esercitazione, Adobe @adobe/jwt-auth
Il modulo npm viene utilizzato per entrambi, (1) generare il JWT dalle credenziali del servizio e (2) scambiarlo per un token di accesso, in una singola chiamata di funzione. Se la tua applicazione non è basata su JavaScript, controlla il codice di esempio in altre lingue per informazioni su come creare un JWT dalle credenziali del servizio e sostituirlo con un token di accesso con Adobe IMS.
Consulta la sezione getCommandLineParams()
e vedi che possiamo leggere nei file JSON delle credenziali del servizio utilizzando lo stesso codice usato per leggere nel JSON del token di accesso allo sviluppo locale.
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;
}
Una volta lette le credenziali del servizio, vengono utilizzate per generare un JWT che viene poi scambiato con le API Adobe IMS per un token di accesso, che può quindi essere utilizzato per accedere AEM as a Cloud Service.
Questa applicazione di esempio è basata su Node.js, quindi è meglio utilizzare @adobe/jwt-auth modulo npm per facilitare la generazione (1) di JWT e lo scambio (20 con Adobe IMS. Se la tua applicazione viene sviluppata utilizzando un'altra lingua, consulta campioni di codice appropriati su come creare la richiesta HTTP ad Adobe IMS utilizzando altri linguaggi di programmazione.
Aggiorna getAccessToken(..)
per controllare il contenuto del file JSON e determinare se rappresenta un token di accesso allo sviluppo locale o credenziali di servizio. Ciò può essere facilmente ottenuto controllando l'esistenza del .accessToken
, che esiste solo per il token di accesso locale JSON del token.
Se vengono fornite le credenziali di servizio, l’applicazione genera un JWT e lo scambia con Adobe IMS per un token di accesso. Useremo il @adobe/jwt-auths auth(...)
funzione che genera un JWT e lo scambia per un token di accesso in una singola chiamata di funzione. I parametri a auth(..)
è un Oggetto JSON composto da informazioni specifiche disponibile dal JSON delle credenziali del servizio, come descritto di seguito nel codice .
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;
}
}
Ora, a seconda del file JSON - il JSON del token di accesso allo sviluppo locale o il JSON delle credenziali del servizio - viene passato tramite file
parametro della riga di comando, l'applicazione deriva un token di accesso.
Tieni presente che, mentre le credenziali del servizio scadono ogni 365 giorni, il JWT e il token di accesso corrispondente scadono frequentemente e devono essere aggiornati prima della loro scadenza. Questo può essere fatto utilizzando un refresh_token
fornito da Adobe IMS.
Con queste modifiche, e il JSON delle credenziali del servizio scaricato dalla AEM Developer Console (e per semplicità, salvato come service_token.json
la stessa cartella index.js
), esegui l’applicazione sostituendo il parametro della riga di comando file
con service_token.json
e aggiorna propertyValue
a un nuovo valore in modo che gli effetti siano evidenti in AEM.
$ node index.js \
aem=https://author-p1234-e5678.adobeaemcloud.com \
folder=/wknd/en/adventures/napa-wine-tasting \
propertyName=metadata/dc:rights \
propertyValue="WKND Restricted Use" \
file=service_token.json
L'output sul terminale sarà simile al seguente:
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting.json
403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json
403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
La 403 - Vietato , indica gli errori nelle chiamate API HTTP a AEM as a Cloud Service. Questi 403 Errori proibiti si verificano quando si tenta di aggiornare i metadati delle risorse.
Il motivo è che il token di accesso derivato da Service Credentials autentica la richiesta per AEM utilizzando un account tecnico creato automaticamente AEM utente, che per impostazione predefinita ha accesso in sola lettura. Per fornire l’accesso in scrittura all’AEM dell’applicazione, è necessario concedere l’autorizzazione all’account tecnico AEM utente associato al token di accesso in AEM.
Il token di accesso derivato da Credenziali di servizio utilizza un account tecnico AEM Utente che ha l’appartenenza al gruppo di utenti AEM collaboratori.
Una volta che l'account tecnico AEM utente esiste in AEM (dopo la prima richiesta HTTP con il token di accesso), le autorizzazioni di questo utente AEM possono essere gestite come gli altri utenti AEM.
integration.email
, che deve essere simile a: 12345678-abcd-9000-efgh-0987654321c@techacct.adobe.com
.Se l’account tecnico in AEM dispone delle autorizzazioni di scrittura sulle risorse, esegui nuovamente l’applicazione:
$ node index.js \
aem=https://author-p1234-e5678.adobeaemcloud.com \
folder=/wknd/en/adventures/napa-wine-tasting \
propertyName=metadata/dc:rights \
propertyValue="WKND Restricted Use" \
file=service_token.json
L'output sul terminale sarà simile al seguente:
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json
aem
parametro della riga di comando)folder
parametro della riga di comando, ad esempio WKND > Inglese > Avventure > Degustazione di vino Napametadata/dc:rights
Proprietà JCR, che ora riflette il valore fornito nel propertyValue
, ad esempio Uso limitato WKNDOra che abbiamo effettuato l’accesso programmaticamente AEM as a Cloud Service utilizzando un token di accesso allo sviluppo locale e un token di accesso da servizio a servizio pronto per la produzione!