2016-07-27 41 views
4

Ich habe an einer Anwendung mit react und relay gearbeitet, und jetzt bin ich bei der Implementierung der Authentifizierung stecken.Authentifizierung in Relay & GraphQL

Ich weiß, dass Sie Wert an jede graphql-Anfrage über den Kontext übergeben können, der in GraphQL-Funktionen zur Verfügung steht.

Ich bin mehr verwirrt darüber, was für sie und wie passieren.

Ist es besser, JSON Web-Token, Pass, etwas anderes zu verwenden? Und wie sollte ich die Kennung für den Benutzer übergeben?

Grundsätzlich was ich Fragen, Was ist am besten geeignet für Relais: JWT, Reisepass, etwas anderes? Und wie man es mit Relais verbindet. Vielen Dank!

+0

Unsere Erfahrung mit Auth0 war sehr gut - Setup ist mehr oder weniger trivial. –

Antwort

3

Ich denke, Ihre beste Wette ist es, einige der Starter-Kit zu studieren. Leider bietet fast keiner dieser Kits eine vollständige JWT-Implementierung - viele von ihnen scheinen nur die Hälfte zu haben.

Check out:

  • Relay Authentication. Ihre Laufleistung kann variieren - sie deckt das gesamte Konzept ab, enthält jedoch einige Fehler.
  • Universal Relay Boilerplate. Das ist ziemlich erstaunlich und komplett, aber es ist ein Biest und kann etwas überwältigend sein, da es auch die Erstellung von iOS/Android-Apps beinhaltet.
  • Relay Starter Kit. Zum Zeitpunkt des Schreibens hat es nur FB-Auth-Setup (also kein reguläres Login-Formular, das funktioniert), durch das es einen JWT-Cookie setzt. Ich glaube, dass die Migration aller Login-Routen zu GraphQL auf der Roadmap steht, da es sich momentan um eine Art Hybrid handelt.

Soweit Ihre Frage JWT/Pass. Sie schließen sich nicht gegenseitig aus. Passport kann jwt auth behandeln, obwohl ich persönlich es nicht benutze und direkt mit einer jwt Bibliothek arbeite. Es ist nicht sehr schwer zu tun - Sie können es in der server Datei des Relay Starter Kit sehen.

JWT Token werden in der Regel rund um die Header weitergegeben jedoch eine Verschiebung in Richtung Speicherung dieser Tokens in Httponly-Cookies wurde (siehe diese article). Der Vorteil dieser Methode besteht darin, dass Sie sich nicht darum kümmern müssen, das Token mit Relay weiterzuleiten.

+0

Was meinen Sie, jwt und Pass schließen sich nicht gegenseitig aus? Gibt es jetzt zwei verschiedene Möglichkeiten, Benutzer zu authentifizieren? Warum sollte ich beides benutzen? –

+1

Passport ist ein allgemeines Authentifizierungs-Tool, das über Plugins für die lokale Authentifizierung verfügt (Standard-Benutzername/Pass und wahrscheinlich, worauf Sie sich beziehen, wenn Sie Passport erwähnen), Facebook, JWT und so weiter. Es schreibt keine bestimmte Methode vor. Das ist besonders praktisch, wenn es sich um komplexere Szenarien von FB/twitter auth handelt. Aber alle diese Authentifizierungsmethoden, einschließlich JWT, können ohne Pass behandelt werden, wenn Sie bevorzugen. – cyberwombat

+0

Aus irgendeinem Grund habe ich den Pass mit sessionbasierter Authentifizierung gemischt, also habe ich nicht verstanden, was es mit tokenbasierter Authentifizierung wie jwt zu tun hat, danke! –

0

Ich bin der Autor des ersten Beispiels in Cyberwombats Antwort und derzeit eine neue universal relay starter kit entwickeln. Es verfügt über eine Authentifizierung über AWS Cognito und es gibt eine FB-Anmeldung über Cognito, obwohl es not fully working yet ist. Es verwendet JWT-Token von Cognito.

Passport kann auch eine Alternative sein, wenn Sie den Authentifizierungs-Workflow selbst implementieren müssen, anstatt Cognito oder Auth0 oder ähnliche Dienste zu verwenden. Sie könnten einen (separaten) Authentifizierungsserver implementieren, der Authentifizierungsendpunkte wie Login usw. freigibt. Dieser Server kann einen JWT in einem Cookie setzen, der auf dem GraphQL-Server zur Authentifizierung verwendet werden kann.

Das Starter Kit ist noch in der Entwicklung (Refresh Token werden zum Beispiel noch nicht benutzt), aber es ist schon irgendwie brauchbar.