Implementazione del tipo di concessione delle password

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Il tipo di autorizzazione della password del proprietario della risorsa (o "password") viene utilizzato principalmente nei casi in cui l'app è altamente attendibile. In questa configurazione, l'utente fornisce le credenziali del server delle risorse (nome utente/password) all'app client, che invia una richiesta di token di accesso ad Apigee Edge. Un server di identità convalida le credenziali e, se sono valide, Edge procede a minting di un token di accesso e lo restituisce all'app.

Informazioni su questo argomento

Questo argomento offre una descrizione generale e una panoramica del flusso del tipo di autorizzazione del proprietario della risorsa OAuth 2.0 e illustra come implementare questo flusso su Apigee Edge.

Esempi che potrebbero esserti utili

  • Richiesta di un token di accesso: tipo di concessione della password: mostra come inviare una richiesta di token, configurare il criterio OAuthV2 per il tipo di concessione della password e come configurare un endpoint per il criterio in Edge.
  • oauth-validate-key-secret: un proxy di esempio in GitHub di cui puoi eseguire il deployment su Edge e provare. Si tratta di un esempio end-to-end in cui viene mostrato il tipo di autorizzazione della password. Dimostra una best practice, ovvero autenticare le credenziali (chiave/segreto) dell'app client prima di inviare le credenziali dell'utente a un provider di identità.

Video

Video: guarda questo video sull'implementazione del tipo di autorizzazione della password.

Casi d'uso

Questo tipo di autorizzazione è destinato alle app altamente attendibili o con privilegi perché l'utente deve fornire all'app le credenziali del server delle risorse. In genere, l'app fornisce una schermata di accesso in cui l'utente inserisce le proprie credenziali.

Diagramma di flusso

Il seguente diagramma di flusso illustra il flusso del tipo di concessione della password del proprietario della risorsa con Apigee Edge che funge da server di autorizzazione.

Suggerimento: per visualizzare una versione più grande di questo diagramma, fai clic con il tasto destro del mouse e aprilo in una nuova scheda oppure salvalo e aprilo in un visualizzatore di immagini.

Passaggi nel flusso del tipo di concessione della password

Di seguito è riportato un riepilogo dei passaggi necessari per implementare il tipo di concessione della password in cui Apigee Edge funge da server di autorizzazione.

Prerequisito: l'app client deve essere registrata con Apigee Edge per ottenere l'ID client e le chiavi client secret. Per maggiori dettagli, consulta Registrazione delle app client.

1. L'utente avvia il flusso e inserisce le credenziali

Quando l'app deve accedere alle risorse protette dell'utente (ad esempio quando l'utente fa clic su un pulsante nell'app), l'utente viene reindirizzato a un modulo di accesso.

2. L'app richiede un token di accesso da Apigee Edge

L'app invia una richiesta di token di accesso, incluse le credenziali dell'utente, a un endpoint generateAccessToken su Apigee Edge.

Di seguito è riportato un esempio di richiesta POST, che include i parametri obbligatori per questo tipo di autorizzazione:

$ curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -d 'grant_type=password&username=the-user-name&password=the-users-password' \
  https://docs-test.apigee.net/oauth/token

In alternativa, questo comando può essere eseguito come segue, utilizzando l'opzione -u per curl e creare automaticamente l'intestazione dell'autenticazione di base con codifica base64.

$ curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -u sqH8ooHexTz8C02IX9ORo6rhgq1iSrAl:Z4ljtJdneBOjPMAU \
  -d 'grant_type=password&username=the-user-name&password=the-users-password' \
  https://docs-test.apigee.net/oauth/token

(Ognuno di questi comandi deve trovarsi tutti su un'unica riga.)

Le credenziali utente sono contenute nei parametri del modulo, mentre le credenziali client sono codificate nell'intestazione dell'autenticazione di base HTTP. Per una descrizione dettagliata di questa chiamata API, inclusi i dettagli sull'intestazione Auth di base richiesta, consulta la sezione relativa alla concessione della password in "Richiesta di token di accesso e codici di autorizzazione".

3. Edge convalida l'app client

Prima di inviare il nome utente e la password dell'utente a un provider di identità, Edge deve sapere che l'app client che effettua la richiesta è un'app valida e attendibile. Un modo per farlo è utilizzare l'autenticazione con chiave API nella chiamata API. In alcuni casi potrebbe essere necessario convalidare sia la chiave del client sia il secret. Esiste un proxy di esempio che illustra questa tecnica allternata nel repository api-platform-samples su GitHub.

4. Edge elabora le credenziali di accesso

Dopo la convalida dell'app client, puoi utilizzare un callout di servizio o un criterio JavaScript per chiamare il servizio di identità, inviando le credenziali dell'utente. Ad esempio, potrebbe trattarsi di un servizio LDAP o di un qualsiasi servizio che vuoi utilizzare per convalidare le credenziali. Per maggiori dettagli su questi criteri, consulta il criterio Estrai variabili e il Criterio JavaScript.

Se il servizio di identità convalida le credenziali e restituisce una risposta 200, Edge continuerà a elaborare la richiesta; in caso contrario, Edge smetterà di elaborare le credenziali e restituisce un errore all'app client.

5. Il criterio OAuthV2 viene eseguito

Se le credenziali sono valide, il passaggio successivo dell'elaborazione prevede l'esecuzione di un criterio OAuthV2 configurato per il tipo di concessione della password. Ecco un esempio. Gli elementi <UserName> e <PassWord> sono obbligatori e puoi recuperarli dalle variabili di flusso salvate con il criterio ExtractVariables. Per informazioni dettagliate su questo criterio, consulta la pagina relativa al criterio OAuthV2.

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>360000000</ExpiresIn> 
  <SupportedGrantTypes> 
     <GrantType>password</GrantType> 
  </SupportedGrantTypes> 
  <GrantType>request.queryparam.grant_type</GrantType> 
  <UserName>login</UserName>
  <PassWord>password</PassWord>
  <GenerateResponse/> 
</OAuthV2>

Se il criterio ha esito positivo, viene generata al client una risposta contenente un token di accesso. La risposta è in formato JSON. Ecco un esempio. Tieni presente che access_token è uno degli elementi:

{
    "issued_at": "1420258685042",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420258685042",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799",
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6",
    "organization_name": "docs",
    "refresh_token_expires_in": "0",
    "refresh_count": "0"
}

6. Il client chiama l'API protetta

Ora, con un codice di accesso valido, il client può effettuare chiamate all'API protetta. In questo scenario, le richieste vengono effettuate ad Apigee Edge (il proxy), che si occupa della convalida del token di accesso prima di passare la chiamata API al server delle risorse di destinazione. I token di accesso vengono passati in un'intestazione di autorizzazione. Ad esempio:

$ curl -H "Authorization: Bearer I6daIgMSiUgYX1K2qgQWPi37ztS6
" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282