Creare una sessione Web da un sito Web di terzi utilizzando un token oauth2 esistente

4

Stiamo provando a consentire a un'applicazione Web di terze parti attendibile di autenticare automaticamente gli utenti nella nostra applicazione. Abbiamo pensato di utilizzare oauth2 per questo.

Nel nostro scenario forniremmo un server oauth2 e l'iniziale stretta di mano sarebbe simile a questa (che imho è il normale meccanismo a 3 gambe oauth2). Diciamo che acme è il nome del nostro servizio.

  1. L'app di terze parti ha un pulsante connect to acme
  2. L'utente fa clic su quel pulsante e viene reindirizzato al servizio acme
  3. L'utente accede tramite accesso basato su modulo sul sito acme
  4. Il servizio Acme presenta all'utente la finestra di dialogo 3rd party wants to access your account
  5. L'utente fa clic su accept
  6. Il servizio Acme genera un token oauth2 e reindirizza a terze parti
  7. La terza parte memorizza il token generato per future interazioni con il servizio acme

Ora, se la sessione sul sito Web di acme è scaduta, l'app di terze parti potrebbe automaticamente rianalizzare l'utente nell'applicazione Web di acme inviando una richiesta Ajax a un endpoint di autenticazione sul server di ACME.

Invia il token memorizzato in precedenza tramite https come intestazione http all'endpoint acme, dove il server oauth2 convaliderà il token e autentificherà l'utente associato nell'applicazione web.

Ci chiediamo se questo implica qualche problema di sicurezza o se questo è un modello oauth2 sicuro per la riautenticazione automatica dei token oauth2 esistenti con un sito web di fornitori oauth2.

    
posta pulse00 09.10.2015 - 13:01
fonte

1 risposta

2

Hai un po 'confuso le cose. In OAuth2 hai 3 cose:

  • OAuth2 Service Provider (acme nel tuo esempio)
  • OAuth2 Client (terza parte nel tuo esempio)
  • Utente OAuth2 (il browser dell'utente fisico nell'esempio)

Ora, ciò che accade è che è sempre il client ad autenticarsi con il fornitore di servizi e quindi il client autentica l'utente nella sua applicazione. Il client autentica l'utente nella sua applicazione eseguendo esso stesso (ad esempio, la variabile di sessione) o inviando costantemente il token di accesso al fornitore di servizi.

Now if the session on the acme website is expired, the 3rd party app could automatically re-authenticate the user in the acme web application by sending an ajax request to an authentication endpoint on the acme server.

La formulazione di quella parte è strana. Sembra che sia il cliente a controllare il fornitore di servizi che non ha senso. Il cliente non ha alcun controllo sul fornitore di servizi. Se la sessione su un fornitore di servizi è scaduta e il client chiede al fornitore di servizi se un determinato utente è ancora connesso, il fornitore di servizi gli dirà semplicemente che non è più connesso.

Ora, ciò che probabilmente intendevi è:

La sessione utente con il client (di terze parti) è scaduta, come posso ricrearlo automaticamente se l'utente è ancora autenticato con il fornitore di servizi?

Bene, ci sono un paio di modi, ma prima parliamo del token di accesso. Ciò che l'utente riceve dal fornitore di servizi e quindi passa al client è un token di accesso. I token di accesso hanno spesso un tempo di validità limitato per diversi motivi. Controlla qui:

link

Il modo per ottenere un nuovo token di accesso dipende dal fornitore di servizi. A volte il client riceve un token di aggiornamento che può essere utilizzato per ricevere un nuovo token di accesso. Vedi google api per esempio:

link

Con altri provider, la catena di reindirizzamento potrebbe essere automatica se l'utente è ancora connesso con il fornitore di servizi. Quindi, mentre fa di nuovo tutto il protocollo OAuth2, l'utente vede solo una pagina di ricarica.

Nota aggiuntiva

Ho visto che hai menzionato la parola "ajax" nella tua domanda. Non esiste alcun Ajax in OAuth2 poiché la sicurezza dipende dal reindirizzamento completo che funziona correttamente. Inoltre, è il client che invia il token di accesso al fornitore di servizi. Il client è un server web, non fa una richiesta jax come facciamo quando usiamo un browser. E infine, l'utente non può inviare il token di accesso per autenticarsi per così tanti motivi ...

    
risposta data 09.10.2015 - 15:23
fonte

Leggi altre domande sui tag