Credenziali del servizio

Le integrazioni con Adobe Experience Manager (AEM) as a Cloud Service devono essere in grado di eseguire l’autenticazione in modo sicuro al servizio AEM. Il Developer Console dell’AEM consente l’accesso alle credenziali del servizio, utilizzate per facilitare l’interazione programmatica tra applicazioni, sistemi e servizi esterni e l’AEM Author o i servizi Publish tramite HTTP.

AEM si integra con altri prodotti Adobe utilizzando S2S OAuth gestito tramite Adobe Developer Console. Per le integrazioni personalizzate con gli account di servizio, le credenziali JWT vengono utilizzate e gestite nel Developer Console dell’AEM.

Le credenziali del servizio potrebbero essere simili Token di accesso per lo sviluppo locale, ma sono diverse in alcuni modi:

  • Le credenziali del servizio sono associate agli account tecnici. Per un account tecnico possono essere attive più credenziali di servizio.
  • Le credenziali del servizio sono non token di accesso, ma sono credenziali utilizzate per ottenere token di accesso.
  • Le credenziali del servizio sono più permanenti (il loro certificato scade ogni 365 giorni) e non cambiano se non revocate, mentre i token di accesso per lo sviluppo locale scadono ogni giorno.
  • Le credenziali di servizio per un ambiente AEM as a Cloud Service vengono mappate a un singolo utente di account tecnico AEM, mentre i token di accesso per lo sviluppo locale vengono autenticati come utente AEM che ha generato il token di accesso.
  • Un ambiente AEM as a Cloud Service può disporre di un massimo di dieci account tecnici, ciascuno con le proprie credenziali di servizio, ciascuno dei quali corrisponde a un utente AEM con account tecnico discreto.

Sia le credenziali del servizio che i token di accesso generati e i token di accesso per lo sviluppo locale devono essere tenuti segreti. Poiché tutti e tre possono essere utilizzati per ottenere, l’accesso al rispettivo ambiente AEM as a Cloud Service.

Genera credenziali servizio

La generazione delle credenziali del servizio è suddivisa in due passaggi:

  1. Creazione di un account tecnico una tantum da parte di un amministratore dell’organizzazione Adobe IMS
  2. Download e utilizzo del codice JSON per le credenziali del servizio dell’account tecnico

Creare un account tecnico

A differenza dei token di accesso per lo sviluppo locale, le credenziali del servizio richiedono la creazione di un account tecnico da parte di un amministratore IMS dell’organizzazione di Adobi prima che sia possibile scaricarle. Devono essere creati conti tecnici discreti per ogni cliente che richiede un accesso programmatico all’AEM.

Crea un account tecnico

Gli account tecnici vengono creati una volta, tuttavia le chiavi private utilizzate per gestire le credenziali del servizio associate all’account tecnico possono essere gestite nel tempo. Ad esempio, è necessario generare nuove credenziali chiave privata/servizio prima della scadenza della chiave privata corrente, per consentire a un utente di accedere ininterrottamente alle credenziali del servizio.

  1. Assicurati di aver effettuato l’accesso come:

    • Amministratore di sistema dell'organizzazione Adobe IMS
    • Membro del profilo di prodotto IMS Amministratori AEM in Autore AEM
  2. Accedi a Adobe Cloud Manager

  3. Apri il programma contenente l’ambiente AEM as a Cloud Service per integrare configurare le credenziali del servizio per

  4. Tocca i puntini di sospensione accanto all'ambiente nella sezione Ambienti e seleziona Developer Console

  5. Tocca nella scheda Integrazioni

  6. Tocca la scheda Account tecnici

  7. Tocca Crea nuovo account tecnico

  8. Le credenziali di servizio dell’account tecnico vengono inizializzate e visualizzate come JSON

Developer Console AEM - Integrazioni - Ottieni credenziali servizio

Una volta inizializzate le credenziali del servizio dell’ambiente AEM as Cloud Service, possono essere scaricate da altri sviluppatori AEM della tua organizzazione Adobe IMS.

Scarica credenziali servizio

Scarica credenziali servizio

Il download delle credenziali del servizio segue la stessa procedura dell'inizializzazione.

  1. Assicurati di aver effettuato l’accesso come:

    • Amministratore organizzazione Adobe IMS
    • Membro del profilo di prodotto IMS Amministratori AEM in Autore AEM
  2. Accedi a Adobe Cloud Manager

  3. Apri il programma contenente l’ambiente AEM as a Cloud Service da integrare con

  4. Tocca i puntini di sospensione accanto all'ambiente nella sezione Ambienti e seleziona Developer Console

  5. Tocca nella scheda Integrazioni

  6. Tocca la scheda Account tecnici

  7. Espandi l'account tecnico da utilizzare

  8. Espandi la Chiave privata di cui verranno scaricate le credenziali del servizio e verifica che lo stato sia Attivo

  9. Tocca > Visualizza associata alla Chiave privata, che visualizza il codice JSON per le credenziali del servizio

  10. Tocca il pulsante Scarica nell’angolo in alto a sinistra per scaricare il file JSON contenente il valore delle credenziali del servizio e salvare il file in una posizione sicura

