2016-02-02 29 views
9

Stiamo sviluppando un'app iOS, in cui l'utente deve autenticarsi tramite email + password (o numero di cellulare). Il nostro back-end è costituito da un paio di microservizi che utilizzano Akka-Http. Deve essere veloce, scalabile, concorrente e l'autenticazione + autorizzazione dovrebbe funzionare tra i nostri molteplici servizi. Sto cercando di capire quale metodo di autenticazione utilizzare. Akka-HTTP offre attualmente l'autenticazione di base e un'implementazione parziale di OAuth2.Autenticazione con Akka-Http

Quindi all'inizio pensavamo all'autenticazione di base (troppo semplice e non abbastanza funzionale), Oauth1 (troppo complessa), quindi ci siamo spostati verso OAuth-2.0 perché è una specie di standard.

Quindi abbiamo preso in considerazione AWS Cognito perché combina Oauth-2.0 e OpenID Connect che fornisce il meccanismo di autenticazione che manca a OAuth2. http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html

Poi ci siamo accorti che OAuth2 è solo per l'autenticazione utilizzando una terza parte - quando in realtà non abbiamo bisogno di un terzo provider di autenticazione parti - forse abbiamo bisogno di farlo noi stessi, e l'utilizzo di Cognito è un peso inutile che avrebbe creare chiamate API in più fuori dai nostri microservices ...

Così ho letto un po 'di creare il nostro fornitore di autenticazione personalizzati, utilizzando le specifiche WSSE: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html E ho trovato anche questo esempio, utilizzando spray, ma sono sicuro che sia non è diverso da Akka-Http: http://danielasfregola.com/2015/06/29/how-to-create-a-spray-custom-authenticator/ Sembra troppo semplificato e non ha token exp iration ...

Quindi la mia domanda è, mi manca qualcosa? Quale metodo dovrei scegliere e dove posso trovare degli esempi?

Mi sento come se stessi andando in circolo, dovremo scrivere il nostro provider di autenticazione personalizzato da zero, che tipo non ha senso. Dopotutto quasi tutti hanno bisogno di autenticazione e dovrebbe essere uno standard.

+2

Francamente penso che lo stai complicando eccessivamente a meno che non ci siano requisiti specifici che non hai menzionato. Di solito metto API dietro HTTPS, permetto al client mobile di autenticarsi con username/email e password e restituisco token UUID-like. Conservo i token in una sorta di cache distribuita (memcached, ehcache, redis o simili). – expert

+0

Dove sono in esecuzione i tuoi microservizi? – behrooziAWS

+0

Non penso che sia necessario OpenID Connect nello scenario, quindi un semplice servizio OAuth2 che emette accessTokens (vedere jwt.io) che include userId, role e expirationTimestamp dovrebbe essere tutto ciò di cui i servizi hanno bisogno per autenticare/autorizzare autonomamente le richieste . L'unica cosa che è un po 'complicata è la gestione dei token di aggiornamento. – felixbr

risposta

0

Recentemente ho utilizzato la libreria akka-http-session di SoftwareMill e l'ho trovata semplice e facile da integrare. Ha supporto per sessioni basate su case case, JWT, token di aggiornamento con storage collegabile, utilizzando intestazioni e token CSRF e alcune semplici direttive per l'uso nei percorsi.