Как реализовать кастомную аутентификацию с помощью hasura?

Я работаю над веб-приложением для доставки еды. Таким образом, будет два типа пользователей: 1. Клиент. 2. поставщик. Я могу установить пользовательское разрешение для таблиц для двух пользователей в консоли hasura. Теперь, как реализовать настройку аутентификации, при которой пользователь может зарегистрироваться / войти на веб-сайт с этими двумя разными ролями. В auth0 или firebase у нас не может быть этой функции. Таким образом, пользовательский сервер аутентификации - единственный вариант. Итак, мой вопрос - как запустить скрипт jwt, который мы запускаем в auth0, чтобы передать эти сезонные переменные?

function (user, context, callback) {
const namespace = "https://hasura.io/jwt/claims";
context.idToken[namespace] = 
{ 
  'x-hasura-default-role': 'user',
  // do some custom logic to decide allowed roles
  'x-hasura-allowed-roles': ['user'],
  'x-hasura-user-id': user.user_id
};
callback(null, user, context);
}

И нужно ли мне написать эту службу аутентификации как настраиваемый преобразователь и добавить ее как удаленную схему? Как запустить операцию с базой данных в распознавателе?


person Sujoy Saha    schedule 04.04.2020    source источник


Ответы (1)


Могу ли я реализовать этот сервер аутентификации как удаленную схему или мне нужно запустить отдельный сервер узла?

Да, вы можете реализовать auth-server как удаленную схему! Вам просто нужно убедиться, что ваша удаленная схема доступна анонимной роли, минуя режим JWT, который применяется к остальной аутентифицированной конечной точке gql.

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

Соответствующая документация: https://hasura.io/docs/1.0/graphql/core/remote-schemas/schema-auth.html#bypassing-hasura-s-authorization-system-for-remote-schema-запросы

И: https://hasura.io/docs/1.0/graphql/manual/auth/authentication/unauthenticated-access.html.


При реализации собственного сервера аутентификации есть два варианта или режима (Webhooks или JWT), как подробно описано здесь: https://hasura.io/docs/1.0/graphql/manual/auth/authentication/index.html. Диаграммы очень полезны!

После установки одной из опций Hasura автоматически аутентифицирует ваши запросы (до того, как какой-либо запрос или мутация когда-либо будут запущены). Вам не нужно писать собственный преобразователь и добавлять его как удаленную схему.

Hasura можно настроить с помощью переменных среды (HASURA_GRAPHQL_AUTH_HOOK, HASURA_GRAPHQL_AUTH_HOOK_MODE или HASURA_GRAPHQL_JWT_SECRET) или флагов при запуске механизма GraphQL (--auth-hook или --jwt-secret), и в зависимости от того, что вы выберете, вы должны соответствовать спецификации, подробно описанной в документации (как должен реагировать сервер аутентификации, или настроить токен).

person avimoondra    schedule 04.04.2020
comment
У меня вопрос: могу ли я реализовать этот сервер аутентификации как удаленную схему или мне нужно запустить отдельный сервер узла? - person Sujoy Saha; 05.04.2020
comment
@SujoySaha обновлено выше, краткий ответ: да, вы можете! Не нужен отдельный сервер. - person avimoondra; 05.04.2020