Come fa OAuth 2 la protezione contro le cose come gli attacchi di riproduzione utilizzando il token di sicurezza?

StackOverflow https://stackoverflow.com/questions/4727226

  •  12-10-2019
  •  | 
  •  

Domanda

A quanto mi risulta, la seguente catena di eventi si verifica in OAuth 2 in modo che Site-A per l'accesso per l'utente informazioni da Site-B.

  1. registri Site-A su Site-B, e ottiene un segreto e un ID.
  2. Quando utente dice Site-A di accesso Site-B, utente viene inviato al Site-B dove dicono Site-B che avrebbero effettivamente come per concedere le autorizzazioni Site-A alle informazioni specifiche.
  3. Site-B redirect utente di nuovo a Site-A, insieme a un codice di autorizzazione.
  4. Site-A passa poi che il codice di autorizzazione con la schiena segreto per Site-B in cambio di un token di sicurezza.
  5. Site-A poi fa richieste al Site-B per conto di utente per riunire, il token di protezione con le richieste.

Come funziona tutto questo lavoro in termini di sicurezza e crittografia, ad alto livello? Come funziona OAuth 2 la protezione contro le cose come gli attacchi di riproduzione utilizzando il token di sicurezza?

È stato utile?

Soluzione 2

In base a quello che ho letto, questo è come funziona il tutto:

Il flusso generale delineato nella la domanda è corretta. Al punto 2, l'utente X viene autenticato, ed è anche autorizzare l'accesso del sito le informazioni dell'utente X sul sito B. Al punto 4, il sito ha superato le spalle segreto al sito B, che autentica per sé, così come il codice di autorizzazione, che specifichi è chiedere (token di accesso dell'utente di X).

Nel complesso, OAuth 2 è in realtà un modello di sicurezza molto semplice, e la crittografia non viene mai direttamente in gioco. Invece, sia il segreto e il token di sicurezza sono essenzialmente le password, e il tutto è garantita solo dalla sicurezza del https connessione.

OAuth 2 non ha alcuna protezione contro gli attacchi di replay del token di protezione o il Segreto. Invece, si basa interamente sul sito B di essere responsabile con questi elementi e non permettendo loro di uscire, e su di essi vengono inviati tramite HTTPS durante il trasporto (https proteggerà parametri URL).

Lo scopo della fase di codice di autorizzazione è semplicemente vantaggio, e il codice di autorizzazione non è particolarmente sensibile da solo. Esso fornisce un identificatore comune per l'accesso per l'utente X gettone per sito quando si chiede il sito B per token di accesso dell'utente di X. id Utente Just X sul sito B non avrebbe funzionato, perché ci potrebbero essere molti accesso eccezionale pedine in attesa di essere consegnato a diversi siti contemporaneamente.

Altri suggerimenti

Come OAuth 2.0 funziona nella vita reale:

stavo guidando dalla panetteria di Olaf il mio modo di lavorare quando ho visto il più delizioso ciambella nella finestra - voglio dire, la cosa stava gocciolando cioccolatoso bontà. Così sono andato dentro e chiesto "Devo avere quella ciambella!". Ha detto "sicuro che sarà $ 30."

Si lo so, $ 30 per una ciambella! Deve essere delizioso! Ho raggiunto per il mio portafoglio quando improvvisamente ho sentito il cuoco gridare "NO! No ciambella per te". Ho chiesto: perché? Ha detto che accetta solo bonifici bancari.

Sul serio? Sì, era serio. Ho quasi andato via proprio lì, ma poi la ciambella mi gridò: "Eat me, io sono deliziosi ...". Chi sono io per gli ordini disobbedire da una ciambella? Ho detto ok.

Mi porse una nota con il suo nome su di esso (il cuoco, non la ciambella): "Dite loro Olaf ti ha mandato". Il suo nome era già nota, quindi non so quale sia il punto di dire che è stato, ma ok.

ho guidato un'ora e mezza alla mia banca. Ho consegnato la nota al cassiere; Le ho detto Olaf mi ha mandato. Lei mi ha dato uno di quegli sguardi, il tipo che dice, "posso leggere".

Ha preso la mia nota, ha chiesto il mio id, mi ha chiesto quanti soldi era ok per dargli. Le ho detto $ 30 dollari. Lei ha fatto un po 'di scarabocchi e mi hanno dato un'altra nota. Questo ha avuto un po 'di numeri su di esso, ho indovinato è così che tengono traccia delle note.

A questo punto sto morendo di fame. Mi sono precipitato fuori di lì, un'ora e mezza dopo ero di nuovo, in piedi davanti Olaf con la mia nota estesa. Lo prese, guardò più e disse: "Tornerò".

