Origini dati esterne external-data-sources

In questa pagina: Connettiti alle API REST di terze parti e configura l’autenticazione in modo da poter richiamare dati esterni nei tuoi percorsi per condizioni e personalizzazione.

Utilizzare origini dati esterne gs-ext-data-sources

Le origini dati esterne consentono di definire una connessione a sistemi di terze parti, ad esempio se si utilizza un sistema di prenotazione alberghiera per verificare se un cliente ha registrato una stanza. A differenza dell’origine dati incorporata Adobe Experience Platform, è possibile creare tutte le origini dati esterne necessarie.

NOTE
  • I guardrail quando si lavora con sistemi esterni sono elencati in questa pagina.

  • Poiché le risposte sono ora supportate, per i casi d’uso relativi a origini dati esterne devi utilizzare azioni personalizzate anziché origini dati. Per ulteriori informazioni sulle risposte, vedere risposte alle azioni personalizzate. Le azioni personalizzate senza persistenza del Data Lake sono la scelta giusta quando i dati sono utili solo all'interno del percorso e il sistema esterno è accessibile tramite un endpoint API. Per un confronto tra tutte le opzioni di accesso ai dati, vedere Scegliere la strategia di accesso ai dati.

Sono supportate le API REST basate su POST o GET e che restituiscono JSON. Sono supportate le modalità chiave API, sia l’autenticazione di base che personalizzata.

Prendiamo l’esempio di un servizio API meteorologico che intendo sfruttare per personalizzare i comportamenti del mio percorso secondo i dati meteo in tempo reale.

Di seguito sono riportati due esempi della chiamata API:

  • https://api.adobeweather.org/weather?city=London,uk&appid=1234
  • https://api.adobeweather.org/weather?lat=35&lon=139&appid=1234

La chiamata è composta da un URL principale, https://api.adobeweather.org/weather, due set di parametri (“city” per la città e “lat/long” per la latitudine e la longitudine) e la chiave API (appid).

TIP
È consigliabile lasciare un buffer di almeno un minuto tra il periodo di scadenza del token dell'API esterna e l'impostazione cacheDuration di Journey Optimizer ​, soprattutto in caso di carichi di lavoro pesanti, per evitare incongruenze di scadenza ed errori 401.

Creare e configurare un’origine dati esterna create-ext-data-sources

Di seguito sono riportati i passaggi principali per creare e configurare una nuova origine dati esterna:

  1. Nell’elenco delle origini dati fare clic su Crea Source dati per creare una nuova origine dati esterna.

    Schermata dell'elenco delle origini dati con il pulsante Crea Source dati evidenziato

    Sul lato destro dello schermo si apre il riquadro di configurazione dell’origine dati .

    Il riquadro di configurazione dell'origine dati si apre sul lato destro dello schermo

  2. Inserisci un nome per l’origine dati.

Sono consentiti solo caratteri alfanumerici e trattini bassi. La lunghezza massima è di 30 caratteri.

  1. Aggiungi una descrizione all’origine dati. Questo passaggio è facoltativo.

  2. Aggiungi l’URL del servizio esterno. Nel nostro esempio: https://api.adobeweather.org/weather.

    note caution
    CAUTION
    Per motivi di sicurezza, è consigliabile utilizzare HTTPS. Inoltre, non consentiamo l’uso di indirizzi Adobe che non sono disponibili al pubblico, né di indirizzi IP.

    È stato immesso il campo URL dell'origine dati esterna con l'endpoint dell'API meteo di esempio

  3. Configura l’autenticazione in base alla configurazione del servizio esterno: Nessuna autenticazione, Base, Personalizzata o Chiave API.

    Per la modalità di autenticazione di base, devi inserire un nome utente e una password.

    note
    NOTE
    • Quando viene eseguita la chiamata di autenticazione, la stringa <username>:<password>, codificata in base64, viene aggiunta nell'intestazione Autenticazione.

    • Adobe Journey Optimizer crittografa automaticamente i segreti definiti nelle azioni personalizzate. Le chiavi di crittografia di ogni organizzazione vengono gestite in modo sicuro in un archivio dedicato associato alla propria organizzazione. Quando le credenziali vengono visualizzate nell’interfaccia, vengono nascoste per impostazione predefinita per evitare esposizioni accidentali.

    Per ulteriori informazioni sulla modalità di autenticazione personalizzata, vedere la sezione relativa alla modalità di autenticazione personalizzata. Nel nostro esempio, scegliamo la modalità di autenticazione della chiave API, come segue:

    • Tipo: “Chiave API”

    • Nome: “appid” (nome del parametro della chiave API)

    • Valore: “1234” (questo è il valore della nostra chiave API)

    • Posizione: “Parametro query” (la chiave API si trova nell’URL)

      Campi di autenticazione con chiave API che mostrano gli input di tipo, nome, valore e posizione

  4. Aggiungere un nuovo gruppo di campi per ogni set di parametri API facendo clic su Aggiungi un nuovo gruppo di campi. Nel nome del gruppo di campi sono consentiti solo caratteri alfanumerici e trattini bassi. La lunghezza massima è di 30 caratteri. Nel nostro esempio, dobbiamo creare due gruppi di campi, uno per ciascun insieme di parametri (city e long/lat).

