Спроектировать флоу на сайте с платной подпиской

Задание закрыто
Стоимость:5 000 рублей
Срок выполнения:1 день
Варианты оплаты:Планируется использовать Безопасную сделку
Дата публикации:2025-02-11 15:56
Был на сайте:2025-02-12 13:14

Спроектировать флоу на сайте с платной подпиской

 
Задача

Нужна консультация на настройку reverse proxy, балансера и IdP (Authentik), всё это в кубере.


Клиент делает запрос, запрос уходит на реверс прокси, прокси направляет в IdP, если юзера нет, то перенаправляем на страницу регистрации которую предоставляет ИдП, регаемся, ИдП сохраняет пользоватлея у себя в БД.
После юзер пытается получить доступ к платному ресурсу, запрос идёт на прокси, прокси форвардит на IdP, IdP проверяет что юзер зареган и ему надо сделать подписку, и перенаправляет с кодом ошибки(?) на прокси, а прокси в зависимости от кода ошибки перенаправляет на страницу покупки.

Со страницы покупки делаем оплату через сервис платежей и сообщаем IdP что юзер оплатил и всё ок. Со страницы платежа, направляем юзера на главную страницу.

Учитывая вышесказанное, страница регситрации доступна всегда, а страница покупки подписки будет доступна только после прохождения регистрации.

Оставлять заявки могут только авторизованные пользователи.
Stanislav Ricci
Основная специализация: Веб-разработка и IT
    Последовательность флоу
    Начало запроса:
    Клиент отправляет запрос на сайт. Весь входящий трафик поступает на балансировщик (например, Service типа LoadBalancer в Kubernetes) и далее попадает в Ingress Controller (reverse proxy).

    Проверка аутентификации:
    Ingress Controller направляет запрос в Authentik для проверки аутентификации (через встроенную функцию forward auth или проксирование запроса).
    Если пользователь не зарегистрирован, Authentik перенаправляет его на страницу регистрации, которая всегда доступна.

    Регистрация:
    На странице регистрации пользователь вводит данные. Authentik создаёт учётную запись и сохраняет её в своей базе данных.

    Попытка доступа к платному ресурсу:
    При повторном обращении к защищённому ресурсу запрос снова проходит через reverse proxy, который отправляет его в Authentik для проверки.
    Если Authentik обнаруживает, что пользователь зарегистрирован, но не имеет активной подписки, он возвращает специальный код (например, 403 или другой код, согласованный в вашей системе).

    Редирект на страницу покупки подписки:
    Reverse proxy, получив этот код, перенаправляет пользователя на страницу покупки подписки.

    Оплата и подтверждение:
    На странице покупки пользователь совершает платёж через интегрированный платёжный сервис. После успешной транзакции платёжный сервис уведомляет Authentik (например, через REST API или webhook), что статус подписки изменился на активный.

    Доступ к платному контенту:
    После обновления статуса подписки Authentik позволяет пользователю получить доступ к защищённому ресурсу. Клиент получает ответ с перенаправлением на главную страницу или непосредственно к контенту.
    Архитектура решения для сайта с платной подпиской в Kubernetes

    Компоненты системы:
    1. Reverse Proxy (например, Nginx или Traefik) — точка входа для клиентских запросов.
    2. Ingress Controller (Kubernetes Ingress) — балансировщик нагрузки, управляющий трафиком внутри кластера.
    3. IdP (Authentik) — сервис аутентификации и авторизации.
    4. Платежный сервис (интеграция с внешним провайдером, например, Stripe или PayPal).
    5. Сервис платного контента — защищенный ресурс, требующий подписки.
    6. База данных — хранилище пользователей и их подписок (может быть частью IdP).

    Пошаговый поток работы

    1. Настройка инфраструктуры в Kubernetes:
    - Reverse Proxy и Ingress:
    - Развертывание Ingress Controller (например, Nginx Ingress или Traefik).
    - Конфигурация правил маршрутизации в Ingress для:
    - `/login`, `/register` -> IdP (Authentik).
    - `/payment` -> Платежный сервис.
    - `/protected-resource` -> Сервис платного контента (только для авторизованных пользователей с подпиской).
    - Настройка TLS для HTTPS.

    - IdP (Authentik):
    - Развертывание Authentik в Kubernetes (Helm-чарт или манифесты).
    - Интеграция с базой данных (PostgreSQL/MySQL) для хранения пользователей.
    - Настройка OAuth2/OpenID Connect для аутентификации.

    2. Регистрация и аутентификация:
    1. Клиент запрашивает защищенный ресурс (`GET /protected-resource`).
    2. Reverse Proxy перехватывает запрос и проверяет аутентификацию через IdP.
    3. IdP:
    - Если пользователь не аутентифицирован:
    - Возвращает HTTP 401/Redirect на `/login`.
    - Клиент перенаправляется на страницу регистрации/входа IdP (`/login`).
    - После успешной регистрации/входа:
    - IdP сохраняет пользователя в своей БД.
    - Генерирует JWT-токен и устанавливает его в cookie.

    3. Доступ к платному контенту:
    1. Клиент повторно запрашивает `/protected-resource` (с токеном в cookie).
    2. Reverse Proxy передает токен в IdP для проверки:

    Продолжение следует...
    ТГ. @KuzyaevMaxim
    Готов помочь.
    Телеграмм для связи: https://t.me/viktordev93

    Оставлять заявки могут только авторизованные пользователи.

    Другие открытые задания:

    поиск заданий