Dopo molte ricerche, ho scoperto che il tipo di sovvenzione client_credentials
è per questo scenario. Una volta inserito questo termine in google, puoi trovare un sacco di risorse molto utili.
Questo è il flusso normale per OAuth 3 zampe 2.0 (vogliamo che l'utente per accedere):
Supponiamo di avere i seguenti punti finali nella nostra app per l'autenticazione:
/oauth/auth
/oauth/token
Normalmente (per codice di autorizzazione di sovvenzione), abbiamo indirizzare l'utente a /oauth/auth?state=blah&client_id=myid&redirecturl=mysite.com/blah
Poi dopo l'autenticazione, l'utente viene reindirizzato a mysite.com/blah?code=somecode
Otteniamo quindi somecode
e lo scambiamo per un token utilizzando /oauth/token?code=somecode&client_id=myid&client_secret=mysecret
Possiamo quindi utilizzare il token per effettuare chiamate.
Questo è il flusso domanda di client_credentials
per implementare 2 zampe OAuth 2.0, che è decisamente più semplice:
Si noti che la portata è opzionale. L'endpoint quindi restituisce direttamente un token di accesso da utilizzare (non viene fornito alcun token di aggiornamento). Poiché non viene fornito alcun token di aggiornamento, quando il token scade, sarà necessario riautenticarlo e richiederne uno nuovo.
Questo porta alle seguenti avvertenze:
- utilizzare questo solo per (molto molto) applicazioni attendibili come le applicazioni interne.
- È necessario il dispositivo a modo tuo per l'autenticazione. Ad esempio, lo RFC's example utilizza l'autenticazione di base.
Un'altra soluzione è utilizzare JWT (token Web JSON) come lo google OAuth API. È un processo molto complicato, ma esistono numerose librerie per generare il tuo JWT. È quindi inviare i seguenti dati del modulo (URL codificato, naturalmente):
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=generated_jwt
Questo viene inviato alle /oauth/token
per ottenere il token.
Per quanto riguarda la domanda di se è possibile creare un'API che supporta 2 zampe e 3 gambe OAuth 2.0, Sì, è possibile.
Quindi l'endpoint /auth
viene utilizzato solo quando gli utenti devono autenticarsi con il servizio.
Nel /token
endpoint, semplicemente controllare il valore di grant_type
nei parametri GET per urn:ietf:params:oauth:grant-type:jwt-bearer
se si utilizza JWT o client_credentials
per client_credentials.
Si noti che durante la generazione di client_id e client_secret da fornire all'utente, se si supporta più grant_types
, assicurarsi di disporre di una colonna del database per memorizzare il tipo di tipo di concessione per cui ID e segreto sono stati generati. Se è necessario disporre di più tipi di sovvenzione per utente, generare un diverso insieme di credenziali per ciascun tipo di sovvenzione.
d'accordo con te, ci sono abbastanza informazioni per oauth2 a 3 zampe o a due gambe oauth 1.0, ma quasi nulla per oauth 2.0 a due gambe. – skyfree