Files
gooseek/apps/auth-mcs/README.md
home 783569b8e7 feat: монорепо миграция, Discover/SearxNG улучшения
- Миграция на монорепозиторий (apps/frontend, apps/chat-service, etc.)
- Discover: проверка SearxNG, понятное empty state при ненастроенном поиске
- searxng.ts: валидация URL, проверка JSON-ответа, авто-добавление http://
- docker/searxng-config: настройки для JSON API SearxNG

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-20 17:03:45 +03:00

136 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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