Sto creando un'app mobile e un back-end del servizio Web di ServiceStack. Il materiale di Autenticazione in ServiceStack sembra fantastico ma facile da perdersi nella sua flessibilità: una guida molto apprezzata. Utilizzerò le mie tabelle db per archiviare gli utenti ecc. All'interno del servizio web. Mi piacerebbe avere un processo di registrazione e la successiva autenticazione qualcosa di simile:Come autenticare le richieste utilizzando ServiceStack, il proprio repository utente e gli ID dispositivo?
- l'utente fornisce inizialmente solo un indirizzo e-mail, il mio servizio web quindi messaggi di posta elettronica un codice di registrazione per l'utente
- l'utente inserisce la chiave . L'app invia al servizio web per la registrazione: email, chiave & un identificativo univoco del dispositivo.
- il servizio Web verifica la chiave e memorizza l'e-mail ID dispositivo &. Risponde con un token di autenticazione che l'app utilizzerà per un'autenticazione successiva.
Quindi le richieste di servizi Web successive fornirebbero l'id del dispositivo e il token di autenticazione (o un hash creato con esso). L'app non è molto loquace quindi sono tentato di inviare i dettagli di autenticazione su ogni richiesta web.
Domanda 1: devo collegarmi all'API di registrazione di ServiceStack o semplicemente aggiungere un paio di chiamate di servizi Web personalizzate? per esempio. senza utilizzare la registrazione di ServiceStack vorrei:
- inviare a un servizio Web di registrazione con l'indirizzo di posta elettronica e l'id del dispositivo. Il mio servizio web invierà l'e-mail di registrazione con una chiave e aggiungerà un record alla tabella db dell'utente.
- quando l'utente inserisce la chiave, invierà di nuovo al servizio web di registrazione, questa volta anche con la chiave. Il mio servizio web convalida la chiave e aggiorna la tabella utente contrassegnando l'utente come registrato, creando e registrando il token di autenticazione restituendolo al chiamante
- richieste successive verrebbero inviate utilizzando http basic auth con l'id del dispositivo come nome utente e il token auth come password. Il servizio non è molto chiacchierone, quindi i crediti verranno inviati ad ogni richiesta.
- Implementerò un CredentialsAuthProvider che otterrà i crediti con httpRequest.GetBasicAuthUserAndPassword() e li convaliderà con i dati del database.
Ma sembra che dovrei usare la registrazione integrata in ServiceStack.
Domanda 2: Cosa c'è di sbagliato nel passare i dettagli di autenticazione con ogni richiesta? Ciò renderebbe più semplice la composizione delle mie richieste di app, ma non sembra "fatto" sulla base degli esempi di ServiceStack. Presumibilmente perché è inefficiente se hai molte richieste di cui hai bisogno per ri-autenticare ogni chiamata - per altri motivi? La mia app eseguirà solo una singola richiesta web al massimo ogni pochi minuti, quindi sembra più semplice evitare di avere sessioni e solo ri-autorizzare ogni richiesta.
Domanda 3: Sono sulla giusta sottoclasse di CredentialsAuthProvider?
Domanda 4: C'è qualche punto che utilizza il token di autenticazione per generare un hash invece di inviare il token di autenticazione ogni volta? Tutte le comunicazioni saranno sopra https.