# 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