Per il set di parametri “long/lat”, viene creato un gruppo di campi con le seguenti informazioni:

  • Utilizzato in: visualizza il numero di percorsi che utilizzano un gruppo di campi. È possibile fare clic sull’icona Visualizza percorsi per visualizzare l’elenco dei percorsi che utilizzano questo gruppo di campi.
  • Metodo: selezionare il metodo POST o GET. Nel nostro caso, scegliamo il metodo GET.
  • Valori dinamici: inserisci i diversi parametri separati da una virgola, nel nostro esempio “long,lat”. Poiché i valori del parametro dipendono dal contesto di esecuzione, saranno definiti all’interno dei percorsi. Ulteriori informazioni sulle espressioni
  • Payload di risposta: fare clic all’interno del campo Payload e incollare un esempio del payload restituito dalla chiamata. Per il nostro esempio, abbiamo utilizzato un payload trovato su un sito web API per il meteo. Verifica la correttezza dei tipi di campi. Ogni volta che viene chiamata l’API, il sistema recupera tutti i campi inclusi nell’esempio di payload. Puoi fare clic su Incolla un nuovo payload se desideri modificare il payload attualmente trasmesso.
  • Payload inviato: questo campo non viene visualizzato nel nostro esempio. È disponibile solo se si seleziona il metodo POST. Incolla il payload che verrà inviato al sistema di terze parti.

In caso di una chiamata GET che richieda i parametri, inseriscili nel campo Valori dinamici e verranno aggiunti automaticamente alla fine della chiamata. Nel caso di una chiamata POST, è necessario:

  • Elencare i parametri da passare al momento della chiamata nel campo Valori dinamici (nell’esempio seguente: “identifier”).
  • Specificare i parametri anche utilizzando la medesima sintassi nel corpo del payload inviato. A questo scopo, devi aggiungere: “param”: “nome del tuo parametro” (nell’esempio seguente: “identifier”). Attieniti alla sintassi seguente:
{"id":{"param":"identifier"}}

Pannello di configurazione del gruppo di campi con campi Valori dinamici e Payload di risposta

Una volta salvate le modifiche, l’origine dati è configurata ed è pronta per essere utilizzata nei percorsi, ad esempio nelle tue condizioni o per personalizzare un’e-mail. Se la temperatura è superiore a 30°C, puoi decidere di inviare una comunicazione specifica.

Modalità di autenticazione personalizzata custom-authentication-mode

La modalità di autenticazione personalizzata viene utilizzata per l’autenticazione complessa, spesso utilizzata per chiamare protocolli di wrapping API come OAuth2 e per recuperare un token di accesso da inserire nella richiesta HTTP effettiva per l’azione.

Quando configuri l’autenticazione personalizzata, utilizza il pulsante Fai clic per controllare l’autenticazione per controllare se il payload di autenticazione personalizzata è configurato correttamente.

Pulsante test di autenticazione personalizzato nella configurazione dell'origine dati

Quando il test ha esito positivo, il pulsante diventa verde.

Il pulsante del test di autenticazione è diventato verde e indica che la convalida è stata completata

Con questa modalità di autenticazione, l’esecuzione dell’azione è un processo in due fasi:

  1. Chiama l’endpoint per generare il token di accesso.
  2. Chiama l’API REST inserendo il token di accesso nel modo appropriato.
NOTE
Questa autenticazione è composta da due parti.

