Skip to content

Sebelum produksi ​

Konfigurasi ​

  • [ ] Alamat callback dan sesudah logout memakai https dan sama persis dengan di konsol.
  • [ ] Client secret dan secret webhook hanya ada di konfigurasi server, bukan di repositori, kode browser, log, atau chat.
  • [ ] Jam server tersinkron (selisih di bawah 1 menit).
  • [ ] Server bisa membuka issuer lewat HTTPS dengan pemeriksaan sertifikat aktif (jangan pernah dimatikan).

Login ​

  • [ ] state, nonce, dan PKCE S256 dibuat acak per login dan diperiksa saat callback.
  • [ ] ID token diverifikasi: tanda tangan RS256, iss, aud, exp, nonce.
  • [ ] Akun lokal ditautkan lewat sub; tautan lewat email hanya bila email_verified.
  • [ ] Tujuan sesudah login (next, returnTo) hanya boleh path di aplikasi sendiri, supaya tidak bisa dipakai mengalihkan pengguna ke situs lain.
  • [ ] Galat callback dipercaya hanya bila state cocok; access_denied menampilkan pesan, bukan mengulang login.
  • [ ] Sesi aplikasi dibuat baru sesudah login (ID sesi diganti), supaya ID sesi yang ditanam orang lain tidak berguna.

Logout dan sesi ​

  • [ ] Logout menghapus sesi lokal lalu mengalihkan ke end_session dengan id_token_hint.
  • [ ] Back-channel logout dipasang (aplikasi dengan alamat publik), atau login senyap berkala (aplikasi tanpa alamat publik), supaya logout di aplikasi lain ikut terasa.

Webhook (bila dipakai) ​

  • [ ] Tanda tangan dihitung atas body mentah dan dibandingkan waktu-konstan.
  • [ ] Timestamp lebih dari 5 menit ditolak.
  • [ ] id event yang sudah diproses diabaikan, tetap dijawab 2xx.
  • [ ] Uji kirim di konsol menunjukkan Terkirim.

Uji akhir ​

  1. Login, lalu buka aplikasi organisasi yang lain: masuk tanpa password.
  2. Logout di aplikasi lain: aplikasi ini ikut keluar.
  3. Admin menonaktifkan akun uji: login ditolak, sesi berakhir (seketika lewat webhook, atau pada pemeriksaan berikutnya).
  4. Admin membatasi akses aplikasi ke pengguna lain: akun uji ditolak dengan pesan akses.