OAuth2 con credenziali client v / s altri meccanismi di autenticazione

8

Per un'API REST contro cui i client scriverebbero applicazioni non interattive basate su browser, se OAuth2 è il meccanismo di autenticazione da seguire, allora useremo il tipo di concessione delle credenziali del client per l'autenticazione. Sarebbe la scelta giusta e, in caso affermativo, come è meglio di altri meccanismi di autenticazione come Http basic / digest o autenticazione reciproca basata su certificati?

    
posta Shyamal Pandya 29.01.2014 - 12:32
fonte

1 risposta

10

OAuth è un protocollo autorizzazione , non un autenticazione protocollo. Il suo ruolo non è quello di dirti chi è dall'altra parte del filo, ma cosa può fare quella persona. Accade che OAuth possa essere abusato in un sistema di autenticazione: questo è chiamato OpenID Connect . L'idea è che per fornirti le informazioni di autorizzazione (il client è autorizzato a fare questo o quello?), Il server OAuth deve prima assicurarsi dell'identità del client (di chi stiamo parlando? ?); OpenID Connect riguarda il riutilizzo del protocollo di autenticazione interno ("se il server OAuth ha concesso l'accesso, quindi, in particolare, il server OAuth ha autenticato il client e abbiamo fiducia nel protocollo utilizzato dal server OAuth, qualunque esso sia").

Se non si ha fiducia in ciò che fa il server OAuth per autenticare i client, è possibile utilizzare altri metodi di autenticazione come password o certificati client. In tal caso, il server esegue l'autenticazione e allora parla con il server OAuth: "Dispongo di Bob online, cosa è autorizzato a fare?".

La domanda si riduce quindi a: il livello di autenticazione nel server OAuth è appropriato per la situazione o no? Spetta a te decidere. Se decidi tu stesso di fare l'autenticazione, ci sono diversi metodi con varie caratteristiche. Quale è il migliore dipende dal contesto; solo poche osservazioni possono essere fatte in modo generico:

  • Qualunque cosa tu faccia, usa SSL. Questo è necessario per garantire che l'autenticazione e l'autorizzazione che si esegue realmente si applichino, in modo non modificabile, a qualsiasi richiesta che il cliente successivamente ti invia.
  • Poiché utilizzi SSL, non eseguire il digest HTTP; usa invece HTTP basic. SSL offre una protezione molto migliore di quella offerta dal digest HTTP (se confrontato con HTTP basic); e digest HTTP non è compatibile con i meccanismi di archiviazione della password lato server (bcrypt ...).
  • I certificati client sono più complessi per gli utenti e hanno senso soprattutto quando l' autenticazione e la gestione delle identità vengono eseguite da entità separate. Se vuoi solo autenticare i tuoi utenti per il tuo server, allora i certificati sono eccessivi e probabilmente non sono una buona idea.
risposta data 29.01.2014 - 20:45
fonte

Leggi altre domande sui tag