Lewati ke konten utama

Token dan Klaim

Halaman ini menjelaskan token response fields, ekspektasi ID token validation, scopes, dan claims yang diekspos oleh OIDC endpoints Muhajir Studio.

Token Response

POST /api/auth/oauth2/token mengembalikan OidcTokenResponse saat berhasil:

FieldTypeCatatan
access_tokenstringBearer token untuk UserInfo dan external APIs.
token_typeBearerToken type selalu Bearer.
expires_innumberPositive integer lifetime dalam detik.
id_tokenstringOpsional di schema; hadir saat OIDC provider menerbitkannya untuk flow tersebut.
refresh_tokenstringOpsional; hadir saat refresh-token behavior tersedia untuk grant/client.
scopestringOptional space-separated granted scope string.

Gunakan Authorization: Bearer ACCESS_TOKEN untuk bearer-protected endpoints.

Access Tokens

Access tokens disimpan oleh OIDC provider dan di-resolve server-side untuk first-party external APIs. /api/external/me hanya menerima OIDC bearer access tokens; cookie-only sessions tidak diterima di sana.

Access token ditolak saat:

  • header Authorization tidak ada
  • scheme bukan Bearer
  • token tidak dikenal
  • token sudah expired
  • token tidak memiliki associated user

Dalam kasus tersebut, bearer-protected APIs mengembalikan 401.

ID Tokens

ID token claims schema mengizinkan standard OIDC fields dan beberapa optional claims:

ClaimCatatan
issIssuer. Harus sama dengan configured OIDC_ISSUER.
subStable subject identifier.
audAudience. Harus mencakup client_id Anda.
expExpiration time. Harus di masa depan.
iatIssued-at time.
nonceHadir ketika nonce dikirim dan harus sama dengan stored nonce Anda.
emailTersedia saat email-related claims diberikan.
email_verifiedTersedia saat email-related claims diberikan.
nameTersedia saat profile-related claims diberikan.
pictureTersedia saat profile-related claims diberikan.
given_nameTersedia saat profile-related claims diberikan.
family_nameTersedia saat profile-related claims diberikan.
permissionsTersedia saat scope permissions diberikan dan claims disertakan.

Saat memakai ID token untuk local sign-in, validasi:

  • signature dengan keys dari /api/auth/jwks
  • iss
  • aud
  • exp
  • iat sesuai client policy Anda
  • nonce saat Anda mengirimnya di authorize request

Scopes

Supported scopes berasal dari OIDC_SCOPE_METADATA dan diekspos oleh GET /api/public/oidc/scopes.

ScopeTujuan developerClaims
openidRequired OIDC scope untuk stable subject identity.sub
profileMengizinkan profile claims seperti name dan picture jika tersedia.name, picture, given_name, family_name
emailMengizinkan email dan email verification claims jika tersedia.email, email_verified
offline_accessMengizinkan refresh-token based sessions jika didukung.none
permissionsMengizinkan permissions claim dan permission-based fields di supported APIs.permissions

Untuk dynamic applications, admin-selected scopes adalah source of truth. Saat authorization, server menulis ulang request scope menjadi configured scope set milik aplikasi.

Permissions Claim

OIDC provider menambahkan custom UserInfo claims melalui buildAdditionalUserInfoClaims. Saat ini, fungsi ini hanya menambahkan permissions dan hanya ketika granted scopes mencakup permissions.

Saat disertakan, permissions adalah effective permission key list pengguna dari roles/permissions system.

Contoh:

{
"sub": "user-id",
"permissions": ["manage-applications", "login-web-admin"]
}

Jangan pernah mengecek user roles secara langsung di clients. Permission keys adalah authorization signal yang didukung.

External Current User Claims

GET /api/external/me mengembalikan stable external API shape yang lebih kecil dan difilter berdasarkan granted scopes:

ScopeResponse fields
openidsub
profilename, picture
emailemail, emailVerified
permissionspermissions

Endpoint ini membutuhkan openid. Jika bearer token valid tetapi tidak memiliki openid, response adalah:

{
"error": "FORBIDDEN",
"missingScopes": ["openid"]
}

Refresh Tokens

Refresh tokens dapat hadir di standard token responses saat refresh behavior tersedia untuk grant/client. Scope offline_access ditujukan untuk refresh-token based sessions jika didukung.

First-party cookie-token helpers memindahkan refresh tokens dari JSON response ke HTTP-only cookie. Third-party integrations biasanya sebaiknya memakai standard /api/auth/oauth2/token endpoint dan menangani refresh tokens sesuai platform security model mereka.

OAuth Error Shape

OIDC dan token errors mengikuti OAuth error schema:

{
"error": "invalid_request",
"error_description": "...",
"error_uri": "https://example.com/docs/error"
}

error_description dan error_uri bersifat opsional.