234 messaggi dal 08 marzo 2012
Ciao,

in una web app Asp.Net Core ho integrato un'autenticazione basata su oAuth 2.0
Non mi però chiarissima la modalità tramite client_id e client_secret

Nel senso ad oggi posso autenticarmi tramite username/password ma anche tramite client_id e client_secret.
Il primo caso è chiaro (quello classico) ma nel secondo caso normalmente si risale all'utente e quindi si può determinare l'autorizzazione a interagire con specifici record oppure è da considerarsi un'integrazione applicativa che quindi ha accesso a tutti i record accessibili tramite uno specifico web service?

Non so se mi sono spiegato ben
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
con OAuth 2.0, si suppone che esista un identity provider esterno (anche chiamato authorization server) che è in grado di verificare lo username e la password inserite dall'utente.
Pensa per esempio all'autenticazione con Google o Facebook: quando l'utente prova ad accedere ad una pagina riservata della tua applicazione, viene reindirizzato alla pagina di login di Google e là inserisce le sue credenziali. Google le verifica e poi reindirizza l'utente alla tua pagina fornendoti un token, ovvero un oggetto in cui trovi l'identità dell'utente e i suoi claims. A quel punto, dato che sai chi è l'utente, puoi decidere se può accedere o no alle risorse della tua applicazione.

client_id e client_secret sono due valori che hai ottenuto quando hai registrato la tua applicazione presso l'identity provider esterno.

Come mai hai bisogno di OAuth2 dato che, mi sembra di capire, la tua applicazione è già in possesso degli username e delle password degli utenti? Se devi realizzare una Web API, perché non usare JWT Token nudi e crudi (ad esempio)?

ciao,
Moreno

Enjoy learning and just keep making
234 messaggi dal 08 marzo 2012
BrightSoul ha scritto:

Come mai hai bisogno di OAuth2 dato che, mi sembra di capire, la tua applicazione è già in possesso degli username e delle password degli utenti? Se devi realizzare una Web API, perché non usare JWT Token nudi e crudi (ad esempio)?


Perchè voglio creare un sistema di autenticazione riutilizzabile in diversi contesti e che si rifaccia ad uno standard, così che la sua integrazione risulti più semplice.
Il sistema ad oggi ti permette di fare login tramite username/password e rilascia un JWT Token corredato di tutti i claims. Il sistema rilascia nello specifico "AccessToken" e "RefreshToken".
Gli altri servizi riescono quindi ad autenticare gli utenti ed a validare se la chiamata ad una specifica risorsa è autorizzata o meno.

Oltre questo vorrei però permettere un'integrazione applicativa, che sia soggetta a regole diverse, ad esempio una scadenza password meno frequente etc...Questo allo scopo per esempio di consentire a batch esterni di chiamare determinate API. Mi chiedevo però se normalmente client_id e client_secret devono comunque rifarsi all'identità di uno specifico utente del sistema oppure essere gestiti "a parte".
11.886 messaggi dal 09 febbraio 2002
Contributi

voglio creare un sistema di autenticazione riutilizzabile in diversi contesti

Ok, dunque vuoi permettere il single sign-on su varie altre applicazioni. In questo caso dai un'occhiata a IdentityServer4.

Documentazione ed esempi:
http://docs.identityserver.io/en/release/index.html
https://github.com/IdentityServer/IdentityServer4.Samples

Qui c'è un articolo in merito ma è obsoleto perché si riferisce a IdentityServer3. Puoi comunque leggerlo per capire se fa al caso tuo.
http://www.aspitalia.com/articoli/asp.net/single-sign-on-identity-server-p-4.aspx

Grazie a IdentityServer4, potrai realizzare un'applicazione ASP.NET Core che sarà in grado di verificare le credenziali degli utenti ed emettere token. E' un cosiddetto "token service".
Dopo l'autenticazione, alla tua applicazione client verrà inviato un token contenente l'identità dell'utente. Dai claim che troverai in esso, deciderai se consentirgli o no l'accesso alle varie Web API.
Puoi usare l'attributo [Authorize] e le sue proprietà Roles e Policy per determinare chi può consumare ogni action. Leggi qui:
http://www.aspitalia.com/articoli/asp.net-core/autenticazione-autorizzazione-aspnetcore-p-4.aspx#title_1


chiedevo però se normalmente client_id e client_secret devono comunque rifarsi all'identità di uno specifico utente del sistema oppure essere gestiti "a parte".

No, client_id e client_secret sono valori propri dell'applicazione client che usa IdentityServer.
Ecco come si definiscono i client. Per "client" si intende una delle applicazioni che sfruttano IdentityServer, non un utente.
http://docs.identityserver.io/en/release/topics/clients.html

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.