Skip to main content

QRAuth

QRAuth adalah metode otentikasi yang menggunakan QR Code. Metode ini memungkinkan pengguna untuk melakukan login ke berbagai layanan secara cepat dan mudah dengan cukup memindai QR Code yang ditampilkan di layar layanan menggunakan aplikasi NU Online.

API Endpoint

info

Semua endpoint API berikut dapat diakses menggunakan base URL https://api.nu.id, NU.ID menggunakan versioning API dengan format v{version-number}. Saat ini versi API yang digunakan adalah v1. Sehingga base URL untuk API adalah https://api.nu.id/v1. Contoh untuk mengakses /qrAuth adalah https://api.nu.id/v1/qrAuth.

EndpointDeskripsi
/qrAuthMendapatkan ID sesi untuk QR-code authentication.
/authenticateMendapatkan access token dan refresh token menggunakan kunci privat pengguna

QR Auth

Endpoint: /qrAuth

Endpoint ini digunakan untuk mendapatkan ID sesi, biasanya digunakan untuk mengotentikasi pengguna menggunakan kode QR.

Method: POST

Parameter:

ParameterDeskripsiDiperlukan
clientIdID aplikasi clientYa
nonceString acak untuk menjaga dari penggunaan dobelYa
returnQrCodeJika bernilai true, maka endpoint akan mengembalikan QR code dalam bentuk base64Opsional, default: false

Respons:

Contoh respon sukses:

{
"clientId": "client-1",
"sessionId": "nu.id:1:client-1:YgWIexz3YJwtqD8WQcoBdkDkGsNo5obz:1678550057",
"expires": 1678550057
}

Contoh respon sukses apabila parameter returnQrCode diset true:

{
"clientId": "client-1",
"sessionId": "nu.id:1:client-1:YgWIexz3YJwtqD8WQcoBdkDkGsNo5obz:1678550057",
"expires": 1678550057,
"qrcode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA....."
}

Authenticate

Endpoint: /authenticate

Endpoint ini digunakan untuk mengotentikasi pengguna menggunakan ID sesi dan tanda tangan digital pengguna. ID sesi adalah pengenal unik yang dihasilkan oleh endpoint API qrAuth.

Tanda tangan digital adalah tanda tangan yang dihasilkan oleh pengguna dengan menggunakan kunci pribadi dan ID sesi. Algoritma yang digunakan adalah ECDSA dengan kurva eliptik secp256k1. Untuk demo atau uji coba silahkan gunakan tool jsrsasign.

Berikut beberapa library yg bisa digunakan untuk menghasilkan tanda tangan digital berbasis ECDSA dengan kurva eliptik secp256k1:

Bahasa PemrogramanNama LibraryLink Download
C/C++OpenSSLhttps://www.openssl.org/
PythonPyECChttps://pypi.org/project/pyecc/
Java / C#Bouncy Castlehttps://www.bouncycastle.org/latest_releases.html
C++Botanhttps://botan.randombit.net/download.html
GolangGolang crypto/ecdsahttps://golang.org/pkg/crypto/ecdsa/
Rubyopenssl-ecdsahttps://github.com/DavidEGrayson/ruby_ecdsa
Node.jselliptichttps://www.npmjs.com/package/elliptic
RustRust-secp256k1https://github.com/RustCrypto/signatures

Endpoint ini akan mengembalikan token akses (accessToken) dan token penyegar (refreshToken) seperti yang didapatkan dari endpoint standar OAuth2.

Method: POST

Parameter:

ParameterDeskripsiDiperlukan
sessionIdID sesi pengguna yang akan di-signYa
signatureTanda tangan sessionId untuk mengotentikasi penggunaYa
publicKeypublicKey penggunaYa
nonceString acak yang dihasilkan oleh klien yang digunakan untuk memverifikasi responsYa

Kode Respons:

Kode StatusDeskripsi
200 OKOtentikasi Berhasil
400 Permintaan BurukParameter Tidak Valid atau ID Sesinya Tidak Ditemukan
405 Metode Tidak DiizinkanHanya permintaan POST yang diizinkan
500 Kesalahan Server InternalTerjadi kesalahan internal

Contoh Permintaan:

{
"sessionId": "nu.id:1:client-1:YgWIexz3YJwtqD8WQcoBdkDkGsNo5obz:1678550057",
"signature": "30460221008bf8d481763303cd260472f38fa2b3232a14f5cbea5414c54d42e8cc868a4c1b022100b5d7b8d09413649f5adf494c30488f7c0bf97b20de4f32c9065ae20f023fe50d",
"publicKey": "04c5e4e387c76ada73c8a7fc7c613aac1ed455a87e8bcd72b74506d3ad8dcef0c06a644449be6d7e529cc6b4f2abe2be65c5197aa40464756e78e3da78f2bb82a8",
"nonce": "XZSZPSA6yBVqfKj8fCgO2WZDamSQPPhS",
}

Contoh Respon Apabila Sukses:

{
    "data": {
        "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwibmFtZSI6ImFiYyIsImVtYWlsIjoiYWJjQGV4YW1wbGUuY29tIiwiaWF0IjoxNTE2MjM5MDIyfQ.zT8XV1DfUW9uUjwWcJ9sJxjyR40A1XHyxdKbPtLIFRE",
        "refreshToken": "nPhyyUSTo3C4UBStqr8SwJBrE1WzRH3vYaGFy6oRFD4SqXFXXI9nczjNKTL3lxZ3E1mBXEEtoSumMtT6m7LTJQJfYrgjtnm0OOo0DMpztB0THjTQE7AUJmQGTvQv3UcS6keJwxZRhufJTyQl5cNWtkUy7IFvYzH6lJvR0DrU"
    }
}