Hasura
Перед интеграцией нам необходимо развернуть Casdoor локально.
Затем мы можем быстро реализовать страницу входа на основе Casdoor в нашем собственном приложении, следуя следующим шагам.
Настройте приложение Casdoor
- Создайте или используйте существующее приложение Casdoor.
- Добавьте URL перенаправления:
http://CASDOOR_HOSTNAME/login
- Скопируйте идентификатор клиента; он нам понадобится на следующих шагах.
Добавьте пользователя в Casdoor
Теперь у вас есть приложение, но нет пользователя. Это означает, что вам нужно создать пользователя и назначить ему роль.
Перейдите на страницу "Пользователи" и нажмите "Добавить пользователя" в правом верхнем углу. Это откроет новую страницу, где вы можете добавить нового пользователя.
Сохраните пользователя после добавления имени пользователя и добавления организации Hasura (другие детали необязательны).
Теперь вам нужно установить пароль для вашего пользователя, что можно сделать, нажав "управление вашим паролем".
Выберите пароль для вашего пользователя и подтвердите его.
Создайте приложение Hasura
Запустите Hasura через Docker или Hasura Cloud.
Теперь создайте таблицу users
со следующими столбцами:
id
типа Text (Первичный ключ)username
типа Text
Обратитесь к изображению ниже для справки.
Следующий шаг - создать роль user
для приложения. Пользователи должны видеть только свои записи, но не записи других людей.
Настройте роль user
, как показано на изображении ниже. For more information, read about configuring permission rules in Hasura.
Таким образом, пользователи не могут читать записи других людей. Они могут получить доступ только к своим данным.
Для тестирования добавьте тестового пользователя. Это сделано для того, чтобы при использовании JWT токена вы видели только данные вашего пользователя, а не данные других пользователей.
Теперь вам нужно установить JWT_SECRET
в Hasura.
Настройте Hasura с Casdoor
На этом шаге вам нужно добавить HASURA_GRAPHQL_JWT_SECRET в Hasura.
Для этого перейдите в файл docker-compose.yaml Hasura и добавьте новый HASURA_GRAPHQL_JWT_SECRET
, как показано ниже.
HASURA_GRAPHQL_JWT_SECRET
должен быть в следующем формате. Не забудьте изменить <Casdoor endpoint>
на URL вашего Casdoor (например, https://door.casdoor.com
)
HASURA_GRAPHQL_JWT_SECRET: '{"claims_map": {
"x-hasura-allowed-roles": {"path": "$.roles"},
"x-hasura-default-role": {"path": "$.roles[0]"},
"x-hasura-user-id": {"path": "$.id"}
},"jwk_url":"<Casdoor endpoint>/.well-known/jwks"}'
Сохраните изменения и перезагрузите docker.
Получение JWT токена
Поскольку клиентская реализация отсутствует, вы можете получить ваш токен доступа, сделав запрос по следующему URL:
http://localhost:8000/login/oauth/authorize?client_id=<client ID>&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flogin&scope=read&state=app-built-in<public certificate>>
Измените client ID
на ID, который вы скопировали ранее, и введите публичный сертификат Casdoor, который вы можете найти на странице сертификатов Casdoor.
Затем введите имя пользователя и пароль, которые вы создали для Hasura ранее.
Нажмите "Войти"
Вернитесь на страницу Casdoor/Token.
Найдите имя пользователя, которое вы ввели ранее, затем нажмите "редактировать"
Скопируйте токен доступа
Теперь вы можете использовать токен доступа для выполнения аутентифицированного запроса. Hasura возвращает соответствующего пользователя, а не всех пользователей из базы данных.