> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Autentikasi Pengguna Akhir: Masuk, Passkey, dan Sesi

> Tambahkan login pengguna akhir di Didit dengan halaman hosted, passkey, kode, login sosial, dan SSO, terhubung ke verifikasi identitas.

> [!WARNING]
>
> Authentication masih baru. Didit mengaktifkan produk ini untuk aplikasi Anda. Sampai saat itu, setiap rute runtime untuk aplikasi tersebut mengembalikan `404`. Paket SDK Authentication belum dipublikasikan, jadi gunakan alur yang di-hosting dan kontrak HTTP di halaman-halaman ini.

Authentication memungkinkan pelanggan Anda masuk ke **aplikasi Anda**. Fitur ini terpisah dari masuk ke konsol Didit atau membuat akun pengembang Didit. Fitur ini juga terpisah dari verifikasi identitas seseorang.

Gunakan Authentication sendiri, atau kombinasikan dengan Verifikasi Identitas dan Pemantauan Transaksi. Masuk tidak menyetujui verifikasi dan tidak mengotorisasi pembayaran. Backend Anda membuat keputusan tersebut berdasarkan hasil dari masing-masing produk.

## Cara kerjanya

Setiap aplikasi memiliki origin untuk masuk dan penerbit token sendiri. Aplikasi produksi dan sandbox terpisah: keduanya memiliki origin, pengaturan, dan identitas yang berbeda.

| Item | Nilai |
| - | - |
| Origin default | `https://<slug>.auth.didit.me` untuk aplikasi produksi, `https://<slug>.sandbox.auth.didit.me` untuk aplikasi sandbox. Konsol menampilkan origin Anda. Domain kustom yang sudah diverifikasi dapat menggantikannya. |
| Halaman yang di-hosting | `/sign-in`, `/magic`, `/invite`, dan `/reset` di origin tersebut. |
| API runtime | Origin yang sama, misalnya `POST {origin}/token/` dan `GET {origin}/session/`. |
| Penerbit | Origin itu sendiri. Discovery berada di `{origin}/.well-known/openid-configuration`. |
| Kunci yang dapat dipublikasikan | `pk_live_...` atau `pk_test_...`. Kunci ini mengidentifikasi aplikasi dan bukan rahasia. |

Alurnya adalah kode otorisasi OAuth 2.0 dengan PKCE (hanya `S256`):

1. Aplikasi Anda membuka `{origin}/sign-in` dengan `redirect_uri`, `state`, `code_challenge`, dan `code_challenge_method=S256`.
2. Halaman yang di-hosting membuat orang tersebut masuk atau mendaftarkannya dengan metode yang Anda aktifkan, termasuk faktor kedua jika diwajibkan.
3. Browser kembali ke `redirect_uri` Anda dengan `code` dan `state`.
4. Aplikasi Anda menukar kode di `POST {origin}/token/` dengan token akses, token ID, dan token refresh.

