Аутентификация в Relay и GraphQL

Я работал над приложением, использующим реагирование и ретрансляцию, и теперь я застрял в реализации аутентификации.

Я знаю, что вы можете передать значение для каждого запроса graphql через контекст, который доступен в GraphQL, разрешает функции.

Я больше запутался в том, что сойти за это и как.

Лучше использовать веб-токен JSON, паспорт или что-то еще? И как мне передать идентификатор для пользователя?

В основном то, что я спрашиваю, что лучше всего подходит для реле: JWT, паспорт, что-то еще? И как это подключить с помощью реле. Спасибо!

 Luke Williams18 мая 2017 г., 21:57
Наш опыт работы с Auth0 был очень хорошим - настройка более или менее тривиальна.

Ответы на вопрос(2)

Я являюсь автором первого примера ответа кибервомбата и в настоящее время разрабатываю новыйуниверсальный релейный стартовый комплект, У него есть аутентификация через AWS Cognito и есть логин FB через Cognito, хотя этоеще не полностью работает, Он использует токены JWT, выпущенные Cognito.

Паспорт также может быть альтернативой, если вам нужно реализовать рабочий процесс аутентификации самостоятельно, а не использовать Cognito или Auth0 или аналогичные сервисы. Вы могли бы реализовать (отдельный) сервер аутентификации, предоставляющий конечные точки аутентификации, такие как вход в систему и т. Д. Этот сервер может установить JWT в файле cookie, который может использоваться на сервере GraphQL для аутентификации.

Стартовый набор все еще находится в стадии разработки (например, токен обновления еще не используется), но его уже можно использовать.

Решение Вопроса

Я думаю, что вам лучше всего изучить некоторые из стартового комплекта. К сожалению, почти ни один из этих наборов не обеспечивает полную реализацию JWT - многие из них, кажется, только наполовину сделали один.

Проверять, выписываться:

Аутентификация реле, Ваш пробег может варьироваться - он охватывает всю концепцию, но имеет некоторые ошибки.Универсальный релейный котел, Это довольно удивительно и полно, но это чудовище, и с ним может быть немного сложно работать, поскольку оно также включает создание приложений для iOS / Android.Стартовый комплект реле, На момент написания в нем была только настройка аутентификации FB (так что обычная форма входа не работает), через которую он устанавливает cookie-файл JWT. Я считаю, что перенос всех их маршрутов входа в GraphQL включен в план, поскольку сейчас это своего рода гибрид.

Насколько ваш вопрос JWT / паспорт. Они не являются взаимоисключающими. Passport может обрабатывать jwt auth, хотя лично я им не пользуюсь и работаю напрямую с библиотекой jwt. Это не очень сложно сделать - вы можете увидеть это всервер файл стартового комплекта реле.

Токены JWT обычно передаются вокруг заголовков, однако произошел сдвиг в сторону хранения этих токенов вHttpOnly печенье (см. этостатья). Преимущество этого метода в том, что вам не нужно иметь дело с передачей токена с помощью Relay.

 Gershon Papi27 июл. 2016 г., 19:52
Что вы имеете в виду, что JWT и паспорт не являются взаимоисключающими? Являются ли они сейчас двумя различными способами аутентификации пользователей? Зачем мне использовать оба?
 Gershon Papi27 июл. 2016 г., 20:38
Спасибо, ты классный :)
 cyberwombat27 июл. 2016 г., 20:28
Кроме того, вот аналогичное обсуждение SO:stackoverflow.com/questions/34796788/...
 Gershon Papi08 авг. 2016 г., 21:39
Где вы видите OAuth2 в других примерах? Только React Starter Kit использует Oauth, но не использует мутации для обновления хранилища реле. Остальное использует обычную аутентификацию по имени пользователя и паролю. В любом случае, спасибо, я посмотрю вокруг.
 Gershon Papi27 июл. 2016 г., 20:11
По какой-то причине я смешал паспорт с аутентификацией на основе сеанса, поэтому я не понимал, как это связано с аутентификацией на основе токенов, такой как jwt, спасибо!
 Gershon Papi08 авг. 2016 г., 18:20
Ни один из примеров не включает аутентификацию OAuth с использованием мутации graohql. Аутентификация с помощью ретрансляции выполняет аутентификацию с использованием jwt с мутацией graphql, но с Oauth это не так, поскольку она связана с обратными вызовами. Есть идеи, как совместить два? Я знаю, что, как правило, я могу аутентифицироваться без мутаций, просто передавая идентификатор пользователя в корень / контекст graphql, но правильный путь должен быть с мутациями, поскольку это позволяет мне уведомить хранилище об обновлении полей. Я ошибся?
 cyberwombat08 авг. 2016 г., 20:47
Все они используют OAuth2, но вы, вероятно, имеете в виду трехстороннюю аутентификацию, такую ​​как Facebook, и действительно, единственной, кто использует FB-аутентификацию, является Relay Starter Kit, который еще не преобразовал его в мутации. Я видел это в их списке задач, так что, возможно, стоит побеспокоиться об их системе отслеживания проблем. Возможно, в работах есть запрос на извлечение.
 cyberwombat27 июл. 2016 г., 20:02
Passport - это общий инструмент аутентификации, который имеет плагины для локальной аутентификации (стандартное имя пользователя / пароль и, вероятно, то, на что вы ссылаетесь, когда упоминаете Passport), facebook, jwt и так далее. Это не предписывает определенный метод. Это особенно удобно при работе с более сложными сценариями аутентификации FB / twitter. Но все эти методы аутентификации, включая jwt, могут быть обработаны без паспорта, если вы предпочитаете.
 cyberwombat08 авг. 2016 г., 22:05
Я думаю, я всегда думаю о других как о типе предоставления пароля Oauth2 с неявным идентификатором клиента.

Ваш ответ на вопрос