Интеграция с Supabase
Узнайте, как интегрировать Logto с Supabase для улучшения процесса аутентификации в ваших приложениях.
Logto — это современный провайдер услуг аутентификации личности, который предлагает безопасную, комплексную и удобную поддержку входа в приложения. Он также предоставляет множество SDK и руководств по интеграции для различных фреймворков и языков программирования, что позволяет вам беспрепятственно интегрировать корпоративные услуги аутентификации в ваше приложение в считанные минуты.
Эта статья главным образом сосредоточена на том, как интегрировать Supabase с Logto.
Основы Supabase
Supabase использует Многоуровневую безопасность на уровне строк Postgres для управления доступом к данным. Проще говоря, создавая политики безопасности на уровне строк для таблиц в базе данных, мы можем ограничивать и управлять доступом каждого пользователя к чтению, записи и обновлению данных в таблице.
Предположим, у вас есть таблица под названием "posts" в вашей базе данных со следующим содержимым:
Поле user_id
в таблице представляет пользователя, которому принадлежат данные каждого поста. Вы можете ограничить каждого пользователя доступом только к своим данным постов на основе поля user_id
.
Однако, прежде чем это может быть реализовано, Supabase должно идентифицировать текущего пользователя, который обращается к базе данных.
Добавление пользовательских данных в запросы к Supabase
Благодаря поддержке JWT в Supabase, когда наше приложение взаимодействует с Supabase, мы можем сгенерировать JWT, содержащий данные пользователя, используя секрет JWT, предоставленный Supabase. Затем мы используем этот JWT в качестве заголовка Authentication при отправке запросов. После получения запроса Supabase автоматически проверяет действительность JWT и предоставляется доступ к данным внутри JWT на протяжении всех последующих процессов.
Сначала мы можем получить секрет JWT, предоставленный Supabase, в "Настройки проекта" на панели управления Supabase:
Затем, при использовании SDK Supabase для отправки запросов в Supabase, мы используем этот секрет для генерации нашего JWT и прикрепляем его в качестве заголовка Authentication к запросу. (Обратите внимание, что этот процесс происходит в сервисе вашего приложения на стороне сервера, и секрет JWT никогда не должен быть раскрыт третьим лицам).
Далее перейдите в SQL Editor на панели управления Supabase и создайте функцию для получения userId, переданного в запросе:
Код, использованный на изображении, выглядит следующим образом:
Как показано в коде, в Supabase можно получить payload JWT, который мы генерируем, вызвав request.jwt.claims
. Поле userId
внутри payload — это значение, которое мы задали.
С помощью этой функции Supabase может определить, какой пользователь в настоящее время обращается к базе данных.
Создание политики на уровне строк
Затем мы можем создать политику на уровне строк, чтобы ограничить каждого пользователя доступом только к своим данным постов на основе поля user_id
в таблице постов.
- Перейдите на страницу Table Editor на панели управления Supabase и выберите таблицу posts.
- Нажмите на "Add RLS Policy" в верхней части таблицы.
- В появившемся окне нажмите "Create policy".
- Введите название политики и выберите команду SELECT Policy.
- В блоке
using
кода ниже введите: