Implementazione del tipo di concessione delle credenziali client

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Con il tipo di concessione delle credenziali client, un'app invia le proprie credenziali (l'ID client e il client secret) a un endpoint su Apigee configurato per generare un token di accesso. Se le credenziali sono valide, Apigee restituisce un token di accesso all'app client.

Informazioni su questo argomento

Questo argomento fornisce una descrizione generale del tipo di concessione delle credenziali client OAuth 2.0 e discute come implementare questo flusso su Apigee.

Casi d'uso

In genere, questo tipo di concessione viene utilizzato quando l'app è anche il proprietario della risorsa. Ad esempio, un'app potrebbe dover accedere a un servizio di archiviazione basato su cloud di backend per archiviare e recuperare i dati che utilizza per svolgere il proprio lavoro, anziché i dati di proprietà specifica dell'utente finale. Questo tipo di concessione avviene esclusivamente tra un'app client e il server di autorizzazione. Un utente finale non partecipa a questo flusso di tipo di concessione.

Ruoli

I ruoli specificano gli "attori" che partecipano al flusso OAuth. Vediamo una rapida panoramica dei ruoli delle credenziali client per capire dove si inserisce Apigee. Per una discussione completa dei ruoli OAuth 2.0, consulta la specifica OAuth 2.0 di IETF.

  • App client: l'app che deve accedere alle risorse protette dell'utente. In genere, con questo flusso l'app viene eseguita sul server anziché localmente sul laptop o sul dispositivo dell'utente.
  • Apigee: in questo flusso, Apigee è il server di autorizzazione OAuth. Il suo compito è generare token di accesso, convalidarli e inoltrare al server delle risorse le richieste autorizzate per le risorse protette.
  • Server di risorse: il servizio di backend che archivia i dati protetti a cui l'app client deve avere l'autorizzazione per accedere. Se stai proteggendo i proxy API ospitati su Apigee, Apigee è anche il server delle risorse.

Esempio di codice

Puoi trovare un'implementazione di esempio completa e funzionante del tipo di concessione delle credenziali client su GitHub. Consulta la sezione Risorse aggiuntive di seguito per i link ad altri esempi.

Diagramma di flusso

Il seguente diagramma di flusso illustra il flusso delle credenziali client con Apigee come server di autorizzazione. In generale, Apigee è anche il server di risorse in questo flusso, ovvero i proxy API sono le risorse protette.

Il flusso delle credenziali client.

Passaggi del flusso delle credenziali client

Di seguito è riportato un riepilogo dei passaggi necessari per implementare il tipo di concessione del codice delle credenziali client quando Apigee funge da server di autorizzazione. Ricorda che, con questo flusso, l'app client presenta semplicemente il proprio ID client e il proprio client secret e, se sono validi, Apigee restituisce un token di accesso.

Prerequisito: l'app client deve essere registrata in Apigee per ottenere le chiavi dell'ID client e del client secret. Per maggiori dettagli, consulta la sezione Registrazione delle app client.

1. Il client richiede un token di accesso

