Salta al contenuto

Come posso risolvere gli errori "401 Unauthorized" che ricevo dall'endpoint di una REST API di Gateway API dopo aver configurato un pool di utenti Amazon Cognito?

5 minuti di lettura
0

Ho configurato il mio pool di utenti Amazon Cognito come sistema di autorizzazione COGNITO_USER_POOLS sulla mia REST API di Amazon API Gateway. Ricevo errori "401 Unauthorized" nella risposta dell'API.

Risoluzione

Nota: API Gateway può restituire errori 401 Unauthorized per vari motivi. La seguente procedura mostra come risolvere solo gli errori 401 relativi ai sistemi di autorizzazione COGNITO_USER_POOLS.

Controlla la configurazione del sistema di autorizzazione nel metodo API

Completa i seguenti passaggi:

  1. Apri la console Gateway API.
  2. Nel pannello di navigazione, scegli API, quindi seleziona l'API.
  3. Nel pannello di navigazione, scegli Sistemi di autorizzazione per l'API selezionata.
  4. Controlla la configurazione del sistema di autorizzazione e verifica che quanto segue sia vero:
    L'ID del pool di utenti corrisponde all'emittente del token.
    Hai distribuito l'API.
    Il sistema di autorizzazione funziona in modalità test per i token ID.
    Nota: non puoi utilizzare questa funzionalità per verificare i token di accesso.

Per ulteriori informazioni, consulta Integrazione di una REST API con un pool di utenti di Amazon Cognito.

Nota: se non riesci a invocare l'API dopo aver verificato la configurazione del sistema di autorizzazione, controlla la validità del token di sicurezza.

Verifica la validità del token di sicurezza

Per controllare la validità del token di sicurezza, verifica che quanto segue sia vero:

  • Il token di sicurezza non è scaduto.
  • L'emittente del token di sicurezza corrisponde al pool di utenti di Amazon Cognito configurato nell'API.
  • I valori della stringa del token ID e del token di accesso sono validi.
    Nota: se i valori della stringa sono validi, puoi decodificare i token. Se i token non sono validi, esaminali. Assicurati che i token non contengano spazi aggiuntivi derivanti dal passaggio attraverso l'intestazione della richiesta.

Importante: se non hai configurato alcun ambito nel metodo di Gateway API, assicurati di utilizzare un token ID valido. Se configuri ambiti aggiuntivi nel metodo di Gateway API, assicurati di utilizzare un token di accesso valido. Per ulteriori informazioni, consulta Come si autorizza l'accesso alle API Gateway utilizzando gli ambiti personalizzati in Amazon Cognito?

Esempio di payload del token di sicurezza:

Id token payload: {
 "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
 "aud": "xxxxxxxxxxxxexample",
 "email_verified": true,
 "token_use": "id",
 "auth_time": 1500009400,
 "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
 "cognito:username": "janedoe",
 "exp": 1500013000,
 "given_name": "Jane",
 "iat": 1500009400,
 "email": "janedoe@example.com"
 }
Access token payload:
{
    "auth_time": 1500009400,
    "exp": 1500013000,
    "iat": 1500009400,
    "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
    "scope": "aws.cognito.signin.user.admin",
    "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "token_use": "access",
    "username": "janedoe@example.com"
}

Osserva i seguenti nomi di richieste nell'esempio di payload del token di sicurezza:

  • token\ _use indica il tipo di token (ID o token di accesso).
  • exp indica l'ora di scadenza del token.
    Nota: la richiesta exp è rappresentata da secondi trascorsi dall'epoch Unix (1970-01-01T0:0:0Z) fino alla data e all'ora di scadenza del token in tempo universale coordinato (UTC).
  • auth\ _time indica quando è stato emesso il token.
  • iss indica il dominio del pool di utenti che ha emesso i token.

Importante: il token utilizzato deve corrispondere al pool di utenti configurato nel metodo di Gateway API. Se non riesci a invocare l'API, verifica di utilizzare correttamente l'intestazione di autorizzazione. Se ricevi errori 401, assicurati che le policy delle risorse non blocchino la richiesta.

Se utilizzi Postman per invocare l'API

Per utilizzare direttamente i token Amazon Cognito, utilizza la modalità di autorizzazione OAuth 2.0. Per ulteriori informazioni, consulta API authentication and authorization in Postman (Autenticazione e autorizzazione di API in Postman) sul sito web Postman.

Quando configuri la modalità di autorizzazione OAuth 2.0, verifica che quanto segue sia vero:

  • L'opzione Grant type (Tipo di concessione) è impostata su Authorization code (Codice di autorizzazione) o Authorization implicit (Autorizzazione implicita).
  • Callback URL (URL di callback) corrisponde al valore Redirected URL (URL reindirizzato) configurato nel client di app del pool di utenti.
  • Auth URL (URL di autenticazione) è nel seguente formato: https://mydomain.auth.us-east-1.amazoncognito.com/login
    Nota: sostituisci mydomain con il nome di dominio che utilizzi per configurare il tuo pool di utenti. Assicurati di inserire la Regione AWS corretta in cui è ospitata l'API.
  • Client ID è l'ID del client di app del pool di utenti.
    Nota: se associ un segreto del client al client di app del pool di utenti, specifica il segreto nella scheda Authorization (Autorizzazione). Se al client di app del pool di utenti non è associato alcun segreto, lascia vuoto il campoClient secret (Segreto client).
  • Scope (Ambito) è configurato come Openid.
    Nota: devi consentire l'ambito Openid nel client di app del pool di utenti.
  • Per Authorization code flow (Flusso di codici di autorizzazione), inserisci l'endpoint corretto del token del pool di utenti Amazon Cognito.
    Esempio di endpoint del token del pool di utenti Amazon Cognito:
    https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token

Nota: se l'endpoint del token non supporta il tipo di contenuto, Postman non può passare il contenuto richiesto e genera un errore 405. Per evitare il problema, utilizza il flusso implicito. Per ulteriori informazioni, consulta Concessioni di OAuth 2.0.

Informazioni correlate

Secure API Access with Amazon Cognito Federated Identities, Amazon Cognito User Pools, and Amazon API Gateway (Accesso sicuro alle API con le identità federale di Amazon Cognito, i pool di utenti Amazon Cognito e Gateway API)

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

Controlla l'accesso alle REST API utilizzando i pool di utenti di Amazon Cognito come sistema di autorizzazione