È sicuro per gli utenti della mia API "Accedi con GitHub" usando passaport-github?

6

Comprendo che OAuth2 è stato progettato per delegare le autorizzazioni di autorizzazione a risorse specifiche, è solo non un protocollo di autenticazione . Tuttavia, lo stato passport-github README ,

This module lets you authenticate using GitHub in your Node.js applications. By plugging into Passport, GitHub authentication can be easily and unobtrusively integrated [...]

The GitHub authentication strategy authenticates users using a GitHub account and OAuth 2.0 tokens.

Usando passport-github nel mio HelloAPI, gli utenti finali verrebbero reindirizzati al server di autorizzazione di GitHub per avviare il flusso authorization_code a 3 zampe:

  • Prima l'utente si autentica con GitHub e concede l'accesso limitato a HelloAPI.
  • GitHub reindirizza lo user-agent (browser) su HelloAPI utilizzando un redirect_uri pre-registrato. L'URI di reindirizzamento include un codice di autorizzazione e facoltativamente un parametro state per il rilevamento delle falsificazioni delle richieste cross-site.
  • HelloAPI scambia rapidamente il codice per un token di accesso, utilizzando client_secret come mezzo per autenticare HelloAPI con GitHub. (Anche qui, dovrei includere un parametro state .)
  • Infine, HelloAPI utilizza il token per afferrare qualsiasi profilo GitHub associato a quel token.

Qui assumiamo che il token non sia stato creato da qualche altro cliente e successivamente riprodotto su HelloAPI come attacco impersonare un proprietario di risorse GitHub. Controllando il parametro state , I pensa che è un presupposto sicuro, ma link mette in guardia contro così facendo:

OAuth APIs do not provide any mechanism of audience restriction for the returned information. In other words, it is very possible to take a naive client, hand it the (valid) token from another client, and have the naive client treat this as a "log in" event. After all, the token is valid and the call to the API will return valid user information. The problem is of course that the user hasn't done anything to prove that they're present, and in this case they haven't even authorized the naive client.

Quindi questa è la mia esitazione nell'usare passport-github : utilizza i token OAuth2 per l'autenticazione, che è esattamente ciò contro cui gli esperti mettono in guardia. L'inclusione di un parametro state sembra proteggere questo flusso da server a% del flusso% di flusso, ma non ne sono sicuro.

Cosa mi manca? L'autenticazione con authorization_code è sicura, oppure esiste un modo per rendere sicura la funzione "Accedi con GitHub"?

    
posta Robert Claypool 23.10.2016 - 08:25
fonte

2 risposte

3

Non credo che l'implementazione di GitHub OAuth2 supporti il tuo caso d'uso per autenticare gli utenti, quindi dal punto di vista della sicurezza e della manutenibilità non penso che sia una grande idea. Dal primo paragrafo della documentazione :

OAuth2 is a protocol that lets external applications request authorization to private details in a user's GitHub account without getting their password.

La mia ipotesi nella discussione seguente è che il codice di autorizzazione e il token di accesso nell'implementazione di GitHub OAuth2 sono opachi al tuo cliente.

Nello scenario GitHub, abbiamo i seguenti ruoli OAuth:

  • Server di risorse - Server GitHub che fornisce informazioni sul profilo degli utenti
  • Client - Your HelloAPI
  • Server di autorizzazione - server di autenticazione GitHub
  • Proprietario risorse - L'utente finale dell'applicazione

L'implementazione passport-github autentica un utente utilizzando il token di accesso acquisito dal client come parte del flusso OAuth2 e quindi richiedendo le informazioni del profilo utente dal server di risorse GitHub a https://api.github.com/user .

Ad esempio:

  1. Joe Bloggs accede a GitHub tramite il reindirizzamento dal tuo cliente.
  2. Il token di accesso ricevuto dal client è opaco e non contiene informazioni sull'identità di Joe.
  3. Fai una richiesta al server di risorse GitHub dal tuo client per recuperare il profilo associato al token di accesso
  4. Il profilo di Joe viene restituito dal server delle risorse e si presuppone che Joe sia l'entità che ha presentato il token di accesso al client.

Il problema per me è che non esiste alcuna "prova" diretta come parte di questo processo per assicurare che l'identità autenticata in GitHub come parte del flusso di OAuth sia la stessa identità che viene restituita nelle informazioni del profilo utilizzate per fare la tua decisione di autenticazione nell'app. Per me questa è una mancanza da una integrità prospettiva, e quindi non considererei questo 'sicuro'.

Dato che l'implementazione passport-github non sembra essere uno scenario di autenticazione supportato da GitHub, crea anche dei rischi nel caso in cui GitHub cambi la loro implementazione in qualsiasi modo. È meglio utilizzare i protocolli supportati e utilizzare le API per gli scopi previsti per garantire la sicurezza e la gestibilità.

    
risposta data 30.10.2016 - 02:24
fonte
-1

Sì, è sicuro come qualsiasi altro accesso OAuth purché si utilizzino misure di sicurezza tramite SSL / TLS e, come già accennato, Github utilizzi anche HelloAPI che aggiunge un altro livello di sicurezza rispetto alla maggior parte delle altre API di OAuth Login! Andando da altri siti che potrebbero essere utilizzati, dopo aver fatto qualche lettura, è sicuro come si otterrà con questo tipo di accesso!

    
risposta data 10.05.2018 - 07:40
fonte

Leggi altre domande sui tag