Authentication
Public Key dan Private Key
Buat pasangan kunci RSA untuk akses Anda. Simpan kunci pribadi dan simpan dengan aman dan terlindungi. Kemudian Anda perlu mengirimkan kunci publik ke Doitpay untuk memberi Anda akses untuk meminta API. Pastikan Anda membuat kunci dalam 2048-bit.
Berikut ini contoh cara membuat kunci publik dan privat RSA:
a. Create Private Key
openssl genrsa -out rsa_private_key.pem 2048
b. Export Public Key
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
c. Private Key to PKCS#1 Encode
Partner nantinya menggunakan pkcs1_rsa_private_key.pem untuk membuat signature, dan Doitpay akan menggunakan rsa_public_key.pem untuk memvalidasi signature tersebut, dan sebaliknya.
Sekarang, Anda harus memiliki pasangan kunci RSA. Selanjutnya, Anda perlu menyimpan dan memasukkan kunci pribadi pada proyek Anda dan mengirimkan kunci publik ke Doitpay. Anda mungkin memerlukan kunci pribadi dalam proyek Anda sehingga proyek Anda harus tetap memiliki akses.
NOTE: Cara menambahkan Public Key, User dapat mengirimkan kunci publik ke pada halaman dashboard Doitpay bagian setting
Bearer Token
Saat Anda bekerja dengan API web, Bearer Token adalah token akses yang sering digunakan untuk tujuan otorisasi. Token ini bertindak seperti kunci keamanan yang digunakan server untuk memverifikasi bahwa permintaan tersebut berasal dari pengguna atau layanan yang diautentikasi.
Untuk menggunakan Bearer Token dengan SNAP API, Anda perlu mendapatkan token dengan memberikan kredensial Anda ke titik akhir autentikasi.
Get Token API
- Method:
POST
- Type:
application/json
- Development:
https://rest.doitpay.dev/auth/v1.0/access-token/b2b
- Production:
https://api.doitpay.co/auth/v1.0/access-token/b2b
- Service Code:
73
Header :
Parameter | Tipe | Mandatori | Keterangan | Contoh |
---|---|---|---|---|
Content-Type | string | ✓ | String yang menunjukkan jenis media. | application/json |
X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
X-SIGNATURE | string | ✓ | Pemeriksaan Non-Repudiasi & Integritas X-Signature dengan algoritma asimetris. Lihat formula di bawah ini. | |
X-CLIENT-KEY | string | ✓ | Nilai Client Key yg dapat dilihat pada halaman API Key di Menu Setting | DXXXX |
Formula X-SIGNATURE:
stringToSign = Client Key + ":" + Timestamp
signature = SHA256withRSA(Private_Key, stringToSign)
body :
Parameter | Tipe | Mandatori | Keterangan | Contoh |
---|---|---|---|---|
grantType | string | ✓ | The value is client_credentials | "client_credentials" |
response:
Code | Message | Keterangan |
---|---|---|
2007300 | Successful | Berhasil di proses dan mendapatkan accessToken . |
4007301 | Invalid Field Format {grantType} | Nilai value yang tidak tepat untuk parameter grantType . |
4007302 | Invalid Mandatory Field {grantType} | Parameter grantType tidak ada. |
4007302 | Invalid Client Key or Timestamp or Signature | Terjadi kesalahan di antara Client Key, Timestamp atau Signature. |
4017300 | Invalid Client Key | Kekeliruan pada Client Key. |
4017300 | Invalid Signature | Kekeliruan pada Signature. |
Setelah Anda mendapatkan Bearer Token, gunakan dengan memasukkannya ke dalam header otorisasi permintaan HTTP Anda. Headernya akan terlihat seperti ini: Authorization: Bearer ZGMyNDA3NWQtNmM4Ny00NGNiLTQ2NTAtMDhkYWMxNTAzNzY0
Ganti token dalam contoh dengan Bearer Token Anda yang sebenarnya.
Signature
Mekanisme keamanan signature untuk API Pembayaran menawarkan dua pendekatan berbeda. Pertama, memanfaatkan fungsi kriptografi HMAC_512 simetris, di mana token akses merupakan bagian integral dari proses. Sebagai alternatif, fungsi kriptografi SHA256withRSA asimetris dapat digunakan, berfungsi secara independen dari token akses.
Disarankan bagi klien untuk mengadopsi fungsi kriptografi HMAC_512 simetris bersama dengan token akses saat membuat signature untuk API Metode Pembayaran. Metode ini memastikan pendekatan yang kuat dan aman.
Sebaliknya, Notify Payment API akan secara eksklusif memanfaatkan fungsi kriptografi SHA256withRSA asimetris, memastikan tindakan keamanan spesifik dan disesuaikan yang diterapkan oleh Doitpay.
Penting untuk dicatat bahwa spesifikasi ini selaras dengan dokumen SNAP API Pembayaran yang disediakan oleh Bank Indonesia, yang dapat diakses di sini.
SNAP API Doitpay bergantung pada penggunaan kunci API untuk otentikasi permintaan, sebuah aspek penting yang memerlukan perhatian khusus karena berbagai fitur keamanannya. Memastikan keamanan maksimal dari kunci API ini adalah hal yang terpenting.
Dalam proses transaksi yang melibatkan API Doitpay, mitra kami wajib memberikan Kunci API sebagai kredensial yang ditentukan, yang disediakan oleh Doitpay.
Kunci ini berfungsi sebagai alat untuk mengautentikasi transaksi melalui metode autentikasi pembawa, menggunakan header -H "Authorization: Bearer "
. Penting untuk diperhatikan bahwa semua permintaan API harus dilakukan melalui HTTPS untuk menjamin saluran komunikasi yang aman.
Selain itu, segala upaya untuk mengakses API tanpa autentikasi yang tepat akan mengakibatkan kegagalan, hal ini menekankan pentingnya mematuhi protokol autentikasi yang ada.
Kerja sama Anda dalam mengikuti langkah-langkah keamanan ini sangat kami hargai, karena hal ini memastikan lingkungan yang kuat dan aman untuk transaksi API.
Symmetric
Formula:
stringToSign = HttpMethod + “:” + Endpoint + “:” + AccessToken + “:” + LowerCase(HexEncode(SHA-256(Minify(RequestBody)))) + “:” + Timestamp
hash = HMAC_SHA512(stringToSign, secretKey)
signature = Base64(hash)
Penjelasan:
Buatlah sebuah variabel stringToSign
.
-
HttpMethod
adalah string nama metode yang sedang digunakan. Bisa sajaPOST
,PUT
, atauDELETE
. -
Endpoint
adalah relative URL atau full path URL yang mana tanpa host atau domainnya. -
AccessToken
adalah nilai token yang Anda dapatkan dari API Get Token. -
RequestBody
adalah payload yang ingin Anda kirim. -
Timestamp
menggunakan ISO-8601. -
secretKey
adalah nilai pada client key dari api-key menu.
Hash stringToSign
menggunakan HMAC_SHA512
cryptographic dan secret key. Kemudian, encode dengan Base 64.
Masukkan nilainya ke X-SIGNATURE
.
Asymmetric
Formula:
stringToSign = ClientKey + “|” + Timestamp
hash = SHA256withRSA(stringToSign, privateKey)
signature = Base64(hash)
Penjelasan:
Buatlah sebuah variabel stringToSign
.
ClientKey
adalah nilai pada client key dari api-key menu.Timestamp
menggunakan ISO-8601.privateKey
adalah kunci RSA yang Anda buat. Lihat Public Key dan Private Key untuk melihat cara menghasilkannya.
Hash stringToSign
menggunakan SHA256withRSA
cryptographic dan secret key (nama lain saat ini adalah API key). Kemudian, encode dengan Base 64.
Masukkan nilainya ke X-SIGNATURE
.