İçindekiler
Yüzeyler
| Yüzey | Oturum | Önek |
|---|---|---|
| GoUI | HttpOnly cookie (access / refresh) |
/auth/*, /dashboard/*, /goui/ws |
| API | Authorization: Bearer <access> |
/api/v1/auth/*, korumalı /api/v1/* |
| Canlı olay | Bearer, ?access_token= veya cookie |
/api/v1/ws |
Aynı application/auth ve application/user use-case’leri kullanılır.
Panel bildirim zili ve mobil istemciler aynı /api/v1/ws hub’ından inbox.updated alır; GoUI WS yalnızca UI patch/toast içindir.
JWT
| Token | Amaç | Yapılandırma |
|---|---|---|
| Access | Kısa ömürlü API/panel erişimi | AUTH_ACCESS_TOKEN_TTL |
| Refresh | Rotation ile yenileme | AUTH_REFRESH_TOKEN_TTL |
- Issuer / audience:
AUTH_JWT_ISSUER,AUTH_JWT_AUDIENCE - Secret:
AUTH_JWT_SECRET(production ≥ 32 karakter) - Refresh reuse tespiti → ilgili oturum ailesi iptal
- Logout → refresh iptali
API uçları (/api/v1/auth)
| Metot | Yol | Not |
|---|---|---|
| POST | /login |
E-posta + parola (+ Turnstile) |
| POST | /refresh |
Yeni access/refresh |
| POST | /logout |
|
| POST | /forgot-password |
|
| POST | /reset-password |
|
| POST | /verify-email |
|
| POST | /resend-verification |
|
| GET | /oauth/:provider |
google | github |
| GET | /oauth/:provider/callback |
|
| POST | /change-password |
Auth gerekli |
| POST | /mfa/setup | /mfa/enable | /mfa/disable |
Auth gerekli |
| GET | /permissions |
Oturum sahibinin izinleri |
Web karşılıkları: /auth/login, /auth/register, /auth/forgot-password, … ve OAuth callback’ler utility_routes üzerinden.
Brute-force
LoginGuard: e-posta ve IP bazlı deneme sınırı.
AUTH_MAX_LOGIN_ATTEMPTSAUTH_LOCKOUT_DURATION- Altyapı:
infrastructure/security(IP rate limiter)
MFA (TOTP)
RFC 6238. Secret alan şifrelemesi: AUTH_MFA_ENCRYPTION_KEY (openssl rand -base64 32).
Akış: setup → kullanıcı authenticator’a ekler → enable (kod doğrulama) → login’de ikinci adım.
E-posta token’ları
Doğrulama / şifre sıfırlama: tek kullanımlık, SHA-256 hash’li, süreli.
AUTH_VERIFY_TOKEN_TTL,AUTH_RESET_TOKEN_TTL- Link kökü:
AUTH_EMAIL_LINK_BASE_URL - SMTP yoksa
LogMailer(yalnızca log)
OAuth
Env boşsa sağlayıcı kapalıdır.
| Değişken | Açıklama |
|---|---|
OAUTH_CALLBACK_BASE_URL |
API callback kökü |
OAUTH_GOOGLE_* / OAUTH_GITHUB_* |
Client id/secret |
Web callback örnek: http://localhost:8080/auth/oauth/google/callback
API callback örnek: http://localhost:8080/api/v1/auth/oauth/google/callback
Davranış: bul-veya-oluştur (user rolü).
Turnstile
Public formlar (giriş, kayıt, iletişim vb.): SEC_TURNSTILE_SITE_KEY / SEC_TURNSTILE_SECRET_KEY.
Development’ta boş → doğrulama kapalı. Production’da zorunlu.
RBAC
İzin kataloğu (pkg/rbac)
| İzin | Anlam |
|---|---|
users:list |
Kullanıcı listesi |
users:read |
Başka kullanıcı profili |
users:activate |
Hesap aktifleştirme |
users:delete / users:restore |
Soft-delete / geri alma |
users:role:change |
Rol atama |
users:email:change:any |
Başkasının e-postası |
uploads:create |
Dosya yükleme |
rbac:manage |
Rol/izin yönetimi |
notifications:send |
Tekil/toplu bildirim |
notifications:settings |
SMS/ödeme ayar seçimi |
payments:charge |
3DS tahsilat |
payments:list |
İşlem listesi |
audit:list |
Denetim kayıtları |
contacts:list |
İletişim mesajları |
Sistem rolleri (seed): admin (tümü), user (sahiplik odaklı).
Çalışma şekli
- Açılışta katalog DB ile senkron (
Catalog) application/authzizin çözer (TTL cache; mutasyonda invalidate)- Middleware:
RequirePermission(HTTP + GoUI routepermissionalanı)
Rol CRUD: /api/v1/rbac/... ve panel /dashboard/rbac/*.
İlgili kod
internal/application/authinternal/application/authzinternal/adapters/http/handler/auth_*.gointernal/adapters/http/middleware/auth.gointernal/adapters/goui/controller_public_auth.gopkg/rbac