682 messaggi dal 08 aprile 2009
Sto creando la mia prima api con .NET core 2.1 e devo renderla autorizzata.
Mi chiedevo qual'è la strada più giusta. Ho letto anche di plugin esterni.
Che mi consigliate?
Avete qualche link da suggerirmi.

Premetto che l'api verrà installata sui server della rete interna di clienti che hanno un gestionale e permetterà di mettere a disposizione delle informazioni a programmi che hanno la necessità. Quindi per ognuno andrà creato un token di autorizzazione.
11.050 messaggi dal 09 febbraio 2002
Contributi
Ciao Laura,
se non hai requisiti particolari (es. non ripudiabilità, protezione da attacchi replay, ...) potresti far autenticare i client con la Basic Authentication. Infatti, dato che gli utenti non sono persone ma applicazioni che si trovano al sicuro in una intranet aziendale, puoi fornire al tuo cliente uno username e una password che la sua applicazione dovrà reinviare ad ogni richiesta alla tua webapi.

ASP.NET Core Identity non supporta nativamente questo scheme di autenticazione, ma puoi aggiungere il supporto installando un pacchetto NuGet.
https://github.com/msmolka/ZNetCS.AspNetCore.Authentication.Basic

ciao,
Moreno

Enjoy learning and just keep making
682 messaggi dal 08 aprile 2009
In generale è intranet interna ma è probabile, secondo esigenze del cliente, che l'api sia pubblicata anche su una dmz e quindi accessibile anche dall'esterno.
Stavo guardando anche il tuo articolo:
http://www.aspitalia.com/script/1288/Autenticazione-JWT-Token-ASP.NET-Core-Web-API.aspx

e al momento alla richiesta del token mi restituisce errore 500 e non capisco il perchè.
Vorrei creare un servizio che andasse bene per entrambe le situazioni senza dover rimetterci mano nel momento in cui si verifica la necessità di avere una sicurezza maggiore.
682 messaggi dal 08 aprile 2009
Seguendo il tuo esempio adesso sono riuscita ad andare avanti e creare la documentazione swagger. L'unica cosa che non mi torna è la url in quanto a me rindirizza a swagger/index.html mentre nel tua semplicemente a swagger.
Poi mi chiedevo se era possibile documentare solo i controller di un determinato namespace.

Per quanto riguarda la sicurezza mi chiedevo se questo è un approccio corretto o meno.
11.050 messaggi dal 09 febbraio 2002
Contributi
Spiegami bene come deve essere usata la API perché non esiste una soluzione universalmente valida.


In generale è intranet interna ma è probabile, secondo esigenze del cliente, che l'api sia pubblicata anche su una dmz e quindi accessibile anche dall'esterno.

Ok, ma chi sono i suoi utenti? La API viene esposta su internet a che scopo? Quali applicazioni devono consumarla? E che tipo di applicazioni sono (server-side, mobile apps, SPA)? Ci sono credenziali per i singoli utenti (persone) o vuoi mettere una password unica se a consumarla è una sola applicazione?

Ok per la documentazione Swagger. Sarà indispensabile agli sviluppatori di terze parti (e anche a voi stessi) per capire come va invocata la API.

Enjoy learning and just keep making
682 messaggi dal 08 aprile 2009
Al momento sarà una mobile app ad accedere e serve per sincronizzare i dati dal e verso il gestionale. Il gestionale manda le anagrafiche di base come articoli, clienti, listini, scadenze, ecc... e l'app rimanda i documenti. La sincronizzazione può avvenire o nella intranet interna o se il cliente vuole far sincronizzare anche dall'esterno verrà configurata una dmz.
Questo però ci apre molte porte future. Come ad esempio utilizzare queste api per fare richieste di dati in tempo reale come ad esempio una giacenza o permettere di fare importazioni massive anche da applicazioni o web application esterne che non sempre sono le nostre.
Io pensavo di fare delle registrazioni su un db fornendo 2 chiavi di accesso tipo username e password e vorrei controllare e registrare anche le richieste per avere una statistica di utilizzo e semmai creare dei blocchi nel momento in cui vengono effettuate più richieste.
11.050 messaggi dal 09 febbraio 2002
Contributi

Al momento sarà una mobile app ad accedere

Se la mobile app verrà usata da diversi utenti, ciascuno dovrà avere il suo personale username e password. In questo caso puoi usare l'autenticazione basata su JWT Token. Per prima cosa crei un'action nella tua web api che permette di inviare username e password e che restituisca un JWT Token. La mobile app memorizzerà questo token sul device e lo reinvierà a ogni successiva richiesta. Il JWT Token ha una scadenza e quindi, fintanto che l'utente usa la mobile app, dovrai fare in modo di rinnovarlo automaticamente quando sta per scadere.
Non memorizzare username e password sulla mobile app ma lascia che l'utente li reinserisca ogni volta dopo un periodo di inattività. Dal momento che si tratta di dati aziendali è meglio forse costringere gli utenti a riloggarsi dopo un periodo di inattività che lasciare che chiunque possa vedere i dati se il device viene smarrito. (Oppure puoi lasciare la scelta all'utente ed emettere un JWT Token con scadenza più lunga se è lui a richiederlo esplicitamente).


permettere di fare importazioni massive anche da applicazioni o web application esterne che non sempre sono le nostre.

Questo è uno scenario di utilizzo differente. Per questo aggiungerei un altro scheme di autenticazione oltre a JWT Token, basato su Basic Authentication. Infatti, l'applicazione esterna non corre il rischio di essere "smarrita" ma si presuppone che sia al sicuro in un server. Quindi può anche andar bene fargli fornire sempre username e password che non hanno scadenza. Oppure, se inviare username e password con ogni richiesta (seppur protetta da HTTPS) non rispetta i vostri standard di sicurezza, puoi usare l'autenticazione basata su certificati client.

ciao,
Moreno

Enjoy learning and just keep making
11.050 messaggi dal 09 febbraio 2002
Contributi

e al momento alla richiesta del token mi restituisce errore 500 e non capisco il perchè.

Riesci a vedere il testo dettagliato dell'errore?
Se hai configurato il middleware della developer exception page dovresti vedere l'errore completo. Altrimenti prova a leggere in console.

Inoltre trovi un esempio chiamato "ui-and-api-auth" nel capitolo 17 del libro. Gli esempi sono scaricabili da qui:
http://books.aspitalia.com/ASP.NET-Core/

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.