Per ricevere un token di accesso, il client invia tramite POST una chiamata API ad Apigee con i valori per l'ID client e il client secret ottenuti da un'app per sviluppatori registrata (in questo esempio, i valori sono codificati in base64 e passati nell'intestazione Authorization. Inoltre, il parametro grant_type=client_credentials deve essere passato come parametro di query. Tuttavia, puoi configurare il criterio OAuthV2 in modo da accettare questo parametro nell'intestazione o nel corpo della richiesta. Per maggiori dettagli, consulta il criterio OAuthV2.

Ad esempio:

curl -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=client_credentials"

Consulta anche Utilizzare il tipo di concessione delle credenziali client.

2. Apigee convalida le credenziali

Tieni presente che la chiamata API viene inviata all'endpoint /oauth/token. A questo endpoint è associato un criterio che convalida le credenziali dell'app. In altre parole, il criterio confronta le chiavi inviate con quelle create da Apigee al momento della registrazione dell'app. Per approfondire gli endpoint OAuth su Apigee, consulta Configurare gli endpoint e i criteri OAuth.

3. Apigee restituisce una risposta

Se le credenziali sono corrette, Apigee restituisce un token di accesso al client. In caso contrario, viene restituito un errore.

4. Il client chiama l'API protetta

Ora, con un token di accesso valido, il client può effettuare chiamate all'API protetta. In questo scenario, le richieste vengono inviate ad Apigee (il proxy) e Apigee è responsabile della convalida del token di accesso prima di inoltrare la chiamata API al server di risorse di destinazione. Per un esempio, consulta Chiamata dell'API protetta di seguito.

Configurazione di flussi e criteri

In qualità di server di autorizzazione, Apigee elabora le richieste di token di accesso. In qualità di sviluppatore dell'API, devi creare un proxy con un flusso personalizzato per gestire le richieste di token e aggiungere e configurare un criterio OAuthV2. Questa sezione spiega come configurare questo endpoint.

Configurazione del flusso personalizzato

Il modo più semplice per mostrare come è configurato il flusso del proxy API è mostrare la definizione del flusso XML. Di seguito è riportato un esempio di flusso del proxy API progettato per elaborare una richiesta di token di accesso. Ad esempio, quando arriva una richiesta e il suffisso del percorso corrisponde a /oauth/token, viene attivato il criterio GetAccessToken. Consulta Configurare i criteri e gli endpoint OAuth per una breve panoramica dei passaggi necessari per creare un flusso personalizzato come questo.

<Flows>
  <Flow name="GetAccessToken">
         <!-- This policy flow is triggered when the URI path suffix
         matches /oauth/token. Publish this URL to app developers
         to use when obtaining an access token using an auth code
         -->
    <Condition>proxy.pathsuffix == "/oauth/token"</Condition>
    <Request>
        <Step><Name>GetAccessToken</Name></Step>
    </Request>
  </Flow>
</Flows>

Configurare il flusso con un criterio

Devi associare un criterio all'endpoint, come segue. Per una breve panoramica della procedura necessaria per aggiungere un criterio OAuth V2 a un endpoint proxy, consulta Configurare gli endpoint e i criteri OAuth.

Ottenere il token di accesso

Questo criterio è associato al percorso /oauth/token. Utilizza il criterio OAuthV2 con l'operazione GenerateAccessToken specificata.

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse/>
</OAuthV2>

La chiamata all'API per ottenere il token di accesso è una richiesta POST e include un'intestazione Authorization con client_id + client_secret codificato in base64 e il parametro di query grant_type=client_credentials. Può anche includere parametri facoltativi per ambito e stato. Ad esempio:

curl -i \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVgT1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ'

Attacco del criterio di verifica del token di accesso

Per proteggere la tua API con la sicurezza di OAuth 2.0, devi aggiungere un criterio OAuthV2 con l'operazione VerifyAccessToken. Questo criterio verifica che le richieste in arrivo abbiano un token di accesso valido. Se il token è valido, Apigee elabora la richiesta. Se non è valido, Apigee restituisce un errore. Per i passaggi di base, consulta Verificare i token di accesso.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="VerifyAccessToken">
    <DisplayName>VerifyAccessToken</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>VerifyAccessToken</Operation>
    <SupportedGrantTypes/>
    <GenerateResponse enabled="true"/>
    <Tokens/>
</OAuthV2>

Chiamata dell'API protetta

Per chiamare un'API protetta con la sicurezza OAuth 2.0, devi presentare un token di accesso valido. Il pattern corretto è includere il token in un'intestazione Authorization, come segue: tieni presente che il token di accesso è indicato anche come "token bearer".

$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \
  http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282

Vedi anche Invio di un token di accesso.

Risorse aggiuntive

  • Apigee offre formazione online per gli sviluppatori di API, tra cui un corso sulla sicurezza delle API che include OAuth.
  • Criteri OAuthV2: contiene molti esempi che mostrano come effettuare richieste all'authorization server e come configurare i criteri OAuthV2.