2016-02-02 5 views
9

Wir entwickeln eine iOS-App, bei der sich der Benutzer per E-Mail + Passwort (oder Handynummer) authentifizieren muss. Unser Backend besteht aus ein paar Microservices mit Akka-Http. Es muss schnell, skalierbar und gleichzeitig sein und die Authentifizierung + Autorisierung sollte für alle unsere Dienste funktionieren. Ich versuche herauszufinden, welche Authentifizierungsmethode verwendet werden soll. Akka-HTTP bietet derzeit Basic Auth und eine teilweise Implementierung von OAuth2.Authentifizierung mit Akka-Http

Also zuerst überlegten wir die Standardauthentifizierung (zu einfach und nicht genug Funktionalität), Oauth1 (zu komplex), also bewegten wir uns zu OAuth-2.0, weil es eine Art Standard ist.

Dann haben wir AWS Cognito in Betracht gezogen, weil es Oauth-2.0 und OpenID Connect kombiniert, was den Authentifizierungsmechanismus liefert, den OAuth2 fehlt. http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html

Dann merkten wir, dass OAuth2 nur für die Authentifizierung ist eine dritte Partei mit - wenn wir in der Tat Anbieter keinen Dritten Authentifizierung benötigen - vielleicht müssen wir es selbst tun, und ist Cognito mit zuviel des Guten das wäre schaffen zusätzliche api Anrufe außerhalb unserer Microservices ...

Also las ich ein wenig über unseren eigenen auth-Anbieter zu schaffen, mit WSSE Daten: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html Und ich fand auch dieses Beispiel Spray verwendet wird, aber ich bin sicher, dass es nicht so anders als Akka-Http: http://danielasfregola.com/2015/06/29/how-to-create-a-spray-custom-authenticator/ Es sieht zu vereinfacht und hat keine Token exp Iration ...

Also meine Frage ist, vermisse ich etwas? Welche Methode sollte ich wählen und wo finde ich Beispiele dafür?

Ich fühle mich wie in Kreisen, wir müssen unseren eigenen benutzerdefinierten Authentifizierungsanbieter von Grund auf neu schreiben, was irgendwie keinen Sinn macht. Schließlich benötigt fast jeder Authentifizierung und es sollte ein Standard sein.

+2

Ehrlich gesagt denke ich, dass Sie es zu kompliziert machen, es sei denn, es gibt spezielle Anforderungen, die Sie nicht erwähnt haben. Normalerweise setze ich API hinter HTTPS, erlaube dem mobilen Client, sich mit Benutzername/E-Mail und Passwort zu authentifizieren und ein UUID-ähnliches Token zurückzugeben. Ich speichere Token in einem verteilten Cache (memcached, ehcache, redis o.ä.). – expert

+0

Wo laufen Ihre Microservices? – behrooziAWS

+0

Ich glaube nicht, dass Sie OpenID Connect in Ihrem Szenario brauchen, also sollte ein einfacher OAuth2-Service, der accessTokens (siehe jwt.io) ausgibt, der userId, role und expirationTimestamp enthält, alles sein, was Sie benötigen, um Anfragen autonom zu authentifizieren/zu autorisieren . Das einzige, was ein bisschen knifflig ist, ist die Refresh-Token-Behandlung. – felixbr

Antwort

0

Ich habe vor kurzem SoftwareMill akka-http-session Bibliothek verwendet und fand es einfach und leicht zu integrieren. Es bietet Unterstützung für auf Fallklassen basierende Sitzungen, JWTs, Aktualisierungstoken mit Pluggable-Speicher, die Verwendung von Headern und CSRF-Tokens sowie einige nette einfache Anweisungen zur Verwendung in Routen.