engineering docs

Authentication

Auth memakai Better Auth yang di-host oleh apps/api. @repo/auth adalah kontrak global untuk semua aplikasi. @contracts/* hanya dipakai bila ada kontrak khusus antar microfrontend apps/app/*.

Boundary

  • Auth handler mengelola sign-up, sign-in, sign-out, verification, password, passkey, two-factor, dan session.
  • Domain route di apps/api memanggil requireCurrentUser setelah request identity berhasil dipetakan dari cookie Better Auth.
  • Proxy header hanya diterima bila secret trusted cocok dan hanya dari server-to-server.
  • Aplikasi web memakai createAoriAuthClient dari @repo/auth/client.
  • Next.js server runtime memakai getAoriSessionFromHeaders dari @repo/auth/server.
import { createAoriAuthClient } from '@repo/auth/client';
 
export const authClient = createAoriAuthClient({
  env: {
    NODE_ENV: process.env.NODE_ENV,
    NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL,
    NEXT_PUBLIC_AUTH_SAME_ORIGIN: process.env.NEXT_PUBLIC_AUTH_SAME_ORIGIN
  }
});

Production dengan subdomain bersama harus memakai:

BETTER_AUTH_URL=https://api.example.com
BETTER_AUTH_SECRET=...
AUTH_COOKIE_DOMAIN=example.com
CORS_ALLOWED_ORIGINS=https://app.example.com,https://landing.example.com,https://commerce.example.com
BETTER_AUTH_TRUSTED_ORIGINS=https://app.example.com,https://landing.example.com,https://commerce.example.com
NEXT_PUBLIC_AUTH_SAME_ORIGIN=true

Setiap aplikasi Next.js menambahkan rewrite /api/auth/:path* ke BETTER_AUTH_URL/NEXT_PUBLIC_API_URL. Ini membuat browser memanggil auth lewat origin aplikasi, tetapi handler tetap milik apps/api.

Authorization: Bearer <access-token>
x-aori-user-id: <user-id>
x-aori-proxy-secret: <server-only-secret>

Jangan kirim proxy secret ke browser, Expo, logs, atau error response. Jangan menerima userId dari body sebagai identitas caller.

Failure handling

  • 401 berarti session hilang/kedaluwarsa: refresh bila aman, jika gagal arahkan ke sign-in.

  • 403 berarti session valid tetapi tidak memiliki akses organisasi. Semua mutasi mengulang ownership check di server.

Temukan lebih banyak mengenai status code.