Installare le credenziali del servizio

Le credenziali del servizio forniscono i dettagli necessari per generare un JWT, che viene scambiato con un token di accesso utilizzato per l’autenticazione con AEM as a Cloud Service. Le credenziali del servizio devono essere archiviate in una posizione sicura accessibile dalle applicazioni, dai sistemi o dai servizi esterni che le utilizzano per accedere all'AEM. La modalità e la posizione di gestione delle credenziali del servizio sono univoche per cliente.

Per semplicità, questo tutorial trasmette le credenziali del servizio in tramite la riga di comando. Tuttavia, rivolgiti al tuo team di sicurezza IT per scoprire come memorizzare e accedere a queste credenziali in conformità alle linee guida di sicurezza della tua organizzazione.

  1. Copia il file JSON delle credenziali del servizio scaricato in un file denominato service_token.json nella radice del progetto
    • Ricorda, non eseguire mai il commit di credenziali in Git.

Usa credenziali servizio

Le credenziali del servizio, un oggetto JSON completo, non corrispondono al JWT né al token di accesso. Al contrario, le credenziali del servizio (che contengono una chiave privata) vengono utilizzate per generare un JWT, che viene scambiato con le API Adobe IMS per un token di accesso.

Credenziali servizio - Applicazione esterna

  1. Scaricare le credenziali del servizio dal Developer Console AEM in un percorso sicuro
  2. L’applicazione esterna deve interagire a livello di programmazione con l’ambiente AEM as a Cloud Service
  3. L'applicazione esterna legge le credenziali del servizio da un percorso sicuro
  4. L’applicazione esterna utilizza le informazioni contenute nelle credenziali del servizio per creare un token JWT
  5. Il token JWT viene inviato ad Adobe IMS per scambiarlo con un token di accesso
  6. Adobe IMS restituisce un token di accesso che può essere utilizzato per accedere ad AEM as a Cloud Service
    • I token di accesso non possono modificare un’ora di scadenza.
  7. L’applicazione esterna effettua richieste HTTP ad AEM as a Cloud Service, aggiungendo il token di accesso come token Bearer all’intestazione Autorizzazione delle richieste HTTP
  8. AEM as a Cloud Service riceve la richiesta HTTP, la autentica ed esegue il lavoro richiesto dalla richiesta HTTP e restituisce una risposta HTTP all’applicazione esterna.

Aggiornamenti dell’applicazione esterna

Per accedere ad AEM as a Cloud Service utilizzando le credenziali del servizio, è necessario aggiornare l’applicazione esterna in tre modi:

  1. Leggi nelle credenziali del servizio
  • Per semplicità, le credenziali del servizio vengono lette dal file JSON scaricato. Tuttavia, in scenari di utilizzo reale, le credenziali del servizio devono essere memorizzate in modo sicuro in conformità alle linee guida sulla sicurezza della tua organizzazione
  1. Generare un JWT dalle credenziali del servizio
  2. Sostituire il JWT con un token di accesso
  • Se sono presenti credenziali del servizio, l’applicazione esterna utilizza questo token di accesso invece del token di accesso per lo sviluppo locale, quando accede ad AEM as a Cloud Service

In questa esercitazione, il modulo npm @adobe/jwt-auth di Adobe 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 l'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 scambialo per un token di accesso con Adobe IMS.

Lettura delle credenziali del servizio

Rivedi getCommandLineParams() in modo da vedere come viene letto il file JSON delle credenziali del servizio utilizzando lo stesso codice utilizzato per leggere nel JSON del token di accesso per lo 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;
}

Creare un JWT e scambiarlo con un token di accesso

Una volta lette le credenziali del servizio, queste vengono utilizzate per generare un JWT che viene quindi scambiato con le API Adobe IMS per un token di accesso. Questo token di accesso può quindi essere utilizzato per accedere ad AEM as a Cloud Service.

