Lewati ke konten

Authentication

SNAP menggunakan beberapa lapisan autentikasi:

Token JWT yang digunakan untuk mengautentikasi setiap request transaksi.

Client Server
| |
| 1. Sign(clientId + "|" + timestamp) |
| ──── POST /access-token/b2b ────────> |
| | 2. Verify RSA signature
| | 3. Generate JWT
| <── { accessToken, expiresIn } ────── |
| |
HeaderValueKeterangan
AuthorizationBasic base64(clientId:clientSecret)Kredensial client
X-TIMESTAMP2026-07-01T10:30:00+07:00Timestamp ISO 8601
X-SIGNATUREbase64(RSA_SHA256(stringToSign))Signature RSA
CHANNEL-ID95161Channel code (required untuk beberapa provider)
{clientId}|{timestamp}

Contoh: abc123|2026-07-01T10:30:00+07:00

const stringToSign = `${clientId}|${timestamp}`;
const signature = crypto
.sign('sha256', Buffer.from(stringToSign), privateKey)
.toString('base64');

Setiap request transaksi harus menyertakan signature HMAC.

{METHOD}:{PATH}:{ACCESS_TOKEN}:{SHA256(BODY)}:{TIMESTAMP}

Contoh:

POST:/bca/v1.0/balance-inquiry:eyJhbGciOi...:a1b2c3d4...:2026-07-01T10:30:00+07:00
const bodyHash = crypto.createHash('sha256').update(body).digest('hex');
const stringToSign = `${method}:${path}:${token}:${bodyHash}:${timestamp}`;
const signature = crypto
.createHmac('sha512', clientSecret)
.update(stringToSign)
.digest('base64');

Beberapa provider (BNC, DANA) menggunakan RSA alih-alih HMAC untuk transaction signature.

String to sign format sama, tapi signature menggunakan RSA private key alih-alih HMAC client secret.

ProviderToken PathSignature EncodingNotes
BCA/v1.0/access-token/b2bBase64CHANNEL-ID required
BRI/v1.0/access-token/b2bBase64
Mandiri/openapi/v1.0/access-token/b2bBase64
BNI/snap/v1.0/access-token/b2bBase64
BNC/open/bi/v1.0/get/tokenBase64RSA asymmetric token
OVO/OVOSNAP/v3.0/access-token/b2bHEXHex encoding, bukan base64
DANA/v1.0/access-token/b2bBase64Some services use asymmetric-without-token