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>
This commit is contained in:
135
apps/auth-mcs/README.md
Normal file
135
apps/auth-mcs/README.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user