Definizione dell’endpoint da chiamare per generare il token di accesso custom-authentication-endpoint

  • endpoint: URL da utilizzare per generare l’endpoint

  • metodo della richiesta HTTP sull’endpoint (GET o POST)

  • headers: coppie chiave-valore da inserire come intestazioni in questa chiamata, se necessario

  • body: descrive il corpo della chiamata se il metodo è POST. Supportiamo una struttura del corpo limitata, definita in bodyParams (coppie chiave-valore). Il bodyType descrive il formato e la codifica del corpo nella chiamata:

    • form: il tipo di contenuto sarà application/x-www-form-urlencoded (charset UTF-8) e le coppie chiave-valore verranno serializzate così come sono: key1=value1&key2=value2&…
    • json: il tipo di contenuto sarà application/json (charset UTF-8) e le coppie chiave-valore saranno serializzate così come sono, come oggetto json: { “key1”: “value1”, “key2”: “value2”, …}

Definizione del modo in cui il token di accesso deve essere inserito nella richiesta HTTP dell’azione custom-authentication-access-token

  • authorizationType: definisce il modo in cui il token di accesso generato deve essere inserito nella chiamata HTTP per l’azione. I valori possibili sono:

    • bearer: indica che il token di accesso deve essere inserito nell’intestazione Autorizzazione, ad esempio: Autorizzazione: Bearer <token di accesso>
    • header: indica che il token di accesso deve essere inserito come intestazione, il nome dell’intestazione è definito dalla proprietà tokenTarget. Ad esempio, se tokenTarget è myHeader, il token di accesso verrà inserito come intestazione: myHeader: <token di accesso>
    • queryParam: indica che il token di accesso deve essere inserito come queryParam, il nome del parametro di query è definito dalla proprietà tokenTarget. Ad esempio, se il tokenTarget è myQueryParam, l’URL della chiamata di azione sarà: <url>?myQueryParam=<token di accesso>
  • tokenInResponse: indica come estrarre il token di accesso dalla chiamata di autenticazione. Questa proprietà può corrispondere a:

    • response: indica che la risposta HTTP è il token di accesso
    • un selettore in un json (supponendo che la risposta sia un json, non sono supportati altri formati come XML). Il formato di questo selettore è json://<percorso della proprietà del token di accesso>. Ad esempio, se la risposta della chiamata è: { "access token": “theToken”, “timestamp”: 12323445656}, tokenInResponse sarà: json: //access_token_

Il formato di questa autenticazione è:

{
    "type": "customAuthorization",
    "endpoint": "<URL of the authentication endpoint>",
    "method": "<HTTP method to call the authentication endpoint, in 'GET' or 'POST'>",
    (optional) "headers": {
        "<header name>": "<header value>",
        ...
    },
    (optional, mandatory if method is 'POST') "body": {
        "bodyType": "<'form'or 'json'>,
        "bodyParams": {
            "param1": value1,
            ...
        }
    },
    "tokenInResponse": "<'response' or json selector in format 'json://<field path to access token>'",
    "cacheDuration": {
        (optional, mutually exclusive with 'duration') "expiryInResponse": "<json selector in format 'json://<field path to expiry>'",
        (optional, mutually exclusive with 'expiryInResponse') "duration": <integer value>,
        "timeUnit": "<unit in 'milliseconds', 'seconds', 'minutes', 'hours', 'days', 'months', 'years'>"
    },
    "authorizationType": "<value in 'bearer', 'header' or 'queryParam'>",
    (optional, mandatory if authorizationType is 'header' or 'queryParam') "tokenTarget": "<name of the header or queryParam if the authorizationType is 'header' or 'queryParam'>",
}
NOTE
Encode64 è l’unica funzione disponibile nel payload di autenticazione.

Adesso puoi modificare la durata della cache del token per un’origine dati di autenticazione personalizzata. Di seguito è riportato un esempio di payload di autenticazione personalizzato. Durata della cache definita nel parametro cacheDuration. Tale parametro Specifica la durata di conservazione del token generato nella cache. L’unità può essere in millisecondi, secondi, minuti, ore, giorni, mesi, anni.

Ecco un esempio per il tipo di autenticazione bearer:

{
    "type": "customAuthorization",
    "endpoint": "https://<your_auth_endpoint>/epsilon/oauth2/access_token",
    "method": "POST",
    "headers": {
      "Authorization": "Basic EncodeBase64(<epsilon Client Id>:<epsilon Client Secret>)"
    },
    "body": {
      "bodyType": "form",
      "bodyParams": {
        "scope": "cn mail givenname uid employeeNumber",
        "grant_type": "password",
        "username": "<epsilon User Name>",
        "password": "<epsilon User Password>"
      }
    },
    "tokenInResponse": "json://access_token",
    "cacheDuration": {
      "duration": 5,
      "timeUnit": "minutes"
    },
  },
