2016-01-04 18 views
6

Un po 'un principiante di OAUTH e volevo chiedere se ho capito qualcosa correttamente. Sto utilizzando OWIN e C# e la configurazione ho il seguente scenario:Informazioni su client_id e client_secret

  1. un utente effettua una richiesta al mio punto finale del token, passando in un nome utente/password con un grant_type di password. Se le credenziali sono valide, creo un JWT.

  2. l'utente ottiene indietro un JWT, e quindi il client utilizza quella pedina che va in avanti per tutte le richieste

  3. eventuali richieste che richiedono l'autorizzazione io uso le affermazioni del token per garantire l'utente è autorizzato a fare questa richiesta.

Quindi, dove entrano in questo client_id e client_secret? È solo un ulteriore livello di sicurezza per dire "prima che tu possa anche ottenere un token, devi passarmi un altro set di credenziali (id/segreto) e solo se quelli sono validi, oltre al tuo nome utente/password fornita, si può tornare a JWT

vorrei capire chi è il due riguardano - Grazie mille

+0

Quelli sono utilizzati sulla convalida del token per assicurarsi che sia i lati corrispondono. Un po 'come quando usi una chiave API di google maps. Uno si crea dalla loro parte per te quando ti registri e ricevi la stessa chiave che passerai su ogni richiesta. –

risposta

3

Sia client_id che client_secret non vengono utilizzati nel flusso della password. Tuttavia, come probabilmente saprai, OAuth2 ha altri flussi, adatti per altri scenari.

Vale a dire:

  • il codice flusso autorizzazione utilizzati in applicazioni web che autenticano gli utenti lato server. Il client_id viene utilizzato nel reindirizzamento iniziale, il client_secret viene utilizzato nell'ultimo passaggio in cui l'app scambia l'unico codice temporale per un token.

  • le credenziali del client flusso utilizzato per autenticare le applicazioni, piuttosto che i singoli utenti

Un riferimento concisa di tutti i vari flussi: https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified

+0

Quindi, quando ho intenzione di consentire a un utente di accedere al sistema, sembra che non avrei bisogno di un client_id o client_secret? In caso affermativo, perché non posso semplicemente consentire all'utente di accedere con un nome utente/password per ottenere un token e ho finito? – NullHypothesis

+0

@ user3379785: perché? Perché per imparare username/password, la tua app deve chiedere entrambi. E nessuno rischierà di fornire le proprie credenziali di google/facebook fornendole in una pagina sconosciuta. Il flusso del codice di autorizzazione ** reindirizza ** il browser alla pagina del provider in modo che le credenziali siano fornite sulla loro pagina, senza lasciare spazio a perdite indesiderate. –

+0

Il mio front end è sullo stesso dominio della mia API di back-end. E solo la mia app è quella che effettua le chiamate per ottenere un JWT con nome utente/password dell'utente. Quindi, nel mio caso, non è necessario un client_id o un segreto? In realtà non vedrei come si usa un segreto dato che sono chiamate JS dirette alla mia API, e la mia API di backend sta gestendo il controllo delle credenziali e l'emissione di JWT – NullHypothesis

0

ci sono due parti che devono essere autenticati:?! l'applicazione e l'utente

.

L'applicazione è autenticata con l'ID e il segreto, possibilmente con il backup dell'URL di richiamata, che dovrebbe assicurare che il rec Ipient of theken è quello giusto.

L'utente viene autenticato tramite il provider OAuth. Può utilizzare un nome utente/password per esso o qualsiasi altra cosa il provider OAuth ritenga necessario. Tale token viene utilizzato per consentire all'applicazione di ottenere i dati dell'utente senza conoscere nome utente e password.

+0

Quindi questo è solo per impedire alle applicazioni non autorizzate di effettuare chiamate alla mia API? Anche se la chiamata riguarda un'azione anonima nella mia API, posso limitare l'utilizzo in modo che solo il client possa accedervi? ok grazie. Quindi, in generale, vuoi sempre passare la chiave API/segreto, così come il token, in ogni richiesta? – NullHypothesis

+0

Sì, è un meccanismo di autenticazione di base. –