Cookie + token CSRF vs token OAuth per app native mobile

2

Abbiamo un'applicazione web a pagina singola esistente alimentata da endpoint ASP.NET WebApi. Questi endpoint sfruttano SimpleMembership e Autenticazione moduli per gestire l'autorizzazione e l'autenticazione:

    [System.Web.Http.HttpPost]
    [Route("api/login")]
    [System.Web.Http.AllowAnonymous]
    public HttpResponseMessage LogIn(LoginModel model) {
        if (!WebSecurity.UserExists(model.Username))
            return Request.CreateResponse(HttpStatusCode.OK, new ApiResponseDto() { Success = false, Error = "Email or Password is incorrect." });
        if (_userService.LoginWork(model.Username) && WebSecurity.Login(model.Username, model.Password, persistCookie: true)) {
            return Request.CreateResponse(HttpStatusCode.OK, new ApiResponseDto() { Data = true });
        }
        LogOut();
        return Request.CreateResponse(HttpStatusCode.OK, new ApiResponseDto() { Success = false, Error = "Login Failed" });
    }

Ora stiamo sviluppando un'app nativa per iOS e vorremmo riutilizzare questi endpoint API nel nome della semplicità. Per fare ciò, utilizziamo token CSRF così come i cookie per gestire l'autenticazione da entrambe le app native e web.

Mi piace l'idea di mantenere le cose semplici e di non riscrivere ~ 100 endpoint API solo per supportare i dispositivi mobili, ma non se devo scendere a compromessi sulla sicurezza. Questa soluzione è "sicura" come l'implementazione standard di una pura implementazione basata su token OAuth2? In caso negativo, perché?

    
posta SB2055 15.10.2016 - 18:01
fonte

1 risposta

3

Certo, perché non dovrebbe essere? Si perde solo (un sacco) la flessibilità che è inclusa nei molti casi d'uso di OAuth, che presumo non sia necessario. In particolare, se ti interessa solo della tua app, e non della delega dell'accesso ad altri e / o del permettere agli utenti di accedere con altri provider di identità, allora stai bene con questo set-up. Detto questo, se hai intenzione di eseguire l'aggiornamento in futuro, esegui l'upgrade a OpenID Connect, anziché "OAuth puro".

Un paio di osservazioni:

  • Probabilmente dovrai memorizzare il token di autenticazione (che normalmente includi in un cookie) in qualche archivio locale del dispositivo, in quanto i cookie non esistono nelle app native . Quindi potresti aver bisogno di una sorta di "traduttore" nella tua app che cattura il comando "set-cookie" e memorizza il suo valore nella memoria del dispositivo locale. Allo stesso modo per il contrario.
  • Gli attacchi CSRF non esistono nelle app native reali. Tuttavia, se si utilizzano gli stessi endpoint per browser e app, è probabile che sia necessario continuare a utilizzarli.
  • Utilizza HTTPS (e possibilmente HSTS e HPKP) per proteggere i tuoi token durante il trasporto.
risposta data 18.10.2016 - 09:53
fonte

Leggi altre domande sui tag