NOTE
  • Il token di autenticazione viene memorizzato nella cache al percorso: se due percorsi utilizzano la stessa azione personalizzata, ogni percorso ha un proprio token memorizzato nella cache. Il token non è condiviso tra questi percorsi.

  • La durata della cache consente di evitare un numero eccessivo di chiamate agli endpoint di autenticazione. La conservazione dei token di autenticazione è memorizzata nella cache dei servizi, non vi è persistenza. Se un servizio viene riavviato, inizia con una cache pulita. Per impostazione predefinita, la durata della cache è di 1 ora. Nel payload di autenticazione personalizzata, può essere adattato specificando un’altra durata di conservazione.

Autenticazione personalizzata basata su certificato certificate-credential

Per le API aziendali che applicano la verifica dell’identità basata su certificato, ad esempio Microsoft Entra ID, è possibile configurare l’autenticazione personalizzata basata su certificato aggiungendo "subType": "certificateCredential" al payload di autorizzazione personalizzato. Journey Optimizer utilizza il certificato gestito di Adobe per firmare un’asserzione client JWT e scambiarla per un token di accesso. Non è richiesto alcun segreto client.

Questa opzione aggiunge due campi obbligatori allo schema customAuthorization standard: subType e aud. Tutti gli altri campi (endpoint, method, parametri corpo, tokenInResponse) rimangono invariati. Quando subType è assente, il comportamento è identico a quello dell’autenticazione personalizzata standard, senza influire sulle configurazioni esistenti.

  • subType: impostare su "certificateCredential" per attivare l’autenticazione basata su certificato.
  • aud: valore del pubblico incluso nell’asserzione del client JWT. Per Microsoft Entra ID, corrisponde all’URL endpoint, ma deve essere sempre impostato in modo esplicito.

I campi client_assertion e client_assertion_type non vengono mai creati dall’utente. Vengono inserite automaticamente dalla piattaforma in fase di runtime, immediatamente prima della chiamata dell’endpoint del token.

Come funziona certificate-credential-how-it-works

L’autenticazione personalizzata basata su certificato implementa le credenziali client OAuth 2.0 con un’asserzione client JWT, come definito in RFC 7523, lo stesso standard supportato da Microsoft Entra ID e Okta. Al posto del segreto client, Journey Optimizer dimostra la propria identità utilizzando un JWT firmato con la chiave privata gestita di Adobe. Il provider di identità verifica la firma utilizzando il certificato pubblico di Adobe, che viene registrato una volta nel provider di identità.

Lo scambio di token segue questi passaggi:

  1. Journey Optimizer genera un’asserzione del client JWT firmata con la chiave privata di Adobe.
  2. L’asserzione viene inviata all’endpoint del token insieme a client_id, grant_type e scope.
  3. Il provider di identità verifica la firma JWT confrontandola con il certificato pubblico registrato di Adobe.
  4. Il provider di identità restituisce un token di accesso Bearer.
  5. Journey Optimizer utilizza tale token per chiamare l’endpoint di azione personalizzato.

Dettagli del certificato di Adobe certificate-credential-details

Adobe gestisce il certificato e la relativa chiave privata associata. Nella tabella seguente sono riepilogate le proprietà chiave:

Proprietà
Valore
Rilasciato da
DigiCert (CA pubblica)
Gestito da
Adobe
Algoritmo
RS256 (RSA)
Cosa registrare nel provider di identità
Solo certificato foglia di Adobe, non CA intermedia o radice
Come ottenere
Recuperalo dall’API mTLS Public Certificate (vedi il guardrail Certificate di seguito)
Rotazione
Adobe ruota automaticamente il certificato 60 giorni prima della scadenza (durata del certificato: 13 mesi). Il certificato precedente rimane valido fino a 30 giorni prima della scadenza. I clienti non sono attualmente informati della rotazione. Chiamare periodicamente l’API del certificato pubblico mTLS per controllare expiryDate e riconfigurare l’IDP prima della revoca del certificato precedente.

Adobe ruota automaticamente il certificato 60 giorni prima della scadenza. Il certificato precedente rimane valido fino a 30 giorni prima della scadenza. I clienti non ricevono alcuna notifica. Per informazioni su come monitorare la rotazione a livello di programmazione, vedere il guardrail Rotazione certificato di seguito.

Struttura delle asserzioni JWT certificate-credential-jwt

L’asserzione del client JWT non viene creata dall’utente, ma generata e firmata automaticamente da Journey Optimizer. La struttura prevista viene fornita qui in modo che il team del provider di identità possa convalidare le attestazioni.

Intestazione:

{
  "alg": "RS256",
  "x5t": "<base64url SHA-1 thumbprint of Adobe's leaf certificate>"
}

