CORS è mai stato necessario durante qualsiasi aspetto dell'autenticazione OAuth / OpenIDConnect?

5

Sto osservando l'autenticazione OpenIDConnect e sto provando a determinare se "CORS" o "CORS complessi" sono mai stati sfruttati durante l'autenticazione o l'autorizzazione.

Sfondo

Un semplice CORS (senza preflight) implica:

Metodo HTTP di:

  • GET
  • POST
  • HEAD

E un tipo di contenuto

  • multipart / form-data
  • application / x-www-form-urlencoded
  • text / plain

Il risultato sarà un server fornito Access-Control-Allow-Origin nella risposta

Qualsiasi altra intestazione o metodo X genererà una richiesta di preflight OPTIONS.

Domanda

  • Qualunque forma di OAuth fa leva su CORS in modo da utilizzare le richieste di pre-volo? (Le informazioni su OpenID Connect sono preferibili, ma qualsiasi implementazione di OAuth è interessante)

  • Qualche forma di OAuth fa leva su CORS in mancanza della richiesta di pre-volo?

  • Quale configurazione di CORS causerebbe una vulnerabilità di sicurezza per un provider di identità OAuth o per la gestione di una parte / risorsa?

posta random65537 28.12.2016 - 03:08
fonte

1 risposta

4

Non sono sicuro di OpenID, ma per OAuth non è coinvolto CORS per la parte di autenticazione effettiva, sebbene possa essere richiesto sul server di risorse in base al tipo di client che si sta connettendo.

In RFC 6749 , che definisce il framework OAuth 2, ci sono quattro diversi metodi definiti per l'applicazione per ottenere l'autorizzazione (qui, il client indica il server che desidera accedere ai dati, il proprietario della risorsa e l'utente finale indicano la persona di cui sono i dati, chi gli consente l'accesso e host indica l'entità che fornisce l'autorizzazione e gli endpoint API):

  • Codice di autorizzazione, che viene utilizzato quando il client esegue un server. Questo è il metodo più comune.
  • Implicito, che viene utilizzato quando l'applicazione è in esecuzione nel browser dell'utente.
  • Credenziali password del proprietario di risorse, che è il luogo in cui il nome utente e la password dell'utente finale vengono utilizzati per l'autenticazione diretta con il server. Non esiste un flusso di autenticazione per questo: l'utente deve semplicemente fornire all'applicazione la propria password.
  • Credenziali client, che è il punto in cui il client ha accesso automatico alle risorse. Non esiste un flusso di autenticazione per questo perché è automatico.

Quando si utilizza il metodo codice di autorizzazione , una panoramica di alto livello per il flusso di autenticazione è che il client reindirizza l'utente a una pagina di autorizzazione sull'host. Quando l'utente finale concede l'accesso, vengono reindirizzati al sito del cliente. Alla ricezione della richiesta, il server del client invierà una richiesta all'host per scambiare il token temporaneo per un token permanente, che poi utilizzeranno per effettuare una richiesta API dal proprio server.

Con questo metodo, tutte le richieste vengono effettuate dal server del client al server host, quindi non è necessario CORS. Le uniche richieste fatte nel browser dell'utente finale sono i reindirizzamenti, che non sono interessati da CORS.

Quando si utilizza il metodo implicito , quando l'utente finale viene reindirizzato dopo aver concesso l'accesso, il codice permanente viene recuperato dall'URL mediante uno script (javascript) in esecuzione nel browser dell'utente finale sul sito Web del cliente . Questo codice viene quindi utilizzato dagli script javascript in esecuzione nel browser per accedere all'API.

CORS deve essere utilizzato per gli endpoint dell'API effettivi con questo metodo (se le richieste necessiterebbero CORS comunque - non c'è nulla di speciale nel fatto che venga autenticato usando OAuth, quindi le richieste GET non hanno bisogno di CORS ma le richieste DELETE lo fanno), perché sono accessibili dall'interno del browser dell'utente. Tuttavia, il flusso di autenticazione non ha bisogno di CORS perché, ancora, viene gestito utilizzando i reindirizzamenti piuttosto che le richieste di origine incrociata.

    
risposta data 28.12.2016 - 14:50
fonte

Leggi altre domande sui tag