Lewati ke konten

Scopes and Claims

Scope dikirim sebagai string dipisah spasi pada /authorize. openid wajib. Client hanya boleh meminta scope yang ada di allow-list client tersebut.

Scope Catalog

ScopeDefault allowedClaim/efekCatatan
openidYasub, claim protokol OIDCWajib untuk semua request.
profileYaname, given_name, family_nameMuncul di ID token, access token, dan /userinfo bila scope diberikan.
emailYaemail, email_verifiedemail_verified boolean.
offline_accessTidakrefresh_token pada token responseHanya terbit bila client diizinkan scope ini.
rolesTidakroles[]Role slug RBAC user.
permissionsTidakpermissions[]Permission slug hasil resolver RBAC.
staff_identityTidaknik, nip, nisn, birth_dateIdentitas staf dalam bentuk masked/display-safe; tidak mengembalikan nomor mentah.
app_roleTidakapp_roles[]Role user pada aplikasi yang meminta token (dari entitlement per-aplikasi). Hanya terbit bila client diizinkan scope ini.

/userinfo Schema

/userinfo selalu mengembalikan sub. Field lain bergantung pada scope access token.

FieldTypeKondisi
substringSelalu ada.
namestringScope profile dan value tersedia.
given_namestringScope profile dan value tersedia.
family_namestringScope profile dan value tersedia.
emailstringScope email dan value tersedia.
email_verifiedbooleanScope email dan value tersedia.
rolesstring[]Scope roles.
permissionsstring[]Scope permissions.
nikstringScope staff_identity dan value tersedia; masked/display-safe.
nipstringScope staff_identity dan value tersedia; masked/display-safe.
nisnstringScope staff_identity dan value tersedia; masked/display-safe.
birth_datestringScope staff_identity dan value tersedia; masked/display-safe.
app_rolesstring[]Scope app_role; role user pada aplikasi peminta.

Minimal:

json
{ "sub": "usr_123" }

Dengan openid profile email roles permissions:

json
{
  "sub": "usr_123",
  "name": "Tio Pranoto",
  "given_name": "Tio",
  "family_name": "Pranoto",
  "email": "tio@example.com",
  "email_verified": true,
  "roles": ["admin"],
  "permissions": ["clients.read", "clients.write"]
}

ID Token Claims

ID token ditujukan untuk client/RP. Validasi minimal: signature ES256 via JWKS, iss, aud = client_id, exp, nbf, iat, dan nonce.

ClaimTypeArti
issstringIssuer. Production: https://api-sso.timeh.my.id.
audstringClient ID penerima ID token.
azpstringAuthorized party, sama dengan client ID.
substringSubject ID user.
token_usestringid.
jtistringToken ID unik.
sidstringSSO session ID untuk logout.
noncestringNilai dari /authorize, bila dikirim.
at_hashstringHash access token untuk hybrid validation.
auth_timeintWaktu autentikasi user.
amrstring[]Authentication methods, contoh pwd, mfa.
acrstringAssurance context bila ada.
iat, nbf, expintWaktu token. TTL ID token 15 menit.

Scope profile, email, roles, permissions, dan staff_identity menambahkan claim sesuai tabel scope.

Access Token Claims

Access token ditujukan untuk resource server/API, bukan untuk UI login. Validasi wajib: signature ES256 via JWKS, iss, aud = sso-resource-api, exp, nbf, iat, token_use = access, jti, sub, sid, dan client_id.

ClaimTypeArti
issstringIssuer.
audstringSelalu sso-resource-api untuk resource server saat ini.
substringSubject ID user.
client_idstringClient yang menerima token.
token_usestringaccess.
scopestringScope granted dipisah spasi.
jtistringToken ID untuk revocation.
sidstringSSO session ID.
auth_time, amr, acrmixedAssurance context.
iat, nbf, expintWaktu token. TTL access token 15 menit.

Consent muncul saat client membutuhkan persetujuan user dan policy client tidak skip_consent. Admin dapat mengatur policy client dari control plane.

prompt=consent memaksa layar consent bila flow interaktif. prompt=none tidak boleh memunculkan UI; bila login/consent/interaksi dibutuhkan, OP mengembalikan error OIDC seperti login_required, consent_required, atau interaction_required.

Dirilis dengan lisensi MIT.