2014-10-10 23 views
11

Ho un'API che richiede l'autenticazione tramite OAuth 2.0. Inizialmente avevo previsto l'uso di HWIOAuthBundle, tuttavia dalle indagini ciò ha a che fare con l'aggancio di terze parti al meccanismo di sicurezza/autenticazione di Symfony e non fornisce il meccanismo necessario per convalidare le intestazioni di OAuth 2.0 Authorization.Aggiunta dell'autenticazione OAuth 2.0 a un'API RESTful

Ho quindi trovato alcune informazioni su FOSOAuthServerBundle che consente a un'applicazione di diventare il proprio provider OAuth 2.0 oltre a fornire i necessari meccanismi di sicurezza per convalidare le intestazioni Authorization.

Tuttavia, il problema è che mi piacerebbe integrare il provider OAuth 2.0 (server di autorizzazione) in un'applicazione esterna (che contiene la base utenti) e non includerlo all'interno dell'API. Quale fornirà un meccanismo per eseguire la verifica del token contro questa app esterna tramite (un'altra) API RESTful.

Punti:

  • RESTful API richiede l'autenticazione OAuth 2.0.
  • Il server di autorizzazione OAuth 2.0 deve essere situato in un'applicazione separata.

Credo che dovrei usare la concessione Implicit e chiamare il server di autorizzazione su ogni richiesta per verificare che il token sia corretto.

È il mio pensiero è corretto?

+0

quindi Se ho capito bene, vuoi autenticarti utilizzando le credenziali dell'utente da un'API esterna? – Sehael

+0

Non le credenziali dell'utente. Via oauth ma questo è esterno all'API. Tutti gli esempi che ho visto li hanno avuti insieme – Malachi

+0

Quindi vuoi impostare FOSOAuthServerBundle nella tua applicazione corrente in modo che un'app esterna possa usare la tua applicazione per eseguire l'autenticazione? – Sehael

risposta

3

Un sacco di grandi aziende come Google, Facebook ecc. Hanno un server di autorizzazione separato dal server API. Controlla il flusso di autorizzazione OAuth di Google al di sotto di Google OAuth Authorization

Puoi anche controllare Google OAuth Documentation per i dettagli.

Quindi tutto ciò che si dovrebbe fare è implementare un provider OAuth in modo che sia possibile autorizzare contro quel provider. C'è una lista di librerie disponibili sul sito web OAuth: http://oauth.net/code. Puoi guardare nello specifico here; c'è un esempio per l'esecuzione di un fornitore di servizi OAuth in Java.

2

oAuth può essere sicuramente un server diverso dal server delle applicazioni. Di seguito è riportato un quadro di ciò che la sequenza di autenticazione sarà simile:

enter image description here

- Ovviamente, se il forum non è in grado di decodificare o convalidare il token, il forum sarebbe restituire un codice di stato 401 invece di un 200 codice di stato.

Fintanto che il server oAuth & condivide la stessa chiave pubblica, si sta benissimo con la suddivisione del server oAuth & dell'applicazione.

In effetti, dare un'occhiata a jwt.io. Incolla il token che si ottiene dal server outh in lì. Dovrebbe essere in grado di decodificare il token immediatamente. Quindi, puoi inserire la tua chiave pubblica nella casella di testo "segreto" per verificare che il token sia verificato.

L'applicazione (Forum, in questo esempio) dovrebbe essere in grado di fare lo stesso:

1) estrae il token dal intestazione di autorizzazione della richiesta

2) decodificare il token

3) Controllare la data di scadenza

4) Verificare il token con il tasto

5) Restituisce codice di stato del oAuth pubblico di successo o di un di stato di errore codice

+1

Non ho esaminato JWT per questa implementazione ma immagino che questo sia qualcosa che può essere considerato. Grazie! – Malachi

4

Per quanto ne undesratnd vostro requisito, si richiede di autenticare le vostre API tramite esterno OAuth autorizzazione del server:

  • cliente ha bisogno di fornire il token di accesso recuperati nei passaggi precedenti insieme al richiesta di accesso alla risorsa protetta. Il token di accesso verrà inviato come parametro di autorizzazione nell'intestazione della richiesta.

  • Il server autentica la richiesta in base al token.

  • Se il token è valido, il client otterrà un accesso alle risorse protette, altrimenti l'accesso viene negato.

qui è un example che potrebbe aiutarti a raggiungere il tuo requisito. Controlla questo document.

O semplicemente, si può fare con Jersey and Oauth

Inoltre, è possibile controllare Apache Oltu e capire il modo per raggiungere la vostra esigenza.

Problemi correlati