Come posso risolvere gli errori "401 Unauthorized" da un endpoint REST API di API Gateway 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. Ora ricevo gli errori "401 Unauthorized" nella risposta dell'API. Come posso risolvere questi errori?

Risoluzione

Nota: API Gateway può restituire errori 401 Unauthorized per una serie di motivi. La procedura seguente mostra come risolvere solo gli errori 401 relativi ai sistemi di autorizzazione COGNITO\ _USER\ _POOLS.

Controlla la configurazione del sistema di autorizzazione sul metodo API

1.    Nella console API Gateway, nel riquadro API, scegli il nome della tua API.

2.    Nel riquadro di navigazione, scegli Sistemi di autorizzazione nella tua API.

3.    Controlla la configurazione del sistema di autorizzazione e conferma che quanto segue è vero:
L'ID del pool di utenti corrisponde all'emittente del token.
L'API viene implementata.
Il sistema di autorizzazione funziona in modalità test.

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

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

Verifica la validità del token di sicurezza

Quando controlli la validità del token di sicurezza, conferma che quanto segue è 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 quindi decodificare i token. Se i token non sono validi, assicurati che non siano stati aggiunti spazi nei token quando sono stati passati nell'intestazione della richiesta.

Importante: se non ci sono ambiti aggiuntivi configurati sul metodo API Gateway, assicurati di utilizzare un token ID valido. Se sono configurati ambiti aggiuntivi sul metodo API Gateway, conferma di utilizzare un token di accesso valido. Per ulteriori informazioni, consulta Integrazione di una REST API con un pool di utenti di Amazon Cognito e Utilizzo degli ambiti personalizzati di Amazon Cognito in API Gateway.

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 rivendicazione nel payload del token di sicurezza di esempio:

  • 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:

Se stai usando Postman per richiamare l'API

Usa la modalità di autorizzazione OAuth 2.0 per utilizzare direttamente i token Amazon Cognito. Quando configuri la modalità di autorizzazione OAuth 2.0, verifica che sia vero quanto segue:

  • Il Tipo di concessione è il codice di autorizzazione o l'autorizzazione implicita, in base alla configurazione sul client dell'app del pool di utenti.
  • L'URL di callback corrisponde all'URL reindirizzato configurato sul client app del pool di utenti.
  • L'URL di autenticazione è nel seguente formato:
https://mydomain.auth.us-east-1.amazoncognito.com/login

Importante: sostituisci mydomain con il nome di dominio che stai utilizzando per configurare il tuo pool di utenti. Assicurati di inserire la regione AWS corretta in cui è ospitata la tua API.

  • Client ID è l'ID client app del pool di utenti.
    Nota: se un segreto client è associato al client app del pool di utenti, assicurati di specificare il segreto del client nella scheda Autorizzazione nel campo segreto client. Se nessun segreto client è associato al client app del pool di utenti, lascia vuoto il camposegreto client.
  • Ambito è configurato come openid.
    Nota: l'ambito openid deve essere consentito anche sul client app del pool di utenti.
  • Per il flusso del codice di autorizzazione viene inserito l'endpoint del token del pool di utenti Amazon Cognito corretto.

Esempio di endpoint del token del pool di utenti Amazon Cognito

https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token

Nota: Postman potrebbe non passare il tipo di contenuto richiesto all'endpoint del token, il che può causare un errore 405. Tuttavia, non ricevi l'errore 504 quando usi il flusso implicito.


Informazioni correlate

Secure API access with Amazon Cognito federated identities, Amazon Cognito user pools, and Amazon API Gateway

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

Controllo degli accessi a una REST API utilizzando pool di utenti di Amazon Cognito come sistema di autorizzazione