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 parametrostate
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 parametrostate
.) - 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"?