Come posso configurare un pool di utenti Amazon Cognito come autorizzatore su un'API REST di API Gateway?

8 minuti di lettura
0

Desidero configurare un pool di utenti Amazon Cognito come autorizzatore sulla mia API REST di Amazon API Gateway.

Breve descrizione

Esistono due modi per configurare un pool di utenti Amazon Cognito come autorizzatore su un'API REST di API Gateway:

Puoi utilizzare dei token ID o token di accesso per l'autorizzazione. I token di accesso possono autorizzare l'accesso alle API di API Gateway utilizzando ambiti personalizzati in Amazon Cognito. Un autorizzatore Lambda può convalidare le affermazioni nei token ID e nei token di accesso emessi da Amazon Cognito.

Per ulteriori informazioni, consulta questi argomenti:

Risoluzione

La procedura seguente mostra come creare un autorizzatore COGNITO_USER_POOLS. L'esempio presuppone che tu abbia già creato due cose:

Crea un autorizzatore COGNITO_USER_POOLS

Per ulteriori informazioni, consulta Integrare un'API REST con un pool di utenti Amazon Cognito. Segui le istruzioni nella sezione Per creare un autorizzatore COGNITO_USER_POOLS utilizzando la console API Gateway.

Prova il nuovo autorizzatore COGNITO_USER_POOLS

Dopo aver creato l'autorizzatore COGNITO_USER_POOLS, procedi come segue:

  1. Nella console API Gateway, scegli il pulsante Test sotto il nuovo autorizzatore.

  2. Nella finestra Test, per Authorization (Autorizzazione), inserisci un token ID dal nuovo pool di utenti di Amazon Cognito.

  3. Scegli Test.

Nota: se il token ID è corretto, il test restituisce un codice di risposta 200. Un token ID errato restituisce un codice di risposta 401.

Configura l'autorizzatore COGNITO_USER_POOLS su un metodo API

Per ulteriori informazioni, consulta Integrare un'API REST con un pool di utenti Amazon Cognito. Segui le istruzioni nella sezione Per configurare un autorizzatore COGNITO_USER_POOLS sui metodi.

Ottieni token di autorizzazione

Esistono quattro modi per ottenere i token di autorizzazione:

Nota: sonfigura l'interfaccia utente ospitata da Amazon Cognito con una concessione di codice di autorizzazione in modo che la tua applicazione possa scambiare il codice con un endpoint token.

Se stai utilizzando un tipo di concessione implicito, puoi ottenere la concessione dall'URL di callback. L'URL di callback viene aggiunto con i parametri del token di accesso e del token ID per il flusso implicito. Assicurati di utilizzare il tipo di token corretto.

Per ottenere token di autorizzazione utilizzando l'interfaccia utente ospitata per Amazon Cognito

Per utilizzare il flusso di Authorization Code Grant, procedi come segue:

Nota: il parametro del tipo di risposta deve essere "codice" quando si utilizza il flusso di concessione del codice di autorizzazione.

  1. Invia una richiesta GET per la concessione di un codice di autorizzazione:

Importante: sostituisci example_domain con il nome di dominio del tuo pool di utenti. Sostituisci example_app_client_id con l'ID client dell'app del tuo pool di utenti. Sostituisci example_callback_url con il tuo URL di callback.

https://example_domain/oauth2/authorize?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url

Nota: includi il parametro identity_provider per l'endpoint da reindirizzare al provider di identità federato. Se l'app client è configurato solo per i pool di utenti Amazon Cognito, il seguente endpoint reindirizza all'endpoint /login:

https://example_domain/login?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url
  1. Accedi al tuo pool di utenti o al tuo provider di identità federato. L'interfaccia utente reindirizza all'URL specificato nel callback per il client dell'app.

Importante: l'URL di reindirizzamento include il codice di autorizzazione che deve essere scambiato con l'endpoint del token per ottenere token validi.

  1. Invia una richiesta POST all'endpoint /oauth2/token per scambiare un codice di autorizzazione per i token. Per ulteriori informazioni, consulta Token endpoint.

Esempio di richiesta POST per lo scambio di un codice di autorizzazione per i token

Nota: la richiesta POST di esempio utilizza il seguente endpoint /oauth2/token: https://example_domain.auth.us-east-1.amazoncognito.com/oauth2/token &

Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZXhhbXBsZTEyMzQ1Njc4OTA6enl4OTh3N3l2dHNycTY1NHBvMzIx
grant_type=authorization_code&
client_id=example1234567890&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect

Esempio di risposta alla richiesta POST

HTTP/1.1 200 OK
Content-Type: application/json

{
  "access_token":"abCde1example",
  "id_token":"abCde2example",
  "refresh_token":"abCde3example",
  "token_type":"Bearer",
  "expires_in":3600
}

Per utilizzare il flusso di Implicit Grant (Concessione implicita), effettuate le seguenti operazioni:

Nota: il parametro del tipo di risposta deve essere "token" quando si utilizza il flusso di concessione implicita.

  1. Invia una richiesta GET per una concessione implicita:

Importante: sostituisci example_domain con il nome di dominio del tuo pool di utenti. Sostituisci example_app_client_id con l'ID client dell'app del tuo pool di utenti. Sostituisci example_callback_url con il tuo URL di callback.

https://example_domain/oauth2/authorize?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url

Nota: includi il parametro identity_provider per l'endpoint da reindirizzare al provider di identità federato. Se l'app client è configurato solo per i pool di utenti Amazon Cognito, il seguente endpoint reindirizza all'endpoint /login:

