Utilizzo Thinktecture AuthorizationServer (AS) e funziona perfettamente.Flusso implicito Oauth2 con token di accesso per l'aggiornamento di una sola pagina
Mi piacerebbe scrivere un'applicazione nativa per javascript singola che può chiamare direttamente WebAPI, tuttavia il flusso implicito non fornisce un token di aggiornamento.
Se viene effettuata una chiamata AJAX, se il token è scaduto, l'API invierà un reindirizzamento alla pagina di accesso, poiché i dati utilizzano popup dinamici, ciò interromperà l'utente.
Come fa Facebook o StackOverflow a fare questo e consente ancora il javascript in esecuzione sulla pagina per chiamare le API?
Soluzione proposta
Ha lo scenario di seguito suono sensibile (supponendo che questo può essere fatto con iframe):
mio SPA mi indirizza alla AS e io ottenere un token dal flusso implicito. All'interno di AS, fare clic su Consenti ambito Read data
e fare clic su Remember decision
, quindi su Allow
.
Dal momento che ho fatto clic sul pulsante Remember decision
, ogni volta che prendo AS per un token, un nuovo token viene automaticamente restituito senza che sia necessario accedere (posso vedere il cookie FedAuth che sta ricordando la mia decisione e credo che questo lo renda possibile solo lavoro).
Con la mia SPA (app non affidabile), non ho un token di aggiornamento solo un token di accesso. Così, invece ho:
- facilitare l'utilizzo si è connesso e cliccato ricordare decisione (altrimenti iframe non funzionerà)
- chiamata WebAPI, se 401 risposta cercare di ottenere un nuovo token dalle istruzioni riportate di seguito ...
- Avere un iframe nascosto nella pagina, che imposterò l'URL per ottenere un nuovo token di accesso dal server di autorizzazione.
- Ottieni il nuovo token dal frammento di hash dell'iframe, quindi memorizzalo nella SPA e utilizzalo per tutte le future richieste WebAPI.
Immagino che sarei ancora nei guai se il cookie FedAuth viene rubato.
Qualsiasi modo standard o consigliato per lo scenario sopra descritto?
Questa è una domanda interessante ma con poca o nessuna rilevanza Angularjs. Ti suggerisco di rimuovere quel tag. –
quante volte dopo che il token di accesso è scaduto? –