Payload:

{
  "iss": "<client_id>",
  "sub": "<client_id>",
  "aud": "<token endpoint URL>",
  "iat": "<current unix timestamp>",
  "exp": "<iat + 600 seconds>",
  "jti": "<unique UUID per request>"
}

Si noti quanto segue:

  • expiat è sempre ≤ 10 minuti, in linea con i requisiti Okta ed Entra ID.
  • Ogni asserzione utilizza un jti univoco, che rende sicuro il suo attacco di ripetizione.
  • client_assertion e client_assertion_type vengono inseriti automaticamente dalla piattaforma e non vengono mai creati.

Di seguito è riportato un esempio per il tipo di autenticazione delle credenziali del certificato, per Microsoft Entra ID:

{
  "type": "customAuthorization",
  "subType": "certificateCredential",
  "aud": "https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token",
  "authorizationType": "Bearer",
  "endpoint": "https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token",
  "method": "POST",
  "body": {
    "bodyType": "form",
    "bodyParams": {
      "client_id": "<your-client-id>",
      "grant_type": "client_credentials",
      "scope": "https://api.example.com/.default"
    }
  },
  "tokenInResponse": "json://access_token"
}

Di seguito è riportato un esempio per lo stesso tipo di autenticazione delle credenziali del certificato per Okta:

{
  "type": "customAuthorization",
  "subType": "certificateCredential",
  "authorizationType": "bearer",
  "endpoint": "https://<your-okta-domain>/oauth2/v1/token",
  "aud": "https://<your-okta-domain>/oauth2/v1/token",
  "method": "POST",
  "body": {
    "bodyType": "form",
    "bodyParams": {
      "client_id": "<your-okta-app-client-id>",
      "grant_type": "client_credentials",
      "scope": "<your-api-scope>"
    }
  },
  "tokenInResponse": "json://access_token"
}

CAUTION
Quando configuri l’autenticazione personalizzata basata su certificato, tieni presenti i seguenti guardrail:
  • URL endpoint token: deve essere HTTPS. Evitare URL contenenti ?: questo è un segno che l'endpoint di autorizzazione è stato incollato al posto dell'endpoint token.
  • method: deve essere POST. Gli endpoint del token OAuth accettano solo richieste POST.
  • client_id: non può essere vuoto e non può contenere spazi iniziali o finali. Un valore vuoto genera un JWT dall’aspetto valido che il provider di identità rifiuterà con un errore opaco.
  • scope: Espressa come stringa singola separata da spazi in bodyParams. Massimo 1000 caratteri in totale.
  • Certificato: Adobe gestisce il certificato e la chiave privata. Non caricare o immettere mai un certificato. Prima di utilizzare l'azione personalizzata in un percorso live, è necessario registrare il certificato foglia di Adobe nel provider di identità. Per recuperarla, chiamare l'API del certificato pubblico mTLS e cercare la voce in cui certCommonName è ajo-journeys.aep-mtls.adobe.com. Registrare il valore publicCertificate da tale voce. Non utilizzare i certificati CA intermedi o radice. Poiché al momento i clienti non ricevono alcuna notifica relativa alla rotazione dei certificati, è necessario chiamare periodicamente l'API del certificato pubblico mTLS per controllare expiryDate e aggiornare il certificato registrato nell'IDP prima che il vecchio certificato venga revocato 30 giorni prima della scadenza.

Di seguito è riportato un esempio per il tipo di autenticazione dell’intestazione:

{
  "type": "customAuthorization",
  "endpoint": "https://myapidomain.com/v2/user/login",
  "method": "POST",
  "headers": {
    "x-retailer": "any value"
  },
  "body": {
    "bodyType": "form",
    "bodyParams": {
      "secret": "any value",
      "username": "any value"
    }
  },
  "tokenInResponse": "json://token",
  "cacheDuration": {
    "expiryInResponse": "json://expiryDuration",
    "timeUnit": "minutes"
  },
  "authorizationType": "header",
  "tokenTarget": "x-auth-token"
}

Ecco un esempio della risposta della chiamata API di accesso:

{
  "token": "xDIUssuYE9beucIE_TFOmpdheTqwzzISNKeysjeODSHUibdzN87S",
  "expiryDuration" : 5
}
CAUTION
Durante la configurazione dell'autenticazione personalizzata per un'azione personalizzata, si noti che gli oggetti JSON nidificati (ad esempio, oggetti secondari in bodyParams) sono supportati.
recommendation-more-help
journey-optimizer-help