https://example_domain/login?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url
  1. Accedi al tuo pool di utenti con il nome utente e la password di un utente esistente oppure crea un nuovo utente per l'accesso. L'interfaccia utente reindirizza all'URL specificato nel callback per il client dell'app.

Nota: l'URL di reindirizzamento include il token ID e il token di accesso.

Esempio di URL di reindirizzamento

https://www.example.com/#id_token=123456789idtoken123456789&access_token=123456789accesstoken123456789expires_in=3600&token_type=Bearer

Per ottenere token di autorizzazione utilizzando l'interfaccia della linea di comando di AWS

Nota: se ricevi errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando di AWS,assicurati di utilizzare la versione più recente dell'interfaccia della linea di comando di AWS.

Esegui il seguente comando dell'interfaccia a riga di comando AWS initiate-auth per ottenere i token di autorizzazione:

Importante: sostituisci example_user con il tuo nome utente, example_password con la tua password ed example_app_client_id con l'ID client dell'app.

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=example_user,PASSWORD=example_password --client_id example_app_client_id

Esempio di risposta al comando dell'interfaccia a riga di comando AWS initiate-auth

{
  "AuthenticationResult": {
    "AccessToken": "abCde1example",
    "IdToken": "abCde2example",
    "RefreshToken": "abCde3example",
    "TokenType": "Bearer",
    "ExpiresIn": 3600
  },
  "ChallengeParameters": {}
}

Per ottenere token di autorizzazione utilizzando uno degli SDK AWS

Per ulteriori informazioni, consulta Integrazione di Amazon Cognito con app web e mobili.

Per ottenere i token di autorizzazione utilizzando Postman

Usa la modalità di autorizzazione OAuth 2.0 in Postman per ottenere i token di autorizzazione. Per ulteriori informazioni, consulta Perché ricevo errori non autorizzati di API Gateway 401 dopo aver creato un autorizzatore Lambda?

Configura gli ambiti personalizzati OAuth 2.0 nei pool di utenti di Amazon Cognito e verifica gli ambiti in API Gateway

Un ambito fornisce un livello di accesso che un'app può richiedere a una risorsa. Amazon Cognito dispone di ambiti OAuth integrati che possono essere configurati per consentire l'associazione di un app client a un pool di utenti. Per ulteriori informazioni sugli ambiti integrati in Amazon Cognito, consulta Terminologia delle impostazioni del client delle app.

Gli ambiti personalizzati possono essere associati ai server di risorse OAuth 2.0. Per ulteriori informazioni sui server di risorse, consulta Definizione dei server di risorse per il pool di utenti.

Quando usi Amazon Cognito con API Gateway, l'autorizzatore Amazon Cognito autentica la richiesta e protegge le risorse. L'utilizzo di ambiti personalizzati con Amazon Cognito e API Gateway ti aiuta a fornire livelli di accesso differenziati alle tue risorse API. Hai anche un maggiore controllo quando esponi le risorse per ottenere gli ambiti dei token di accesso.

Configurare un server di risorse e ambiti personalizzati OAuth 2.0 in un pool di utenti

  1. Definisci il server di risorse e gli ambiti personalizzati per il tuo pool di utenti.
    Per l'identificatore del server di risorse, fornisci l'endpoint HTTPS del gateway API in cui si trovano le tue risorse.

  2. Se necessario, configura un client di app pool di utenti e quindi aggiungi gli ambiti personalizzati nelle impostazioni del client dell'app.

Nota: un nome di ambito personalizzato è formattato come resourceServerIdentifier/scopeName

Quando un'app client richiede un ambito personalizzato in un flusso OAuth 2.0, l'app client deve richiedere l'identificatore completo per l'ambito. Ad esempio, se l'identificatore del server di risorse è https://myresourceserver.example.com e il nome dell'ambito è resources.read, l'app client deve richiedere https://myresourceserver.example.com/resources.read in fase di esecuzione.

Verifica gli ambiti personalizzati OAuth 2.0 in API Gateway

  1. Integra un'API REST con un pool di utenti Amazon Cognito.

  2. Nella console API Gateway, scegli un'API REST.

  3. Nel riquadro Resources, scegli un nome di metodo.

  4. Scegli la configurazione Method Request.

  5. Dall'elenco a discesa Authorization, scegli Cognito Authorizer. Questo aggiunge automaticamente un nuovo campo denominato OAuth Scopes.

  6. Nel campo OAuth Scopes, inserisci l'identificatore completo per l'ambito personalizzato nel formato indicato in precedenza. Ad esempio, https://myresourceserver.example.com/resources.read.

  7. Salva e distribuisci l'API.

Prova la configurazione usando Postman o CURL

  1. Ottieni il token di accesso dal server di autorizzazione Amazon Cognito utilizzando uno dei flussi OAuth 2.0 definiti per il client.

  2. Invia il token di accesso ricevuto che hai ricevuto come intestazione di autorizzazione in una richiesta a API Gateway.

  3. Se tutto va a buon fine e API Gateway convalida e verifica il token di accesso e l'ambito personalizzato, si ottiene una risposta di 200 OK.

Informazioni correlate

Accesso sicuro alle API con Amazon Cognito Federated Identities, pool di utenti Amazon Cognito e Amazon API Gateway

Come posso decodificare e verificare la firma di un token Web JSON di Amazon Cognito?

Controlla l'accesso a un'API REST utilizzando i pool di utenti di Amazon Cognito come autorizzatore