2016-08-07 4 views
2

Как правильно обрабатывать аутентификацию на серверах GraphQL?Аутентификация на серверах GraphQL

Можно ли передать токен JWT в заголовке авторизации запросов/мутаций?

Должен ли я использовать что-то из спецификации GraphQL?

Варианты без гражданства предпочтительны.

Спасибо.

+0

Возможный дубликат [Аутентификация в Relay & GraphQL] (http://stackoverflow.com/questions/38618385/authentication-in-relay-graphql) –

ответ

1

Некоторое время назад мне было интересно то же самое, что и раньше, , но, по-видимому, аутентификация выходит за рамки того, что пытается выполнить GraphQL (см. Разговоры по Github).

Но есть такие решения, как this, который обрабатывает его сеансами.

Предполагая, что вы используете express-graphql, вот что вы можете сделать.

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

Это зависит от того, является ли ваш пользователь GraphQL Webapp или mobileapp.

Если это webapp, я бы рекомендовал придерживаться аутентификации на основе сеанса, поскольку большинство популярных веб-фреймворков поддерживают это, и вы также получаете защиту CSRF.

Если это мобильник, вам понадобится JWT. Вы можете попытаться вручную получить заголовок файла cookie из ответа на входе и поместить этот «cookie» в свой следующий запрос, но у меня возникла проблема с тем, что некоторые прокси-серверы удаляют этот «cookie», оставляя ваш запрос не прошедшим проверку. Итак, как вы сказали, в том числе JWT в каждом аутентифицированном запросе (запрос GraphQL) - это путь.

Смежные вопросы