Ho pensato che stava diventando la mia ciambella, ma dopo 30 minuti ho iniziato a insospettirsi. Così ho chiesto al ragazzo dietro il bancone "Dov'è Olaf?". Ha detto: "È andato per ottenere i soldi". "Cosa intendi?". "Ha prendere nota di banca".

Eh ... così Olaf ha preso la nota che la banca mi ha dato e tornò alla banca per ottenere i soldi dal mio conto. Dal momento che aveva la nota della banca mi ha dato, la banca sapeva che era il ragazzo di cui parlavo, e perché ho parlato con la banca sapevano a dargli solo $ 30.

Si deve avermi preso molto tempo per capirlo perché per il momento ho guardato, Olaf era in piedi di fronte a me , infine, consegnando me la mia ciambella. Prima ho lasciato ho dovuto chiedere, "Olaf, hai sempre le ciambelle vendere in questo modo?". "No, ho usato per farlo diverso".

Huh. Mentre stavo camminando di nuovo alla mia macchina il mio telefono squillò. Non mi preoccupai di rispondere, è stato probabilmente il mio lavoro chiamando al fuoco me, il mio capo è un tale ***. Inoltre, mi è stato catturato fino a pensare al processo che ho appena passato attraverso.

Voglio dire pensarci: sono stato in grado di lasciare che Olaf prendere $ 30 di mio conto in banca senza dover dargli informazioni sul mio account. E non ho dovuto preoccuparmi che avrebbe prendere troppi soldi perché ho già detto la banca è stato consentito solo a prendere $ 30. E la banca sapeva di essere la persona giusta perché aveva il biglietto che mi hanno dato per dare a Olaf.

Ok, certo avrei preferito porgergli $ 30 da tasca. Ma ora che aveva quella nota ho potuto solo dire alla banca per fargli prendere 30 $ ogni settimana, quindi ho potuto solo presentarsi presso il panificio e non ho dovuto andare in banca più. Potrei anche ordinare la ciambella per telefono se volevo.

Certo che farei mai -. Quella ciambella era disgustoso

Mi chiedo se questo approccio ha applicazioni più ampie. Egli ha detto che questo era il suo secondo approccio, potrei chiamarlo Olaf 2.0. In ogni caso è meglio che a casa, devo cominciare a cercare un nuovo lavoro. Ma non prima che io ottenere uno di quei frullati di fragola da quel nuovo posto dall'altra parte della città, ho bisogno di qualcosa per lavare via il sapore di quella ciambella.

OAuth è un protocollo con cui un App 3 parti può accedere ai dati memorizzati in un altro sito web senza il vostro account e la password. Per una definizione più ufficiale, consultare il Wiki o specifica.

Ecco un caso d'uso demo:

  1. I accedere per LinkedIn e voglio collegare alcuni amici che sono nei miei contatti di Gmail. LinkedIn supporta questa. Sarà richiesta una risorsa sicura (il mio gmail lista dei contatti) da Gmail. Così ho clic su questo pulsante:
    Aggiungi connessione

  2. Una pagina web si apre, e si vede nella pagina di accesso di Gmail, quando inserisco il mio account e password:
    Aggiungi connessione

  3. Gmail poi mostra una pagina di consenso in cui faccio clic su "Accetto": Aggiungi connessione

  4. Ora LinkedIn può accedere ai miei contatti in Gmail: Aggiungi connessione

Di seguito è riportato un diagramma di flusso del nell'esempio precedente:

Aggiungi connessione

Passaggio 1:. LinkedIn richiede un gettone da autorizzazione del server di Gmail

Fase 2: Il server di autorizzazione Gmail autentica il proprietario della risorsa e mostra all'utente la pagina di consenso. (Le esigenze degli utenti per accedere a Gmail se non sono già loggato)

Passo 3:. L'utente concede la richiesta di LinkedIn per l'accesso ai dati di Gmail

Passo 4:. I server di autorizzazione risponde Gmail indietro con un token di accesso

Passo 5:. LinkedIn chiama l'API Gmail con questo token di accesso

Passo 6: Il server di Gmail risorsa restituisce i contatti se il token di accesso è valido. (Il token sarà verificato dal server risorsa Gmail)

È possibile ottenere di più da informazioni su OAuth qui .

Figura 1, sollevato da RFC6750 :

     +--------+                               +---------------+
     |        |--(A)- Authorization Request ->|   Resource    |
     |        |                               |     Owner     |
     |        |<-(B)-- Authorization Grant ---|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(C)-- Authorization Grant -->| Authorization |
     | Client |                               |     Server    |
     |        |<-(D)----- Access Token -------|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(E)----- Access Token ------>|    Resource   |
     |        |                               |     Server    |
     |        |<-(F)--- Protected Resource ---|               |
     +--------+                               +---------------+

