Как реализовать кастомную аутентификацию в auth0 и hasura graphql? - PullRequest
1 голос
/ 03 августа 2020

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

В Auth0 мы можем создать «правило» для назначения пользователя роль при входе / входе пользователя:

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

это правило выполняется во всех приложениях, которые мы создали в Auth0. Итак, когда мы создаем менеджер user. Роль установлена ​​на роль пользователя. Мой вопрос: я хочу создать пользователя-менеджера в приложении-менеджере, как я могу назначить конкретную роль c для каждого пользователя. Например, администратор может создать пользователя с ролью персонала ...

1 Ответ

0 голосов
/ 03 августа 2020

Администраторы могут создавать пользователей из приложения Менеджера - я предполагаю, что они могут указать такие атрибуты, как имя, адрес электронной почты и т. Д. c.

Они могут попасть в поле настраиваемого действия или удаленной схемы (с соответствующими разрешениями и входом учетные данные), который выполняет аутентифицированный исходящий запрос для создания пользователя в Auth0 (POST / api / v2 / users), а затем обновляет ссылочную запись в Hasura DB с идентификатором auth0. В Hasura вы также можете сохранить роль вместе с адресом электронной почты, именем и т. Д. c.

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

Следуя этой документации , как и у вас, замените

// do some custom logic to decide allowed roles

на некоторый logi c, который делает запрос к вашей конечной точке Hasura и получает информацию о ролях и любые другие данные. на основе электронной почты пользователя, пытающегося войти в систему. Эти пользовательские c данные затем могут быть использованы для создания JWT. Вы можете нажать на Хасуру из правила Auth0 через HASURA_GRAPHQL_ADMIN_SECRET, хранящийся в настройках правила. Например,

const adminSecret = configuration.HASURA_GRAPHQL_ADMIN_SECRET

Если вы хотите, чтобы вход в систему работал в нескольких средах (особенно локальных), я думаю, вам нужно (а) открыть вашу локальную хасуру для inte rnet через что-то вроде ngrok и (2) передать пользовательские параметры в правило, чтобы контролировать его поведение, в частности, какую конечную точку Hasura оно затрагивает.

В Auth0 Context object вы можете передавать любые данные через параметры запроса во время входа в систему. Например:

const hasuraEndpoint = context.request.query.hasuraEndpoint

может использоваться в Правиле вместо статически определенной конечной точки.

...