Lewati ke konten utama

Autentikasi

Semua API IDCloud (kontrak Web & SDK dan API) menggunakan OAuth2 dengan JWT Bearer Grant Type (RFC 7523). Anda membuat JWT assertion berumur pendek di back-end, menukarnya dengan Bearer token, dan menggunakan token tersebut di setiap panggilan berikutnya.

Jangan pernah lakukan ini di sisi klien

JWT assertion harus dibuat di back-end saja. Jangan pernah mengekspos private key Anda di kode front-end, aplikasi mobile, repositori, atau log.

Mendapatkan kredensial

Sebelum dapat membuat token, Anda memerlukan service account yang disediakan oleh Unico. Hubungi dukungan Unico dan berikan:

  • Nama service account (maks. 12 karakter)
  • Nama, email, dan nomor telepon penanggung jawab (hanya nomor Brasil, AS, atau Meksiko)

Anda akan menerima:

  • Nama akun unik
  • Tenant ID
  • Base JWT payload
  • File private key (format .pem)
Satu akun per environment

Pertahankan service account yang terpisah untuk UAT dan Production.

Membangun JWT assertion

Assertion adalah JWT dalam format JWS kompak: {Base64url(Header)}.{Base64url(Payload)}.{Base64url(Signature)}.

Header
{
"alg": "RS256",
"typ": "JWT"
}
Payload
ClaimNilaiCatatan
iss<account_name>@<tenant_id>.iam.acesso.ioDiberikan bersama kredensial Anda
audhttps://identityhomolog.acesso.io (UAT) atau https://identity.acesso.io (Production)Harus sesuai dengan host token endpoint
scope*Memberikan semua izin
iatUnix timestamp (detik)Waktu JWT diterbitkan
expiat + maks. 3600Tidak boleh melebihi 1 jam dari iat
{
"aud": "https://identity.acesso.io",
"scope": "*",
"iat": 1738086000,
"exp": 1738089600
}
Signature

Tandatangani header + payload menggunakan RS256 (RSA + SHA-256) dengan private key .pem yang diberikan oleh Unico.

Jangan tambahkan klaim ekstra

Field apa pun yang tidak tercantum di atas (misalnya sub, jti, nbf) akan menyebabkan error 1.2.22. Gunakan hanya klaim yang ditampilkan.

Meminta token

Token endpoint sama untuk kedua kontrak:

EnvironmentEndpoint
ProductionPOST https://identity.acesso.io/oauth2/token
UATPOST https://identityhomolog.acesso.io/oauth2/token
Request
ParameterNilai
Content-Typeapplication/x-www-form-urlencoded
grant_typeurn:ietf:params:oauth:grant-type:jwt-bearer
assertionJWT yang telah ditandatangani
curl -X POST https://identity.acesso.io/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
-d "assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
Response
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}
FieldTipeDeskripsi
access_tokenstringJWT access token. Gunakan di Authorization: Bearer <token> pada semua panggilan API.
expires_inintegerWaktu kedaluwarsa dalam detik. Contoh: 3600.
token_typestringSelalu Bearer.

Menggunakan token

Tambahkan token ke header Authorization di setiap permintaan API. Header-nya identik untuk kedua kontrak — yang berbeda adalah host dan path dari API yang Anda panggil:

KontrakProduction hostUAT host
Web & SDKhttps://api.idcloud.unico.apphttps://api.idcloud.uat.unico.app
APIhttps://api.id.unico.apphttps://api.id.uat.unico.app

Web & SDKAuthorization adalah satu-satunya header autentikasi yang diperlukan:

curl -X POST https://api.idcloud.unico.app/client/v1/process \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ ... }'

APIAuthorization digunakan bersama header APIKEY:

curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-d '{ ... }'

Pembaruan token

Token kedaluwarsa setelah 3600 detik. Terapkan pembaruan proaktif di back-end Anda:

  • Pantau expires_in dari respons token dan simpan timestamp kedaluwarsa.
  • Minta token baru ketika tersisa 10 menit atau kurang sebelum kedaluwarsa.
  • Jangan pernah menunggu 401 di production untuk memicu pembaruan.

Referensi API

Spesifikasi OpenAPI lengkap untuk token endpoint tersedia di authentication.yaml.

MetodePathDeskripsi
POST/oauth2/tokenTukarkan JWT assertion yang ditandatangani dengan Bearer access token

Kode error

KodeDeskripsiTindakan
1.0.1ID yang diberikan dalam pembentukan iss salahVerifikasi field iss sesuai dengan tenant ID yang diberikan saat private key dibuat
1.0.14Aplikasi tidak aktifTanyakan ke project manager apakah aplikasi yang digunakan sudah aktif
1.1.1Parameter scope tidak diberikanTambahkan "scope": "*" ke JWT payload Anda
1.2.4JWT assertion tidak validJWT assertion tidak lagi valid. Dua kemungkinan penyebab: (a) waktu saat ini sudah melewati exp (JWT benar-benar kedaluwarsa — buat assertion baru untuk setiap permintaan token); atau (b) exp melebihi iat + 3600 (durasi terlalu panjang — batasi exp pada iat + 3600).
1.2.5Validasi JWT gagalJWT tidak dapat divalidasi. Verifikasi parameter dan pastikan ditandatangani dengan RS256 dan private key yang benar
1.2.6Private key tidak lagi validPrivate key yang digunakan untuk menandatangani JWT tidak lagi diterima. Minta kredensial baru untuk akun tersebut
1.2.7JWT sudah digunakanJWT tidak lagi diterima karena sudah digunakan. Buat assertion baru untuk setiap permintaan token
1.2.11Akun tidak aktifAkun yang digunakan tidak aktif
1.2.14Akun tidak memiliki izin yang diperlukanAkun yang digunakan tidak memiliki izin yang diperlukan
1.2.18Akun dikunci sementaraAkun telah dikunci sementara karena melebihi jumlah percobaan autentikasi yang tidak valid
1.2.19Peniruan identitas pengguna tidak diizinkanJWT berisi klaim sub yang mengarah ke akun yang tidak diizinkan untuk peniruan identitas. Hapus klaim sub dari payload.
1.2.20Dekoding JWT gagalGagal mendekode JWT. Verifikasi format token dan pastikan ditandatangani dengan RS256.
1.2.21Private key salah / Autentikasi gagalTanda tangan JWT tidak dapat diverifikasi terhadap kunci mana pun yang dikenal untuk akun ini. Pastikan Anda menggunakan file private key .pem yang benar untuk service account dan environment ini.
1.2.22Field yang tidak diizinkan dalam payloadJWT berisi field payload ekstra yang tidak diizinkan. Hapus klaim apa pun yang tidak tercantum dalam panduan ini (misalnya sub, jti, nbf). Catatan: jika Anda menyertakan klaim sub dan menerima error 1.2.19, error tersebut yang berlaku.
1.3.1Pembatasan akses IPIP Anda tidak ada dalam daftar yang diizinkan untuk akun ini
1.3.2Pembatasan akses berbasis waktuPermintaan berada di luar jendela waktu yang diizinkan untuk akun ini

Langkah berikutnya