Sto implementando il server di autorizzazione/risorsa OAuth2 basato su DotNetOpenAuth. Il mio server pubblicherà i token di accesso con una durata molto lunga. Questi token saranno utilizzati dai dispositivi iOS. Il flusso, a mio modo di vedere, è così, 1) a un utente viene chiesto di inserire il nome utente/password sul dispositivo iOS 2) viene richiesto un token di accesso con tipo di concessione di credenziali Password proprietario risorsa 3) il token è concesso e memorizzato sul dispositivo iOS per uso futuro.Come impongo la scadenza del token di accesso OAuth2 con DotNetOpenAuth
Ora di tanto in tanto gli utenti vengono disabilitati. Vorrei revocare il token allo stesso tempo. Come faccio a fare questo? I sospetto che ho bisogno di utilizzare il metodo ICryptoKeyStore.RemoveKey
per quello, ma non sono sicuro di come trovare la chiave da rimuovere.
Nota 1: in futuro il server verrà utilizzato da applicazioni Web di terzi.
Nota 2: il requisito di avere un tipo di concessione di credenziali Password proprietario risorse deriva dal fatto che è stato deciso che l'implementazione del reindirizzamento del browser sul dispositivo iOS non vale il tempo.
Update 1 Alcuni scavi nel codice sorgente suggeriscono che DotNetOpenAuth non supporta questa possibilità di forzare scadenza del token fuori dalla scatola. Inoltre nella vita standard dell'implementazione del token non viene nemmeno verificato. Per quanto posso vedere il calss è responsabile per questo è StandardAccessTokenAnalyzer
e ignora le proprietà Lifetime
e UtcCreationDate
. Inoltre, non sembra che la classe standard ResourceServer
abbia un accesso al database codificato, la validità del token verificata solo dal contenuto del token, quindi sembra che se ho bisogno di aggiungere la possibilità di scadere i token ho bisogno di collegare lo ResourseServer
al database stesso . Mi sto perdendo qualcosa?
Update 2 Credo di avere trovato qui la risposta: https://groups.google.com/forum/#!topic/dotnetopenid/aLabu1ujkt4 Non è quello che speravo e ho ancora un paio di unclarities. Ad esempio, Andrew ha scritto:
classe personalizzata quindi potrebbe richiedere un token di accesso, quindi utilizzare una richiesta HTTP privato al server di autorizzazione per verificare la continua validità del token.
Non è chiaro come questa verifica può accadere, visto che AccessToken
non include Autorizzazione Id. Ciò può rendere difficile la ricerca del record di autorizzazione di destinazione. In teoria, possiamo provare a cercare la combinazione di client, utente e tempo di emissione, ma per quanto posso vedere non c'è alcuna garanzia che questi saranno unici.
Andrew, grazie per aver dedicato tempo a rispondere. Sto ancora lavorando a questo problema e assorbirò la tua risposta molto presto e risponderò correttamente. Ora vorrei solo commentare * DotNetOpenAuth controlla e rifiuta i token di accesso scaduti. Non è solo in quella classe. È stato verificato il codice che deserializza i token di accesso. * Naturalmente hai ragione, ho già scoperto questo =) Non lo sapevo al momento della scrittura, mi dispiace. –
* Probabilmente l'utente ha già effettuato l'accesso al tuo server sul browser del dispositivo * Al momento non c'è nessuna applicazione web a cui accedere. Quindi non è così. Naturalmente potrei fare una pagina di login solo per il supporto del flusso, ma poiché non sono io a programmare i dispositivi iOS, la decisione condivisa è stata quella di utilizzare il flusso ROPC. Uno dei motivi per cui è che non vogliamo che l'applicazione scorri su Safari e poi torni all'app ogni volta che è necessario rinnovare un token. Ciò si rivelerà un'esperienza utente non ottimale. –
* A tal proposito, è probabile che il tipo di concessione della password del proprietario della risorsa non sia supportato per i client non autenticanti (TBD) *. Questo è un bit interessante di informazioni. Potresti per favore espandere? Penso che quello che stai dicendo sia illogico, perché un'applicazione nativa semplicemente * non può * garantire la sicurezza della password del client confidenziale, quindi deve essere un client pubblico. E poiché l'interazione del browser in un'applicazione nativa è complessa e difficile, l'unico tipo di concessione valida è ROPC. Rendere questo non disponibile come parte delle specifiche sembra essere controproducente. –