# Auth Microservice — Identity Provider Отдельный микросервис аутентификации с поддержкой **SSO**, **LDAP** и **OIDC**. Выступает как единый Identity Provider для регистрации и входа во все приложения вашего ландшафта. ## Возможности - **Email/пароль** — регистрация и вход - **LDAP / Active Directory** — вход через корпоративный каталог - **SSO** — вход через внешние IdP (Okta, Google, Azure AD, Keycloak и др.) - **OIDC Provider** — этот сервис выступает как IdP для других приложений (Perplexica и др.) ## Быстрый старт ### Локально ```bash cd auth-microservice cp .env.example .env # Отредактируйте .env: BETTER_AUTH_SECRET, BETTER_AUTH_URL npm install npm run db:migrate # Создание таблиц БД npm run dev ``` Сервис доступен по адресу: **http://localhost:3001** ### Docker ```bash docker compose up -d ``` ## Конфигурация ### Обязательные переменные | Переменная | Описание | |------------|----------| | `BETTER_AUTH_SECRET` | Секрет для шифрования (минимум 32 символа). Сгенерируйте: `openssl rand -base64 32` | | `BETTER_AUTH_URL` | Публичный URL сервиса (например `https://auth.example.com`) | ### LDAP (опционально) Если заданы переменные LDAP, включается вход через Active Directory / OpenLDAP: | Переменная | Описание | |------------|----------| | `LDAP_URL` | URL LDAP-сервера (`ldap://` или `ldaps://`) | | `LDAP_BIND_DN` | DN для bind (admin) | | `LDAP_PASSWORD` | Пароль для bind | | `LDAP_BASE_DN` | Базовый DN для поиска пользователей | | `LDAP_USERNAME_ATTR` | Атрибут логина (по умолчанию `uid`) | | `NEXT_PUBLIC_LDAP_ENABLED` | `true` — показать вкладку LDAP на форме входа | ### Trusted OAuth Clients Приложения, которые могут использовать этот IdP. Задаётся через `TRUSTED_CLIENTS` (JSON-массив) или `DEFAULT_CLIENT_ID` / `DEFAULT_CLIENT_SECRET`. ## Интеграция приложений ### OIDC Endpoints ``` Authorization: {BETTER_AUTH_URL}/api/auth/oauth2/authorize Token: {BETTER_AUTH_URL}/api/auth/oauth2/token UserInfo: {BETTER_AUTH_URL}/api/auth/oauth2/userinfo Discovery: {BETTER_AUTH_URL}/api/auth/.well-known/openid-configuration ``` ### Регистрация клиента Через API (требуется сессия администратора): ``` POST /api/auth/oauth2/register Content-Type: application/json { "redirect_uris": ["https://myapp.com/callback"], "client_name": "My Application", "scope": "openid profile email" } ``` ### Подключение Perplexica В Perplexica настройте Better Auth как OIDC провайдер: ```ts // В Perplexica baseURL: "http://localhost:3001" // или URL вашего auth-microservice ``` И укажите redirect URL Perplexica в `TRUSTED_CLIENTS` auth-сервиса. ## SSO (вход через внешние IdP) Чтобы пользователи могли входить через Okta, Google и т.п., зарегистрируйте SSO провайдера: ```ts await authClient.sso.register({ providerId: "okta", issuer: "https://your-tenant.okta.com", domain: "company.com", oidcConfig: { clientId: "...", clientSecret: "...", } }); ``` ## Структура проекта ``` auth-microservice/ ├── src/ │ ├── lib/ │ │ ├── auth.ts # Конфигурация Better Auth │ │ ├── auth-client.ts # Клиент для React │ │ └── db.ts # SQLite │ └── app/ │ ├── api/auth/ # API Better Auth │ ├── sign-in/ # Страница входа │ ├── sign-up/ # Регистрация │ └── dashboard/ # Личный кабинет ├── data/ # SQLite (создаётся автоматически) ├── .env.example ├── Dockerfile └── docker-compose.yaml ``` ## Лицензия MIT