Questo è il modo OAuth 2.0 funziona, ben spiegato in questo articolo

 entrare descrizione dell'immagine qui

Questo è un gioiello:

https://www.digitalocean.com/community/ tutorials / un-introduzione-to-OAuth-2

Molto breve riassunto:

OAuth definisce quattro funzioni:

  1. Resource Proprietario
  2. Client
  3. Server Resource
  4. di autorizzazione del server

(Resource Proprietario) hanno un telefono cellulare. Si dispone di più account di posta elettronica diversi, ma si desidera che tutti gli account e-mail in un'unica applicazione, quindi non c'è bisogno di tenere commutazione. Così la vostra GMail (Client) chiede per l'accesso (tramite autorizzazione del server di Yahoo) per la posta elettronica di Yahoo (Resource Server) in modo da poter leggere sia le email sul vostro applicazione Gmail.

Il motivo esiste OAuth è perché è non protetta per GMail per memorizzare il nome utente e la password di Yahoo.

 entrare descrizione dell'immagine qui

L'altra risposta è molto dettagliata e indirizzi la maggior parte delle questioni sollevate dal PO.

Per elaborare, e in particolare per affrontare la domanda del PO di "Come fa OAuth 2 la protezione contro le cose come gli attacchi di riproduzione utilizzando il token di sicurezza?", Ci sono due protezioni supplementari nelle raccomandazioni ufficiali per attuazione OAuth 2:

1) Gettoni di solito hanno un breve periodo di scadenza ( http://tools.ietf.org/ html / rfc6819 # sezione 5.1.5.3-):

Un breve tempo di scadenza per i token è un mezzo di protezione contro le seguenti minacce:

  • replica ...

2) Quando il token viene utilizzato da sito, la raccomandazione è che sarà presentato non come parametri URL, ma nel campo di richiesta di autorizzazione di intestazione (http://tools.ietf.org/html/rfc6750 ):

I clienti dovrebbero fare richieste autenticati con un portatore di token utilizzando il campo intestazione di richiesta "Autorizzazione" con il "portatore" HTTP regime di autorizzazione. ...

Il "/ x-www-form-urlencoded applicazione" metodo non deve essere usato Tranne che in contesti applicativi in ??cui i browser partecipanti non lo fanno avere accesso al campo di intestazione della richiesta "Autorizzazione". ...

Query URI Parametro ... è incluso per documentare l'uso corrente; il suo uso non è raccomandato, a causa delle sue carenze di sicurezza

Ecco forse la spiegazione più semplice di come OAuth2 funziona per tutti i 4 tipi di sovvenzione, vale a dire, 4 flussi diversi in cui l'applicazione può acquisire il token di accesso.

somiglianza

Tutti i flussi di tipo concessione hanno 2 parti:

  • Ottieni token di accesso
  • Usa token di accesso

La seconda parte 'accesso uso token' è la stessa per tutti i flussi

Differenza

La prima parte del flusso di 'ottenere l'accesso token' per ogni tipo di concessione varia.

Tuttavia, in generale, il 'accesso get token' parte possono essere riassunti come composto 5 passi:

  1. pre-registrare l'applicazione (client) con il fornitore OAuth, per esempio, Twitter, ecc per ottenere ID client / secret
  2. Creare un pulsante sociale login con il cliente id & ambiti di richieste / autorizzazioni sulla tua pagina in modo che quando viene premuto dall'utente reindirizzato al fornitore di OAuth per l'autenticazione
  3. OAuth utente richiesta fornitore di concedere l'autorizzazione per la vostra applicazione (client)
  4. OAuth codice problemi di provider
  5. App (client) acquisisce token di accesso

Ecco un diagramma side-by-side confrontando come ogni flusso tipo concessione è differente in base ai 5 passi.

Questo diagramma è da https://blog.oauth.io/introduction- OAuth2-flow-diagrammi /

entrare descrizione dell'immagine qui

Ogni hanno diversi livelli di difficoltà di attuazione, la sicurezza, e casi di usi. A seconda delle esigenze e della situazione, si dovrà usare uno di loro. Quale utilizzare?

Client credenziali : Se la vostra applicazione sta scontando solo un singolo utente

Resource password del proprietario Crendential : Questo dovrebbe essere utilizzato solo come ultima risorsa come l'utente deve consegnare le sue credenziali a l'applicazione, il che significa che l'applicazione può fare tutto ciò che l'utente può

codice di autorizzazione : Il modo migliore per ottenere l'autorizzazione dell'utente

implicito : Se App è mobili o singola pagina app

C'è più spiegazione della scelta qui: https : //blog.oauth.io/choose-oauth2-flow-grant-types-for-app/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top