2012-07-16 12 views
10

Sto creando un servizio basato sul Web che desidero esporre come API REST in modo che gli sviluppatori possano creare app che lo utilizzano. Voglio che gli sviluppatori siano in grado di creare/gestire account utente e autenticarsi tramite API. Come gestirlo? OAuth o qualcos'altro?Come implementare l'autenticazione per l'API REST?

Sto usando python, flask, mongodb per questo.

risposta

10

Abbiamo stabilito quanto segue, utilizzando OAuth 2 (che è molto preferibile a OAuth 1). In particolare stiamo utilizzando il flusso resource owner password credentials. Su come integrarla nel nostro servizio RESTful, ecco l'idea:

  • La risorsa iniziale, quando viene colpito da un utente non autorizzato, restituisce un 401. Il corpo del 401 contiene un singolo collegamento, con rel=oauth2-token. (Il modo in cui segnali i collegamenti dipende dal tipo di supporto utilizzato, si utilizza HAL, ma è possibile utilizzare anche solo l'intestazione Link.)
  • Dopo che l'utente si autentica, torna alla risorsa iniziale, inviando l'intestazione Authorization al portatore token restituito dal processo OAuth 2. A questo punto, restituiamo un 200, con tutti i link normali disponibili.

Non esporre la creazione dell'account, ma se si volesse farlo, lo farei con un altro link disponibile per gli utenti non autorizzati nella risorsa iniziale. Quel collegamento avrebbe una personalizzazione rel poiché è specifica per la tua applicazione, ad es. rel=http://rels.myapi.com/users

Un buon progetto RESTful indica che il collegamento con questo rel indica ad es. http://myapi.com/users e che i consumatori dell'API eseguano un POST a quell'endpoint, che restituisce a loro la nuova risorsa utente con un'intestazione Location che punta alla risorsa utente appena creata ad es. http://myapi.com/users/username. (Le stesse risorse utente sarebbero naturalmente un altro rel, che distingue tra la risorsa utente singolare e la plurale risorsa di raccolta utenti.)

Problemi correlati