İçindekiler

Yüzeyler

YüzeyOturumÖnek
GoUIHttpOnly cookie (access / refresh)/auth/*, /dashboard/*, /goui/ws
APIAuthorization: Bearer <access>/api/v1/auth/*, korumalı /api/v1/*
Canlı olayBearer, ?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

TokenAmaçYapılandırma
AccessKısa ömürlü API/panel erişimiAUTH_ACCESS_TOKEN_TTL
RefreshRotation ile yenilemeAUTH_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)

MetotYolNot
POST/loginE-posta + parola (+ Turnstile)
POST/refreshYeni access/refresh
POST/logout
POST/forgot-password
POST/reset-password
POST/verify-email
POST/resend-verification
GET/oauth/:providergoogle | github
GET/oauth/:provider/callback
POST/change-passwordAuth gerekli
POST/mfa/setup | /mfa/enable | /mfa/disableAuth gerekli
GET/permissionsOturum 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_ATTEMPTS
  • AUTH_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şkenAçıklama
OAUTH_CALLBACK_BASE_URLAPI 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)

İzinAnlam
users:listKullanıcı listesi
users:readBaşka kullanıcı profili
users:activateHesap aktifleştirme
users:delete / users:restoreSoft-delete / geri alma
users:role:changeRol atama
users:email:change:anyBaşkasının e-postası
uploads:createDosya yükleme
rbac:manageRol/izin yönetimi
notifications:sendTekil/toplu bildirim
notifications:settingsSMS/ödeme ayar seçimi
payments:charge3DS tahsilat
payments:listİşlem listesi
audit:listDenetim kayıtları
contacts:listİletişim mesajları

Sistem rolleri (seed): admin (tümü), user (sahiplik odaklı).

Çalışma şekli

  1. Açılışta katalog DB ile senkron (Catalog)
  2. application/authz izin çözer (TTL cache; mutasyonda invalidate)
  3. Middleware: RequirePermission (HTTP + GoUI route permission alanı)

Rol CRUD: /api/v1/rbac/... ve panel /dashboard/rbac/*.

İlgili kod

  • internal/application/auth
  • internal/application/authz
  • internal/adapters/http/handler/auth_*.go
  • internal/adapters/http/middleware/auth.go
  • internal/adapters/goui/controller_public_auth.go
  • pkg/rbac