2016-08-07 11 views
2

Wie wird die Authentifizierung in GraphQL-Servern richtig gehandhabt?Authentifizierung in GraphQL-Servern

Ist es in Ordnung, ein JWT-Token am Authorization-Header von Abfrage-/Mutationsanforderungen zu übergeben?

Sollte ich etwas aus der GraphQL-Spezifikation verwenden?

Staatenlose Lösungen sind vorzuziehen.

Danke.

+0

Mögliche Duplikate von [Authentifizierung in Relay & GraphQL] (http://stackoverflow.com/questions/38618385/authentication-in-relay-graphql) –

Antwort

1

Vor einiger Zeit habe ich mich schon einmal gefragt, aber anscheinend ist die Authentifizierung außerhalb des Bereichs von was GraphQL versucht zu erreichen (siehe die Gespräche auf Github).

Aber es gibt Lösungen wie this, die es mit Sitzungen behandelt.

Angenommen, Sie verwenden express-graphql, hier ist, was Sie tun können.

import graphQLHTTP from 'express-graphql' 
app.use(`/graphql`, [aValidationFunction, graphQLHTTP(options)]) 

function aValidationFunction(req, res, next) { 
    const { authorization } = req.headers 
    // Do your validation here by using redis or whatever 
    if (validUser) { 
    return next() 
    } else { 
    return res.status(403) 
    } 
} 
0

Es hängt davon ab, ob Ihr GraphQL Consumer eine Webapp oder Mobile App ist.

Wenn es eine Webanwendung ist, würde ich empfehlen, mit Session-Cookie-basierter Authentifizierung zu bleiben, da die meisten gängigen Web-Frameworks dies unterstützen, und Sie erhalten auch CSRF-Schutz.

Wenn es eine mobile App ist, dann wollen Sie JWT. Sie können versuchen, einen Cookie-Header manuell aus der Login-Antwort zu holen und diesen "Cookie" in Ihre nächste Anfrage einzufügen, aber ich hatte das Problem, dass einige Proxy-Server diesen "Cookie" entfernen, so dass Ihre Anfrage nicht authentifiziert wurde. Wie Sie bereits gesagt haben, ist JWT bei jeder authentifizierten Anfrage (GraphQL-Anfrage) der richtige Weg.