Autorizzazione OAuth 2
Destination SDK supporta diversi metodi di autorizzazione per la destinazione. Tra queste è inclusa l'opzione per l'autenticazione nella destinazione utilizzando il framework di autorizzazione OAuth 2.
Questa pagina descrive i vari flussi di autorizzazione OAuth 2 supportati da Destination SDK e fornisce istruzioni per impostare l’autorizzazione OAuth 2 per la destinazione.
Tipi di integrazione supportati supported-integration-types
Consulta la tabella seguente per informazioni dettagliate sui tipi di integrazioni che supportano le funzionalità descritte in questa pagina.
Come aggiungere i dettagli di autorizzazione OAuth 2 alla configurazione di destinazione how-to-setup
Prerequisiti nel sistema prerequisites
Come primo passo, devi creare un’app per Adobe Experience Platform o registrare in altro modo un Experience Platform. L’obiettivo è generare un ID client e un segreto client, necessari per autenticare l’Experience Platform nella destinazione.
Come parte di questa configurazione nel tuo sistema, devi disporre degli URL di reindirizzamento/callback di Adobe Experience Platform OAuth 2, che puoi ottenere dall’elenco seguente.
https://platform-va7.adobe.io/data/core/activation/oauth/api/v1/callback
https://platform-nld2.adobe.io/data/core/activation/oauth/api/v1/callback
https://platform-aus5.adobe.io/data/core/activation/oauth/api/v1/callback
https://platform-can2.adobe.io/data/core/activation/oauth/api/v1/callback
https://platform-gbr9.adobe.io/data/core/activation/oauth/api/v1/callback
https://platform.adobe.io/data/core/activation/oauth/api/v1/callback
Al termine di questo passaggio, dovresti disporre di:
- Un ID cliente;
- Un segreto cliente;
- URL di callback di Adobe (per la concessione del codice di autorizzazione).
Cosa devi fare nella Destination SDK to-do-in-destination-sdk
Per impostare l'autorizzazione OAuth 2 per la destinazione in Experience Platform, è necessario aggiungere i dettagli OAuth 2 alla configurazione di destinazione, con il parametro customerAuthenticationConfigurations
. Per esempi dettagliati, consulta autenticazione cliente. Di seguito sono riportate istruzioni specifiche sui campi da aggiungere al modello di configurazione, a seconda del tipo di concessione di autorizzazione OAuth 2.
Tipi di concessione OAuth 2 supportati oauth2-grant-types
L’Experience Platform supporta i tre tipi di sovvenzione OAuth 2 riportati nella tabella seguente. Se disponi di una configurazione OAuth 2 personalizzata, Adobe è in grado di supportarla con l’aiuto di campi personalizzati nell’integrazione. Per ulteriori informazioni, consulta le sezioni per ogni tipo di sovvenzione.
- Fornite i parametri di input come indicato nelle sezioni seguenti. I sistemi interni Adobe si connettono al sistema di autorizzazione della piattaforma e acquisiscono i parametri di output, utilizzati per autenticare l’utente e mantenere l’autorizzazione alla destinazione.
- I parametri di input evidenziati in grassetto nella tabella sono parametri richiesti nel flusso di autorizzazione OAuth 2. Gli altri parametri sono facoltativi. Altri parametri di input personalizzati non sono visualizzati qui, ma sono descritti dettagliatamente nelle sezioni Personalizzare la configurazione OAuth 2 e Aggiornare il token di accesso.
- clientId
- clientSecret
- ambito
- authorizationUrl
- accessTokenUrl
- refreshTokenUrl
- accessToken
- expiresIn
- refreshToken
- tokenType
- clientId
- clientSecret
- ambito
- accessTokenUrl
- nomeutente
- password
- accessToken
- expiresIn
- refreshToken
- tokenType
- clientId
- clientSecret
- ambito
- accessTokenUrl
- accessToken
- expiresIn
- refreshToken
- tokenType
La tabella precedente elenca i campi utilizzati nei flussi standard OAuth 2. Oltre a questi campi standard, varie integrazioni di partner possono richiedere input e output aggiuntivi. Adobe ha progettato un framework di autorizzazione OAuth 2 flessibile per Destination SDK che può gestire le varianti al modello di campi standard di cui sopra, supportando al contempo un meccanismo per rigenerare automaticamente gli output non validi, come i token di accesso scaduti.
L’output include sempre un token di accesso, utilizzato da Experience Platform per autenticare e mantenere l’autorizzazione per la destinazione.
Il sistema che Adobe ha progettato per l’autorizzazione OAuth 2:
- Supporta tutte e tre le sovvenzioni OAuth 2 tenendo conto di eventuali varianti di esse, come campi di dati aggiuntivi, chiamate API non standard e altro ancora.
- Supporta i token di accesso con valori di durata variabili, che si tratti di 90 giorni, 30 minuti o qualsiasi altro valore di durata specificato.
- Supporta i flussi di autorizzazione OAuth 2 con o senza token di aggiornamento.
OAuth 2 con codice di autorizzazione authorization-code
Se la destinazione supporta un flusso standard del codice di autorizzazione OAuth 2.0 (leggi le specifiche degli standard RFC) o una relativa variante, consulta i campi obbligatori e facoltativi riportati di seguito:
- clientId
- clientSecret
- ambito
- authorizationUrl
- accessTokenUrl
- refreshTokenUrl
- accessToken
- expiresIn
- refreshToken
- tokenType
Per impostare questo metodo di autorizzazione per la destinazione, aggiungi le seguenti righe alla configurazione quando crei una configurazione di destinazione:
{
//...
"customerAuthenticationConfigurations": [
{
"authType": "OAUTH2",
"grant": "OAUTH2_AUTHORIZATION_CODE",
"accessTokenUrl": "https://api.moviestar.com/OAuth/access_token",
"authorizationUrl": "https://www.moviestar.com/dialog/OAuth",
"refreshTokenUrl": "https://api.moviestar.com/OAuth/refresh_token",
"clientId": "Experience-Platform-client-id",
"clientSecret": "Experience-Platform-client-secret",
"scope": ["read", "write"]
}
]
//...
}
authType
grant
accessTokenUrl
authorizationUrl
refreshTokenUrl
refreshTokenUrl
è uguale a accessTokenUrl
.clientId
clientSecret
scope
OAuth 2 con concessione password
Per la concessione della password OAuth 2 (leggi le specifiche degli standard RFC), l'Experience Platform richiede il nome utente e la password dell'utente. Nel flusso di autorizzazione, Experience Platform scambia queste credenziali per un token di accesso e, facoltativamente, per un token di aggiornamento.
Adobe utilizza gli input standard riportati di seguito per semplificare la configurazione di destinazione, con la possibilità di ignorare i valori:
- clientId
- clientSecret
- ambito
- accessTokenUrl
- nomeutente
- password
- accessToken
- expiresIn
- refreshToken
- tokenType
username
e password
nella configurazione seguente. Quando aggiungi "grant": "OAUTH2_PASSWORD"
nella configurazione di destinazione, il sistema richiederà all'utente di fornire un nome utente e una password nell'interfaccia utente di Experience Platform, al momento dell'autenticazione nella destinazione.Per impostare questo metodo di autorizzazione per la destinazione, aggiungi le seguenti righe alla configurazione quando crei una configurazione di destinazione:
{
//...
"customerAuthenticationConfigurations": [
{
"authType": "OAUTH2",
"grant": "OAUTH2_PASSWORD",
"accessTokenUrl": "https://api.moviestar.com/OAuth/access_token",
"clientId": "Experience-Platform-client-id",
"clientSecret": "Experience-Platform-client-secret",
"scope": ["read", "write"]
}
]
authType
grant
accessTokenUrl
clientId
clientSecret
scope
Concessione OAuth 2 con credenziali client
È possibile configurare una destinazione client OAuth 2 (leggere le specifiche degli standard RFC) che supporta gli input e gli output standard elencati di seguito. Puoi personalizzare i valori. Per informazioni dettagliate, consulta Personalizzare la configurazione OAuth 2.
- clientId
- clientSecret
- ambito
- accessTokenUrl
- accessToken
- expiresIn
- refreshToken
- tokenType
Per impostare questo metodo di autorizzazione per la destinazione, aggiungi le seguenti righe alla configurazione quando crei una configurazione di destinazione:
{
//...
"customerAuthenticationConfigurations": [
{
"authType": "OAUTH2",
"grant": "OAUTH2_CLIENT_CREDENTIALS",
"accessTokenUrl": "https://api.moviestar.com/OAuth/access_token",
"refreshTokenUrl": "https://api.moviestar.com/OAuth/refresh_token",
"clientId": "Experience-Platform-client-id",
"clientSecret": "Experience-Platform-client-secret",
"scope": ["read", "write"]
}
]
//...
}
authType
grant
accessTokenUrl
refreshTokenUrl
refreshTokenUrl
è uguale a accessTokenUrl
.clientId
clientSecret
scope
Personalizzare la configurazione di OAuth 2 customize-configuration
Le configurazioni descritte nelle sezioni precedenti descrivono le sovvenzioni standard OAuth 2. Tuttavia, il sistema progettato da Adobe offre flessibilità che consente di utilizzare parametri personalizzati per qualsiasi variante nella sovvenzione OAuth 2. Per personalizzare le impostazioni standard di OAuth 2, utilizzare i parametri authenticationDataFields
, come illustrato negli esempi seguenti.
Esempio 1: utilizzo di authenticationDataFields
per acquisire informazioni provenienti dalla risposta di autorizzazione example-1
In questo esempio, una piattaforma di destinazione dispone di token di aggiornamento che scadono dopo un certo periodo di tempo. In questo caso, il partner configura il campo personalizzato refreshTokenExpiration
per ottenere la scadenza del token di aggiornamento dal campo refresh_token_expires_in
nella risposta API.
{
"customerAuthenticationConfigurations":[
{
"authType":"OAUTH2",
"options":{
},
"grant":"OAUTH2_AUTHORIZATION_CODE",
"accessTokenUrl":"https://api.moviestar.com/OAuth/access_token",
"authorizationUrl":"https://api.moviestar.com/OAuth/authorization",
"scope":[
"read",
"write",
"delete"
],
"refreshTokenUrl":"https://api.moviestar.com/OAuth/accessToken",
"clientSecret":"client-secret-here",
"authenticationDataFields":[
{
"name":"refreshTokenExpiration",
"title":"Refresh Token Expires In",
"description":"Time in seconds when the refresh token will expire",
"type":"string",
"isRequired":false,
"source":"CUSTOMER",
"authenticationResponsePath":"refresh_token_expires_in"
}
]
}
]
}
Esempio 2: utilizzo di authenticationDataFields
per fornire un token di aggiornamento speciale example-2
In questo esempio, un partner imposta la propria destinazione in modo da fornire un token di aggiornamento speciale. Inoltre, la data di scadenza per i token di accesso non viene restituita nella risposta API, in modo che possano codificare un valore predefinito, in questo caso 3600 secondi.
"authenticationDataFields": [
{
"name": "refreshToken",
"value": "special_refresh_token"
},
{
"name": "expiresIn",
"value": 3600
}
]
Esempio 3: l’utente immette l’ID client e il segreto client quando configura la destinazione example-3
In questo esempio, invece di creare un ID client globale e un segreto client come mostrato nella sezione Prerequisiti nel sistema, il cliente deve immettere l'ID client, il segreto client e l'ID account (l'ID utilizzato dal cliente per accedere alla destinazione)
{
//...
"customerAuthenticationConfigurations": [
{
"authType": "OAUTH2",
"grant": "OAUTH2_CLIENT_CREDENTIALS",
"authenticationDataFields": [
{
"name": "clientId",
"title": "Client ID",
"description": "Client ID",
"type": "string",
"isRequired": true,
"source": "CUSTOMER"
},
{
"name": "clientSecret",
"title": "Client Secret",
"description": "Client Secret",
"type": "string",
"isRequired": true,
"format": "password",
"source": "CUSTOMER"
},
{
"name": "moviestarId",
"title": "Moviestar ID",
"description": "Moviestar ID",
"type": "string",
"isRequired": true,
"source": "CUSTOMER"
}
],
"accessTokenRequest": {
"destinationServerType": "URL_BASED",
"urlBasedDestination": {
"url": {
"templatingStrategy": "PEBBLE_V1",
"value": "https://{{ authData.moviestarId }}.yourdestination.com/identity/oauth/token"
}
},
"httpTemplate": {
"requestBody": {
"templatingStrategy": "PEBBLE_V1",
"value": "{{ formUrlEncode('grant_type', 'client_credentials', 'client_id', authData.clientId, 'client_secret', authData.clientSecret) | raw }}"
},
"httpMethod": "POST",
"contentType": "application/x-www-form-urlencoded"
},
"responseFields": [
{
"templatingStrategy": "PEBBLE_V1",
"value": "{{ response.body.access_token }}",
"name": "accessToken"
},
{
"templatingStrategy": "PEBBLE_V1",
"value": "{{ response.body.scope }}",
"name": "scope"
},
{
"templatingStrategy": "PEBBLE_V1",
"value": "{{ response.body.token_type }}",
"name": "tokenType"
},
{
"templatingStrategy": "PEBBLE_V1",
"value": "{{ response.body.expires_in }}",
"name": "expiresIn"
}
]
}
}
]
//...
}
Puoi utilizzare i seguenti parametri in authenticationDataFields
per personalizzare la configurazione OAuth 2:
authenticationDataFields.name
authenticationDataFields.title
authenticationDataFields.description
authenticationDataFields.type
Valori accettati:
string
, boolean
, integer
authenticationDataFields.isRequired
authenticationDataFields.format
"format":"password"
, Adobe crittografa il valore del campo dei dati di autorizzazione. Se utilizzato con "fieldType": "CUSTOMER"
, nasconde anche l'input nell'interfaccia utente quando l'utente digita nel campo.authenticationDataFields.fieldType
authenticationDataFields.value
authenticationDataFields.type
.authenticationDataFields.authenticationResponsePath
Aggiornamento del token di accesso access-token-refresh
Adobe ha progettato un sistema che aggiorna i token di accesso scaduti senza richiedere all’utente di accedere nuovamente alla piattaforma. Il sistema è in grado di generare un nuovo token in modo che l’attivazione nella destinazione continui senza problemi per il cliente.
Per impostare l’aggiornamento del token di accesso, potrebbe essere necessario configurare una richiesta HTTP con modello che consenta ad Adobe di ottenere un nuovo token di accesso, utilizzando un token di aggiornamento. Se il token di accesso è scaduto, Adobe accetta la richiesta basata su modelli fornita dall’utente, aggiungendo i parametri forniti. Utilizzare il parametro accessTokenRequest
per configurare un meccanismo di aggiornamento dei token di accesso.
{
"customerAuthenticationConfigurations":[
{
"authType":"OAUTH2",
"grant":"OAUTH2_CLIENT_CREDENTIALS",
"accessTokenRequest":{
"destinationServerType":"URL_BASED",
"urlBasedDestination":{
"url":{
"templatingStrategy":"PEBBLE_V1",
"value":"https://{{authData.customerId}}.yourdestination.com/identity/oauth/token"
}
},
"httpTemplate":{
"requestBody":{
"templatingStrategy":"PEBBLE_V1",
"value":"{{ formUrlEncode('grant_type', 'client_credentials', 'client_id', authData.clientId, 'client_secret', authData.clientSecret) | raw }}"
},
"httpMethod":"POST",
"contentType":"application/x-www-form-urlencoded",
"headers":[
]
},
"responseFields":[
{
"templatingStrategy":"PEBBLE_V1",
"value":"{{ response.body.expires_in }}",
"name":"expiresIn"
},
{
"templatingStrategy":"PEBBLE_V1",
"value":"{{ response.body.access_token }}",
"name":"accessToken"
}
],
"validations":[
{
"name":"access_token validation",
"actualValue":{
"templatingStrategy":"PEBBLE_V1",
"value":"{{response.body.access_token is empty }}"
},
"expectedValue":{
"templatingStrategy":"PEBBLE_V1",
"value":"false"
}
},
{
"name":"response status",
"actualValue":{
"templatingStrategy":"PEBBLE_V1",
"value":"{{ response.status }}"
},
"expectedValue":{
"templatingStrategy":"PEBBLE_V1",
"value":"200"
}
}
]
}
}
]
}
È possibile utilizzare i seguenti parametri in accessTokenRequest
per personalizzare il processo di aggiornamento del token:
accessTokenRequest.destinationServerType
URL_BASED
.accessTokenRequest.urlBasedDestination.url.templatingStrategy
- Utilizzare
PEBBLE_V1
se si utilizzano i modelli per il valore inaccessTokenRequest.urlBasedDestination.url.value
. - Utilizzare
NONE
se il valore nel campoaccessTokenRequest.urlBasedDestination.url.value
è una costante.
accessTokenRequest.urlBasedDestination.url.value
accessTokenRequest.httpTemplate.requestBody.templatingStrategy
- Utilizzare
PEBBLE_V1
se si utilizzano modelli per i valori inaccessTokenRequest.httpTemplate.requestBody.value
. - Utilizzare
NONE
se il valore nel campoaccessTokenRequest.httpTemplate.requestBody.value
è una costante.
accessTokenRequest.httpTemplate.requestBody.value
accessTokenRequest.httpTemplate.httpMethod
POST
.accessTokenRequest.httpTemplate.contentType
Ad esempio:
application/x-www-form-urlencoded
o application/json
.accessTokenRequest.httpTemplate.headers
accessTokenRequest.responseFields.templatingStrategy
- Utilizzare
PEBBLE_V1
se si utilizzano modelli per i valori inaccessTokenRequest.responseFields.value
. - Utilizzare
NONE
se il valore nel campoaccessTokenRequest.responseFields.value
è una costante.
accessTokenRequest.responseFields.value
accessTokenRequest.validations.name
accessTokenRequest.validations.actualValue.templatingStrategy
- Utilizzare
PEBBLE_V1
se si utilizzano modelli per i valori inaccessTokenRequest.validations.actualValue.value
. - Utilizzare
NONE
se il valore nel campoaccessTokenRequest.validations.actualValue.value
è una costante.
accessTokenRequest.validations.actualValue.value
accessTokenRequest.validations.expectedValue.templatingStrategy
- Utilizzare
PEBBLE_V1
se si utilizzano modelli per i valori inaccessTokenRequest.validations.expectedValue.value
. - Utilizzare
NONE
se il valore nel campoaccessTokenRequest.validations.expectedValue.value
è una costante.
accessTokenRequest.validations.expectedValue.value
Convenzioni di modelli templating-conventions
A seconda della personalizzazione dell’autorizzazione, potrebbe essere necessario accedere ai campi dati nella risposta di autorizzazione, come illustrato nella sezione precedente. Per farlo, acquisisci familiarità con il linguaggio di modelli Pebble utilizzato da Adobe e fai riferimento alle convenzioni di modelli riportate di seguito per personalizzare l'implementazione di OAuth 2.
{{ authData.accessToken }}
{{ response.body.access_token }}
{{ response.status }}
{{ response.headers.server[0] }}
{{ userContext.sandboxName }}
{{ userContext.sandboxId }}
{{ userContext.imsOrgId }}
{{ userContext.client }} // the client executing the authorization attempt
Passaggi successivi next-steps
Leggendo questo articolo, conosci i modelli di autorizzazione OAuth 2 supportati da Adobe Experience Platform e sai come configurare la tua destinazione con il supporto per l’autorizzazione OAuth 2. Successivamente, puoi impostare la destinazione supportata da OAuth 2 tramite Destination SDK. Leggi Utilizza Destination SDK per configurare la tua destinazione per i passaggi successivi.