Autentikasi

Setiap request Create Session wajib menyertakan signature HMAC-SHA256 di dalam JSON body. Signature dibuat di backend partner menggunakan secretKey partner.

Format Canonical String

partnerId | user_id | email | name | company_id | candidate_ids_csv

Field yang Masuk Signature

FieldSumberWajib
partnerIdURL pathYa
user_iduser.user_idYa
emailuser.emailYa
nameuser.nameYa
company_iduser.company.company_idTidak (empty string jika tidak ada)
candidate_ids_csvconcat candidate_id dari user.candidates, dipisah komaTidak (empty string jika tidak ada)
⚠️

Field di payload yang TIDAK masuk canonical string: username, company.name, company.email, candidates[].nama, candidates[].email. Jangan masukkan field-field tersebut ke canonical string.

Aturan

  • Field digabung dengan | (pipe).
  • Beberapa candidate_id digabung dengan , (koma) mengikuti urutan payload.
  • Field opsional yang kosong tetap berupa empty string (jangan dihilangkan).
  • Format output: hexadecimal lowercase.
  • Tidak boleh ada spasi di awal/akhir, newline, atau karakter tersembunyi.

Aturan Keamanan

  • secretKey hanya ada di backend. Jangan pernah ekspos di frontend, mobile, atau repo publik.
  • Buat signature untuk setiap request (jangan di-cache).
  • HTTPS wajib.

Test Vectors

Gunakan vektor di bawah untuk memverifikasi implementasi Anda terhadap aturan PsikologieHub sebelum go-live. Nilai memakai secretKey dummy.

Test Vector 1 - Payload Lengkap dengan Satu Kandidat

  • secretKey: demo-secret-key-123
  • partnerId: psikologihub-1024
Payload
{
  "user": {
    "user_id": "ext-user-001",
    "email": "[email protected]",
    "name": "John Doe",
    "company": { "company_id": "comp-001" },
    "candidates": [
      { "candidate_id": "cand-001" }
    ]
  }
}
Canonical string
psikologihub-1024|ext-user-001|[email protected]|John Doe|comp-001|cand-001
Expected signature
ac689886217ce7c1002102d1327dfe741ecfeb3912426eac1777e80db427a1c2

Test Vector 2 - Tanpa Company dan Tanpa Candidates

  • secretKey: demo-secret-key-123
  • partnerId: psikologihub-1024
Payload
{
  "user": {
    "user_id": "USR-001",
    "email": "[email protected]",
    "name": "John Doe"
  }
}
Canonical string
psikologihub-1024|USR-001|[email protected]|John Doe||
Expected signature
d8bb6246a84c56073db8ca8336e290b27c4646a76d2df8b4d44012af690c432b

Contoh Generate Signature

function generateSignature(
    string $partnerId,
    string $userId,
    string $userEmail,
    string $userName,
    string $companyId,
    string $candidateIdsCsv,
    string $secretKey
): string {
    $canonical = implode('|', [
        $partnerId, $userId, $userEmail, $userName, $companyId, $candidateIdsCsv,
    ]);
    return hash_hmac('sha256', $canonical, $secretKey);
}