Token o ASP.NET Sicurezza basata sull'identità nell'API Web ASP.NET 2

6

Sfondo

Ho un progetto Web API 2, senza alcuna estensione di ASP.NET MVC o progetti ASP.NET. L'API verrà utilizzata solo per comunicare tra il server e Windows 8, Windows Phone 8.1 e le applicazioni iOS. Nessun sito web consumerà l'API. L'API consente a un utente di gestire i prodotti in un magazzino. Un utente può aggiungere, rimuovere e controllare i prodotti nel database.

public class User
{
    public int Id { get; set; }
    [Required]
    public string UserName { get; set; }
    [Required]
    public string DisplayName{ get; set; }
    [Required]
    public bool IsEnabled {get; set;}
}

Niente di speciale - solo un modello per Entitiy Framework. Ovviamente esiste anche un modello per il prodotto. Si noti, non ho bisogno di alcuna password dai miei utenti, dal momento che questo non è importante per la sicurezza dei dati. Gli utenti dell'API non si conosceranno mai gli altri UserName - solo gli altri DisplayName.

I problemi

Il problema riguarda la sicurezza nell'API Web. Non voglio esporre la mia API al mondo intero - solo le applicazioni. Quindi ho fatto molte ricerche e dalla ricerca ho il seguente scenario:

Scenario n. 1

Il modo migliore per garantire un elevato livello di sicurezza nella mia API è:

  • Utilizza SSL
  • Utilizza l'autenticazione basata su token dei client
  • usa un token con una brevissima scadenza
  • per non utilizzare l'identità ASP.NET
  • per utilizzare i gestori dei messaggi invece dei filtri azione
  • Aggiungi un campo UserToken al modello User e genera un token per ciascun utente

Scenario n. 2

Il modo migliore per garantire un elevato livello di sicurezza nella mia API è:

  • usa SSL
  • usa l'identità di ASP.NET per fare l'accesso a nome utente e password
  • utilizza un approccio basato su token basato sull'autenticazione dell'identità ASP.NET

Domande

  • Qual è l'approccio migliore? Scenario n. 1 o n. 2?
  • In generale, qual è il modo migliore per proteggere un'API?
  • Il modo migliore è uno dei miei scenari?

Non esitate ad aggiungere / rimuovere elementi dai due scenari, ma anche ad aggiungere nuovi e più sicuri scenari.

    
posta MikaelKP 23.06.2015 - 11:15
fonte

1 risposta

1

Voterò a favore del n. 1, perché trovo leggermente più semplice capire cosa sta succedendo e controllare il comportamento. Abbiamo utilizzato questo approccio per creare app di grandi dimensioni aziendali senza troppi problemi. È anche facilmente personalizzabile, se necessario (ad esempio, sarebbe sufficiente un token per utente? Sarebbe necessario più token se l'utente effettuasse contemporaneamente il login da più dispositivi?). Tuttavia, dipende, come sempre. Entrambi sono approcci totalmente fattibili, quindi praticamente qualsiasi cosa tu stia più a tuo agio, se ha tutte le funzionalità di cui hai bisogno quando un altro non lo fa.

Nel nostro caso il numero 1 è stato più facile da implementare e ha coperto tutte le nostre esigenze, il tuo caso potrebbe essere diverso ... o meno.

    
risposta data 24.08.2015 - 21:09
fonte

Leggi altre domande sui tag