Lihat [token dan JWKS](https://docs.didit.me/id/authentication/tokens-and-jwks.md) untuk kontrak token dan [metode masuk](https://docs.didit.me/id/authentication/sign-in-methods.md) untuk setiap metode.

## Pilih platform Anda

> [card] [JavaScript](https://docs.didit.me/id/authentication/quickstarts/javascript.md)
>
> Masuk yang di-hosting, callback, sesi, dan logout.

> [card] [React](https://docs.didit.me/id/authentication/quickstarts/react.md)
>
> State klien dan tampilan aplikasi yang dilindungi.

> [card] [Next.js](https://docs.didit.me/id/authentication/quickstarts/nextjs.md)
>
> Sesi server, rute callback, dan cookie.

> [card] [iOS](https://docs.didit.me/id/authentication/quickstarts/ios.md)
>
> Browser sistem dan penyimpanan token yang aman.

> [card] [Android](https://docs.didit.me/id/authentication/quickstarts/android.md)
>
> Otorisasi browser dan callback aplikasi.

> [card] [React Native](https://docs.didit.me/id/authentication/quickstarts/react-native.md)
>
> Persiapan wrapper autentikasi bawaan.

> [card] [Flutter](https://docs.didit.me/id/authentication/quickstarts/flutter.md)
>
> Persiapan wrapper autentikasi bawaan.

## Siapkan aplikasi Anda

1. Minta Didit mengaktifkan Authentication untuk aplikasi Anda. Uji coba di aplikasi sandbox terlebih dahulu.
2. Daftarkan [URL redirect](#url-redirect) Anda yang tepat (hingga 50) dan `allowed_origins` browser (hingga 50) yang memanggil API runtime.
3. Aktifkan [metode masuk](https://docs.didit.me/id/authentication/sign-in-methods.md) yang ingin Anda tawarkan. Didit ID Wallet selalu aktif.
4. Pilih pengaturan sesi dan kata sandi Anda (lihat di bawah).
5. Uji pendaftaran, masuk, lupa kata sandi, MFA, kedaluwarsa sesi, dan logout sebelum Anda beralih ke produksi.

Passkey terikat pada origin-nya. Jika nanti Anda mengaktifkan domain kustom, pengguna harus mendaftarkan ulang passkey mereka.

## URL redirect

Didit hanya mengembalikan pengguna ke alamat yang telah Anda daftarkan.
Daftarkan alamat Anda di konsol, di bawah **Authentication > Security and sessions > Redirect URLs and allowed origins**.

`redirect_uri` dalam permintaan masuk harus cocok dengan URL yang terdaftar karakter demi karakter: skema, host, port, path, dan query.
Port yang berbeda, garis miring di akhir, atau perbedaan huruf besar-kecil menghasilkan alamat yang berbeda.

| Aplikasi | Yang dapat Anda daftarkan |
| - | - |
| Produksi | URL `https://` |
| Sandbox | URL `https://`, dan URL `http://` di `localhost`, `127.0.0.1`, atau `[::1]` |

Wildcard, fragment, kredensial dalam URL, dan skema kustom ditolak.

Saat alamat tidak terdaftar, Didit tidak pernah mengarahkan ke alamat tersebut.
`{origin}/sign-in` mengembalikan `400` dengan halaman yang menjelaskan apa yang harus didaftarkan dan di mana, dan `POST {origin}/authorize/` mengembalikan `400 {"error": "invalid_redirect_uri"}`.

### Pengembangan lokal

Uji di mesin Anda sendiri dengan aplikasi sandbox Anda:

1. Daftarkan callback Anda beserta port-nya, misalnya `http://localhost:3000/auth/callback`.
2. Jika kode browser memanggil API runtime, misalnya untuk menukar kode di `POST {origin}/token/`, tambahkan origin ke **Allowed origins** juga: `http://localhost:3000`, tanpa path dan tanpa garis miring di akhir.
3. Mulai masuk di origin sandbox Anda, `https://<slug>.sandbox.auth.didit.me`, dengan kunci `pk_test_...` Anda.

`localhost`, `127.0.0.1`, dan `[::1]` adalah alamat yang berbeda, begitu juga setiap port. Daftarkan setiap alamat yang Anda gunakan.

Aplikasi produksi tidak pernah menerima `http://`.
Sebelum beralih ke produksi, daftarkan callback `https://` produksi Anda di aplikasi produksi Anda.

## Pengaturan aplikasi

Anda mengelola pengaturan ini di konsol, atau dengan sesi konsol yang berwenang dan memiliki `write:authentication`.

| Pengaturan | Nilai | Bawaan |
| - | - | - |
| `session_lifetime` | `86400`, `604800`, `2592000`, `7776000` detik | `2592000` (30 hari) |
| `idle_timeout` | `1800`, `7200`, `86400`, `604800` detik | `86400` (1 hari) |
| `multiple_sessions` | `false` mengeluarkan pengguna dari sesi lainnya setiap kali ia masuk kembali | `true` |
| `password_min_length` | `8`, `10`, `12`, `14` | `10` |
| `revoke_on_password_change` | Mengakhiri setiap sesi setelah pengaturan ulang kata sandi | `true` |
| `signup_policy` | `anyone`, `invited`, `allowed_domains` (dengan `allowed_email_domains`, hingga 100) | `anyone` |
| `allow_subaddresses` | Menerima `+` pada bagian lokal email | `false` |
| `post_logout_redirect_uri` | Tempat aplikasi Anda mengirim pengguna setelah keluar | Kosong |
| `mfa_policy` | `optional`, `everyone`, `organization_admins` | `organization_admins` |
| `sign_in_ui` | `hosted` atau `own` | `hosted` |

## Pertahankan satu orang di seluruh produk

Setiap identitas memiliki nilai `vendor_data`. Nilai ini adalah `external_id` yang Anda berikan saat [mengimpor](https://docs.didit.me/id/authentication/migration.md) orang tersebut, atau ID identitas Didit jika tidak. Nilai ini muncul di token akses, ID token, dan `GET session/`.

Gunakan nilai yang sama sebagai `vendor_data` saat Anda membuat sesi verifikasi dan mengirimkan transaksi. Dengan begitu, event autentikasi masuk ke orang yang sama di konsol seperti verifikasi dan transaksinya. Lihat [event dan webhook](https://docs.didit.me/id/authentication/events-and-webhooks.md).

Dapatkan `vendor_data` di backend Anda dari token yang sudah diverifikasi, jangan pernah dari kolom browser yang belum diperiksa.

| Kombinasi produk | Yang Anda bangun |
| - | - |
| Autentikasi | Masuk, memvalidasi sesi, dan keluar. |
| Verifikasi identitas + Autentikasi | Memulai verifikasi setelah pengguna masuk jika kebijakan Anda mewajibkannya, dengan `vendor_data` dari token. |
| Pemantauan transaksi + Autentikasi | Mengirimkan transaksi untuk `vendor_data` pengguna yang sedang masuk. Event masuk sampai ke linimasa dan aturan untuk orang yang sama. |
| Ketiganya | Satu `vendor_data` per orang. Tangani keputusan setiap produk secara terpisah. |

Gunakan [instruksi integrasi bersama](https://docs.didit.me/id/integration/integration-prompt.md) untuk kombinasi apa pun. Baca [perlindungan bot](https://docs.didit.me/id/authentication/bot-protection.md) untuk kebijakan yang berjalan saat masuk.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.