Convalida dei token

La convalida dei token è una parte importante dello sviluppo dell'applicazione moderno. La convalida dei token consente di proteggere le applicazioni o le API da utenti non autorizzati. IBM Cloud® App ID utilizza token di accesso e di identità per garantire l'autenticazione di un utente o di un'applicazione prima che gli venga concesso l'accesso. Se stai utilizzando uno degli SDK forniti da App ID, l'ottenimento e la convalida dei tuoi token vengono fatti al tuo posto.

Per ulteriori informazioni su come vengono utilizzati i token in App ID, consulta Descrizione dei token.

I token sono utilizzati per verificare che una persona è chi dice di essere. Confermano tutte le autorizzazioni di accesso che un utente potrebbe contenere, per una durata specificata. Quando un utente accede alla vostra applicazione e riceve un token, la vostra applicazione deve convalidare l'utente prima che gli venga concesso l'accesso.

Cosa succede se sto lavorando con un linguaggio per cui App ID non ha un SDK?

Hai tre opzioni:

  • Utilizza le API App ID
  • Implementa la tua logica di convalida
  • Utilizza un qualsiasi SDK open source conforme con OIDC

Utilizzo delle API App ID

Utilizzando l'introspezione, puoi utilizzare App ID per convalidare i tuoi token.

  1. Invia una richiesta POST all'endpoint API /introspect per convalidare il tuo token. La richiesta deve fornire il token e un'intestazione di autorizzazione di base che contiene il segreto e l'ID client.

    Richiesta di esempio:

    POST /oauth/v4/<tenantID>/introspect HTTP/1.1
    Host: us-south.appid.cloud.ibm.com
    Content-Type: application/x-www-form-urlencoded
    Authorization: Basic jdFlUaGlZUzAwTW0Tjk15TmpFMw==
    Cache-Control: no-cache
    
    token=XXXXX.YYYYY.ZZZZZ
    
  2. Il server controlla la scadenza e la firma del token e restituisce un oggetto JSON che indica se il token è attivo o meno.

    Risposta di esempio:

    {
    "active": true
    }
    

Convalida manuale dei token

Puoi convalidare i tuoi token localmente analizzando il token, verificandone la firma e convalidando le attestazioni archiviate nel token.

  1. Analizza i token. Il JSON Web Token(JWT) è un modo standard per passare informazioni in modo sicuro. È composto da tre parti principali: intestazione, payload e firma. Sono base64URL codificati e separati da un punto (.). È possibile utilizzare qualsiasi decoder base64URL disponibile per paralizzare il token. In alternativa, si può usare una delle librerie elencate per analizzare il token.

    Token codificato di esempio:

    eyJhbGciOiJSUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiJhMmszIn0
    .eyJpc3MiOiJhcHBpZC1vYXV0aCIsImF1ZCI6ImFiYzEyMyIsImV4cCI6MTU2NDU2Nn0
    .IycnAGUmMHzpTWbe-qaRsx0B4Zi-SVav710Fb_8CTCQvLrHX9d42WuCZ5bW
    d-ikgEsf6waQxeBfhfwYxwHN87LZupApagVMZtylVAnXhG1pHu_32wbZsPvg6QjzNO
    j6ys2Lfl3qfb5Qrp9u4IsZltKPEN8HdfeOcKXxpw6UqP-8
    

    Token decodificato di esempio:

    {
    "alg": "RS256",
    "typ": "JOSE",
    "kid": "a2k3",
    "iss": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6050a61",
    "aud": "abc123",
    "exp": 1564566
    }
    
  2. Effettuare una chiamata all'endpoint /publickeys per richiamare le proprie chiavi pubbliche. Le chiavi pubbliche restituite sono formattate come JSON Web Keys(JWK).

    Richiesta di esempio:

    GET /oauth/v4/<tenantID>/publickeys HTTP/1.1
    Host: us-south.appid.cloud.ibm.com
    Cache-Control: no-cache
    
  3. Memorizza le chiavi nella tua cache dell'applicazione per un utilizzo futuro. La memorizzazione delle chiavi velocizza il processo e previene il ritardo di rete se viene effettuata un'altra chiamata.

  4. Importa i parametri della chiave pubblica.

    Risposta di esempio:

    {
    "keys": [
       {
          "kty": "RSA",
          "use": "sig",
          "n": "AsdaE",
          "e": "SDAasw",
          "kid": "ad123dCAz"
       }
    ]
    }
    
    Parametri della chiave pubblica
    Parametro Descrizione
    kty Definisce l'algoritmo che viene utilizzato.
    use Definisce l'ambito della chiave.
    kid Definisce l'ID univoco della chiave.
    Altro Potrebbero esserci anche degli altri parametri rimanenti che sono specifici per il tuo algoritmo che devono essere importati.
  5. Verifica la firma del token. L'intestazione del token contiene l'algoritmo che è stato utilizzato per firmare il token e l'ID della chiave o l'attestazione kid della chiave pubblica corrispondente. Poiché le chiavi pubbliche non vengono modificate frequentemente, puoi memorizzare nella cache le chiavi pubbliche nella tua applicazione e occasionalmente aggiornarle. Se alla tua chiave memorizzata nella cache manca l'attestazione kid, puoi convalidare i token localmente.

    1. Chiedi alla tua applicazione di verificare che i contenuti dell'intestazione del token in entrata corrispondano ai parametri della chiave pubblica.
    2. Controlla nello specifico che siano stati utilizzati gli stessi algoritmi e che la tua cache della chiave pubblica contenga una chiave con l'ID della chiave pertinente.
    3. Assicurati che il tuo valore hash sia lo stesso di quello della firma del modulo PEM della chiave pubblica. Il tuo valore hash può essere ottenuto combinando ed eseguendo l'hash dell'intestazione del payload del token. Poiché questo processo può essere complesso da implementare manualmente, potrebbe essere utile utilizzare una delle librerie elencate per convalidare la firma.
  6. Convalida le attestazioni archiviate nei token. Per verificare dei controlli futuri, puoi utilizzare questo elenco.

    Affermazioni che devono essere convalidate
    Attestazione Descrizione
    iss L'emittente deve essere lo stesso del server OAuth App ID.
    exp L'ora corrente deve essere inferiore all'ora di scadenza.
    aud I destinatari devono contenere l'ID client della tua applicazione.
    tenant Il tenant deve contenere l'ID tenant della tua applicazione.
    scope L'ambito delle autorizzazioni che vengono concesse all'utente. Specifico per il token di accesso.