Questa applicazione di esempio è basata su Node.js, quindi è consigliabile utilizzare il modulo @adobe/jwt-auth npm per facilitare la generazione (1) di JWT e lo scambio (20 con Adobe IMS. Se l'applicazione è stata sviluppata utilizzando un altro linguaggio, esaminare gli esempi di codice appropriati su come creare la richiesta HTTP ad Adobe IMS utilizzando altri linguaggi di programmazione.

  1. Aggiornare getAccessToken(..) per esaminare il contenuto del file JSON e determinare se rappresenta un token di accesso per lo sviluppo locale o credenziali del servizio. Ciò può essere facilmente ottenuto verificando l'esistenza della proprietà .accessToken, che esiste solo per il token di accesso per lo sviluppo locale JSON.

    Se vengono fornite le credenziali del servizio, l’applicazione genera un JWT e lo scambia con Adobe IMS per ottenere un token di accesso. Utilizza la funzione auth(...) di @adobe/jwt-auth che genera un JWT e lo scambia per un token di accesso in una singola chiamata di funzione. I parametri del metodo auth(..) sono un oggetto JSON costituito da informazioni specifiche disponibili nel codice 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 (JSON per il token di accesso per lo sviluppo locale o JSON per le credenziali del servizio) passato tramite il parametro della riga di comando "file", l'applicazione ricava un token di accesso.

Ricorda che mentre le credenziali del servizio scadono ogni 365 giorni, il JWT e il token di accesso corrispondente scadono di frequente e devono essere aggiornati prima della scadenza. Questa operazione può essere eseguita utilizzando un "refresh_token" [fornito da Adobe IMS](https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/OAuth/OAuth.md#access-tokens).
  1. Con queste modifiche implementate, il codice JSON per le credenziali del servizio è stato scaricato dal Developer Console AEM e, per semplicità, salvato come service_token.json nella stessa cartella di index.js. Ora eseguiamo l'applicazione sostituendo il parametro della riga di comando file con service_token.json e aggiornando propertyValue in un nuovo valore in modo che gli effetti siano evidenti in 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
    

    L'output sul terminale è simile al seguente:

    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
    

    Le righe 403 - Non consentito indicano errori nelle chiamate API HTTP ad AEM as a Cloud Service. Questi errori 403 Forbidden si verificano quando si tenta di aggiornare i metadati delle risorse.

    Il motivo è che il token di accesso derivato dalle credenziali del servizio autentica la richiesta all’AEM utilizzando un utente AEM con account tecnico creato automaticamente che, per impostazione predefinita, dispone solo dell’accesso in lettura. Per fornire all’applicazione l’accesso in scrittura all’AEM, l’utente AEM dell’account tecnico associato al token di accesso deve ottenere l’autorizzazione nell’AEM.

Configurare l’accesso in AEM

Il token di accesso derivato dalle credenziali del servizio utilizza un utente AEM dell'account tecnico con appartenenza al gruppo di utenti AEM Collaboratori.

Credenziali servizio - Utente AEM account tecnico

Una volta che l’utente AEM dell’account tecnico esiste nell’AEM (dopo la prima richiesta HTTP con il token di accesso), le autorizzazioni di questo utente AEM possono essere gestite come quelle di altri utenti AEM.

  1. Innanzitutto, individuare il nome di accesso AEM dell'account tecnico aprendo il file JSON delle credenziali del servizio scaricato da AEM Developer Console e individuare il valore integration.email, che dovrebbe essere simile a: 12345678-abcd-9000-efgh-0987654321c@techacct.adobe.com.
  2. Accedere al servizio Author dell’ambiente AEM corrispondente come amministratore AEM
  3. Passa a Strumenti > Sicurezza > Utenti
  4. Individua l'utente AEM con il Nome di accesso identificato nel passaggio 1 e apri le relative Proprietà
  5. Passa alla scheda Gruppi e aggiungi il gruppo Utenti DAM (che dispone dell'accesso in scrittura alle risorse)
    • Visualizza l'elenco dei gruppi di utenti AEMai quali aggiungere l'utente del servizio per ottenere le autorizzazioni ottimali. Se nessun gruppo di utenti AEM fornito è sufficiente, creane uno tuo e aggiungi le autorizzazioni appropriate.
  6. Tocca Salva e chiudi

Se l'account tecnico è autorizzato in AEM a disporre delle autorizzazioni di scrittura per le risorse, eseguire nuovamente l'applicazione:

$ 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

L'output sul terminale è simile al seguente:

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

Verifica le modifiche

  1. Accedere all'ambiente AEM as a Cloud Service aggiornato (utilizzando lo stesso nome host fornito nel parametro della riga di comando aem)
  2. Passa a Assets > File
  3. Spostati nella cartella delle risorse specificata dal parametro della riga di comando folder, ad esempio WKND > Inglese > Avventure > Degustazione del vino Napa
  4. Apri Proprietà per qualsiasi risorsa nella cartella
  5. Passa alla scheda Avanzate
  6. Rivedi il valore della proprietà aggiornata, ad esempio Copyright mappato alla proprietà JCR metadata/dc:rights aggiornata, che ora riflette il valore fornito nel parametro propertyValue, ad esempio Utilizzo limitato WKND

Aggiornamento metadati per utilizzo limitato WKND

Congratulazioni.

Ora che abbiamo effettuato l’accesso a livello di programmazione ad AEM as a Cloud Service utilizzando un token di accesso per lo sviluppo locale e un token di accesso per il servizio pronto per la produzione.

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4