120 messaggi dal 09 ottobre 2008
Ciao a tutti.

Ho creato un webservice utilizzando Web Api 2 ed MVC 6 ed ora vorrei proteggerlo.

Se aggiungo l'attributo [Authorize] funziona, nel senso che non mi fa accedere, e suppongo che con un'autenticazione HTTP Basic dovrebbe funzionare, ma non ne sono sicuro e mi chiedo anche se non sia meglio usare token. Per i token non saprei da dove iniziare.

Qualcuno può aiutarmi?

Grazie
Roberto
11.885 messaggi dal 09 febbraio 2002
Contributi
Ciao Roberto,
chi sono gli utenti della tua Web API? Si tratta di altre applicazioni server oppure si tratta di utenti che possiedono username e password?

Nel primo caso, potresti generare delle API Key per ciascuna applicazione e comunicargliele in maniera riservata.
Ogni volta che un'applicazione vorrà consumare la tua api, ti invierà la propria API Key nell'intestazione della richiesta.
Se vuoi mantenere un maggior grado di sicurezza, le applicazioni potrebbero usarla invece come chiave per generare un digest del messaggio. In questo caso ti potrebbe interessare Hawk.
http://www.aspitalia.com/script/1220/Autenticazione-Applicazioni-ASP.NET-Hawk.aspx

Se invece i tuoi utenti sono persone che possiedono username e password, allora dovrai dargli un modo per comunicarti tali credenziali. La Basic Authentication è una scelta percorribile purché la tua API sia protetta da certificato SSL, altrimenti i dati degli utenti potranno essere intercettati e ciò non è sicuro.
Dopo che si sono autenticati con la Basic Authentication, gli puoi rilasciare un token dalla durata limitata che il client ti reinvierà ad ogni successiva richiesta.
Il piccolo vantaggio in più rispetto all'inviare sempre la password consiste nel fatto che il token scade automaticamente e perciò non potrà più essere utilizzato dopo alcuni minuti (o ore, lo controlli tu).
Se ti interessa questo duplice meccanismo di autenticazione (Basic + Token), qui trovi un'applicazione demo:
https://github.com/BrightSoul/DemoLoginWebAPI

ciao,
Moreno

Enjoy learning and just keep making
120 messaggi dal 09 ottobre 2008
Ciao,
grazie della risposta. La demo funziona perfettamente ma non saprei come integrarla nel mio progetto WEB API 2 perché la struttura del progetto è diversa e non c'è App_Start con WebApiConfig...

Roberto
11.885 messaggi dal 09 febbraio 2002
Contributi
Ciao Roberto,
la classe WebApiConfig non è nulla di speciale, contiene giusto un metodo statico che viene invocato dal global.asax.
Quindi puoi:
  • Copiare il suo contenuto direttamente nel metodo Application_Start del tuo global.asax
  • Oppure ricreare la classe WebApiConfig ed invocarne il metodo dal global.asax proprio come nell'esempio.


ciao,
Moreno

Enjoy learning and just keep making
114 messaggi dal 09 luglio 2009
Buongiorno Moreno,
leggevo la tua risposta circa l'utilizzo delle Api Key. Molto interessante.

Potresti spiegarmi un pò meglio l'utilizzo di tale procedura?

Grazie
11.885 messaggi dal 09 febbraio 2002
Contributi
Ciao Marco,
intendi l'autenticazione mediante il token JWT? Se hai già provato ad implementarla, fammi sapere in che punto ti sei bloccato così sarà più facile per me rispondere.

Grosso modo funziona così: dopo che l'utente si è autenticato con username e password, il server gli rilascia un "token" che contiene alcuni dei suoi dati (detti "claims") e che gli permetterà di identificarsi in tutte le successive richieste. Il client dovrà quindi presentare il token al server come parte di ogni successiva richiesta.

E' po' come quando il comune ti rilascia la carta d'identità: in essa sono scritti il tuo nome, cognome, professione e i tuoi connotati. Quando qualcuno ha bisogno di sapere chi sei, ti basta presentargli la carta d'identità. Questo qualcuno si fida delle informazioni scritte sulla carta d'identità perché è stata emessa da un "provider" attendibile (es. il Comune).

ciao,
Moreno

Enjoy learning and just keep making
114 messaggi dal 09 luglio 2009
Ciao Moreno.
Quello che vorrei capire è il funzionamento pratico (quindi come implementarlo) del tuo suggerimento seguente:

[...]Nel primo caso, potresti generare delle API Key per ciascuna applicazione e comunicargliele in maniera riservata.
Ogni volta che un'applicazione vorrà consumare la tua api, ti invierà la propria API Key nell'intestazione della richiesta.[...]

Ti dico ciò che ho capito io:
Nella mia apiApplication inserisco (nel webconfig):
<appSettings>
<add key="MiaApiKey" value="APY_KEY"/>
</appSettings>

Ad ogni richiesta della mia app (oltre al token di autenticazione rilasciatomi dall'endpoint ./Token), invio la ApiKey e la confronto nella action della api prima di restituire il risultato.

E' questo ciò che intendi?

In questo modo che valore aggiunto dò alla App in termini di protezione?
Non è già abbastanza sicura la autenticazione basata su OAut con Token bearer?

Spero tu possa rispondermi e grazie!
11.885 messaggi dal 09 febbraio 2002
Contributi
Semplificando molto, usi:
  • Un'API Key quando stai consumando una API soggetta a limitazioni, come ad esempio un certo numero di richieste massime giornaliere. La API Key non viene usata dal server per autenticare gli utenti, ma per capire qual è il sistema client che sta inviando le richieste e bloccarlo nel momento in cui dovesse superare le soglie di utilizzo. Ne consegue che l'uso dell'applicazione da parte degli utenti può anche essere anonimo;
  • Un Token per autenticare un'utente dell'applicazione per poi autorizzarlo all'accesso di alcune o tutte le operazioni della API.


Quindi in una API puoi usare anche una combinazione di API Key e di Token. A grandi linee, il "portatore" di una API Key è un altro sistema informatico (es. un'applicazione che usa la tua API) mentre il portatore del token è uno specifico utente.

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.