Производство Apollo GraphQL - Аутентификация и авторизация

Это вторая часть моей серии статей о продукте GraphQL. Ознакомьтесь с частью 1, Основные настройки и инструменты, здесь.

ПРИМЕЧАНИЕ. В этом примере будут использоваться Apollo-Client 1.x и Apollo-Server-Express 1.2.0.

Каждое поле, предоставленное схемой GraphQL, соответствует преобразователю, который создает правильное поле. Это дает нам беспрецедентный контроль над нашим API, позволяя управлять доступом по полю, а не по конечной точке HTTP. Давайте посмотрим, как мы это делаем, ниже.

Аутентификация

Я предпочитаю веб-токены JSON для аутентификации. Их можно многократно использовать на всех платформах и одновременно использовать для обмена информацией. Подробнее о том, как использовать JWT, читайте здесь.

Аутентификация пользователя с помощью JWT проста. Включите JWT в заголовок авторизации каждого HTTP-запроса, а затем расшифруйте его с помощью соответствующего секрета на сервере. Если расшифровка прошла успешно, все готово! Посмотрите на этот базовый пример:

Вот и все! Если расшифровка не удалась, ваш сервер вернет ошибку 401 Unauthorized.

GraphQL позволяет нам определять, как каждое поле распознает, что означает, что мы можем получить довольно детальную авторизацию. Первое, что нам нужно, это передать расшифрованный объект пользователя (из пользовательского JWT) каждому преобразователю. Для этого мы будем использовать контекстное поле Apollo Server. Обновите наш предыдущий код, чтобы он выглядел так:

Теперь расшифрованный объект JWT будет передан каждому объекту и преобразователю полей и мутатору. Проверить это:

Теперь вы можете выполнять авторизацию на уровне объекта или управлять доступом к отдельным полям.

Вот и все! Одна из многих прелестей GraphQL заключается в том, что вы можете определить, как вы хотите обрабатывать аутентификацию и авторизацию вашего API. В Wed Clique я выбрал более детальный подход, потому что мне нужно управлять доступом к определенным данным в зависимости от типа пользователя и разрешений. Делайте то, что лучше всего подходит для вас и ваших пользователей!

Если вам понравилась эта статья, помогите, поставив лайк, поделитесь или оставьте комментарий. Мне хочется написать еще об этом, спасибо!

Джеймс Менш - технический / технический руководитель в The Wed Clique и генеральный директор Magnifai. Я верю в создание интеллектуальных продуктов, использование данных для принятия решений и разработку для социального воздействия. Я пишу о некоторых крутых вещах, которые я делаю в сфере технологий, психологии продуктивности и мотивации, а также о своих социальных инновационных проектах. Свяжитесь со мной в LinkedIn или поздоровайтесь в Twitter.

Первоначально опубликовано по адресу http://jamesmensch.com/tutorials/2017/production-graphql-2-auth/.