- Миграция на монорепозиторий (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>
136 lines
4.5 KiB
Markdown
136 lines
4.5 KiB
Markdown
# 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
|