Ciao Marco,
grazie per aver acquistato il libro.
utilizzando il progetto di esempio ui-and-webapi-auth.
Ce l'ho presente, l'ho fatto io :) hai fatto bene a chiedere qui.
Vorrei capire meglio come richiamare il middleware
Non puoi richiamare un middleware perché è un componente della pipeline di ASP.NET Core, cioè lui osserva passare ogni singola richiesta HTTP e se lo reputa opportuno, può modificarla o modificare la risposta per il client.
Questo particolare middleware (che ho chiamato JwtTokenMiddleware) fa una cosa molto semplice: se la richiesta risulta autenticata, genera un nuovo token e lo infila in un'intestazione "X-Token" della risposta. Il suo comportamento è automatico, non è come l'action di un controller che va richiamata con una richiesta.
Quindi, quello che puoi fare per ottenere un token è autenticarti fornendo username e password. Per questo ho predisposto l'action Post nel TokenController che si trova in Controllers/Api. Quindi, dalla tua applicazione WPF fai una richiesta POST a /api/Token fornendo come corpo questo contenuto json:
{ "Username": "TuoUser", "Password": "TuaPassword" }
Questo utente ovviamente deve essere registrato.
Nella risposta che ti torna indietro troverai una intestazione "X-Token". Leggine il valore, perché lì troverai il token. Dalla seconda richiesta in poi, potrai usare questo token per l'autenticazione. Dovrai includerlo come intestazione Authorization della richiesta, in questo modo:
Authorization: Bearer TuoTokenQui
Dato che risulterai autenticato, il JwtTokenMiddleware ti emetterà un nuovo token che potrai usare nella tua successiva richiesta, e così il ciclo ricomincia.
Ogni token che ti viene emesso ha una scadenza molto breve, è per questo che te ne viene generato sempre uno nuovo. Se smetti di usare l'applicazione per un certo periodo di tempo (configurabile), allora sarai costretto a far reinserire all'utente username e password.
Avete un esempio anche semplice per capire come effettuare questa richiesta?
E' l'esempio ui-and-webapi-auth che te lo mostra, solo che è javascript e non WPF. Guarda la view /Views/Shared/_ApiDemo.cshtml. Dentro ci trovi il metodo getToken() che invia username e password a /api/Token per ottenere il token. Il token viene raccolto dalla risposta e salvato in una variabile javascript grazie al metodo ajaxSuccess, che va in esecuzione ogni volta che una richiesta ajax si completa.
A questo punto, dato che sei entrato in possesso di un token, puoi guardare la funzione javascript getUsers() che include il token nell'intestazione Authorization e invia la richiesta a /api/Users.
Fammi sapere se questo è sufficiente a chiarire o se ti occorrono altre informazioni.
Qui trovi un altro script sull'argomento e una discussione in fondo.
http://www.aspitalia.com/script/1288/Autenticazione-JWT-Token-ASP.NET-Core-Web-API.aspxciao,
Moreno