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

# Penyiapan integrasi Okta

> Hubungkan Okta ke Living Security untuk siklus hidup pengguna, autentikasi, MFA, dan aktivitas administratif.

export const PublicIntegrationNextSteps = () => <>
    <hr />
    <h2>Sumber daya terkait</h2>
    <ul>
      <li>
        <a href="/id/signals/data-sources">Pelajari bagaimana data integrasi menjadi sinyal Human Risk Management</a>
      </li>
      <li>
        <a href="https://www.livingsecurity.com/integrations">Jelajahi integrasi Living Security</a>
      </li>
      <li>
        <a href="https://app.livingsecurity.ai/">Buka Living Security Platform</a>
      </li>
      <li>
        <a href="https://www.livingsecurity.com/request-demo/">Minta demo Living Security</a>
      </li>
    </ul>
  </>;

export const EgressIpSafelist = ({system}) => <Note>
    <strong>Tambahkan keempat alamat IP egress sinkronisasi Living Security</strong> ke daftar izin di{' '}
    {system}. Masukkan setiap alamat sebagai satu host dengan <code>/32</code> jika {system} mengharapkan notasi CIDR:
    <br />
    <code>52.34.139.153/32</code>, <code>54.69.127.183/32</code>, <code>44.247.133.183/32</code>,{' '}
    <code>52.26.211.56/32</code>
    <br />
    <br />
    Lalu lintas dapat keluar dari salah satu dari keempat alamat tersebut, sehingga jika hanya sebagian yang dimasukkan ke daftar izin, sinkronisasi akan gagal secara berkala. Keempat alamat ini sama di setiap wilayah Living Security. Lihat{' '}
    <a href="/id/integrations/managing/egress-ip-addresses">
      Mengonfigurasi Alamat IP Egress Integrasi
    </a>{' '}
    untuk daftar lengkap, kebijakan perubahan, dan pemecahan masalah.
  </Note>;

export const ConnectInPlatform = ({tile, children}) => <Step title="Masukkan kredensial di Living Security Platform">
    <p>
      Dilakukan oleh pihak yang memiliki akses ke Living Security — pemilik program, atau admin
      sistem jika yang bersangkutan telah diundang (penyiapan terdelegasi).
    </p>
    <ol>
      <li>
        Buka <strong>Pengaturan → Integrasi → Katalog</strong>, temukan kartu{' '}
        <strong>{tile}</strong>, lalu klik <strong>Hubungkan</strong>.
      </li>
      <li>
        Isi kolom di bawah ini, lalu klik <strong>Hubungkan</strong>.
      </li>
    </ol>
    {children}
  </Step>;

## Ikhtisar

Okta dapat menyumbangkan data ternormalisasi tentang siklus hidup pengguna, autentikasi, MFA, dan aktivitas administratif. Contoh yang telah ditinjau meliputi:

* `account.locked` — akun terkunci
* `mfa.factor.activated` — mengaktifkan faktor MFA tambahan
* `auth.login.failed` — gagal masuk

Kedua metode koneksi membaca dua aliran yang sama — direktori pengguna (`/api/v1/users`) dan log sistem (`/api/v1/logs`). Lihat [bagaimana data integrasi menjadi sinyal](/id/signals/data-sources).

## Pilih metode koneksi

| | **Okta (SSWS)** | **Okta (OAuth 2.0)** |
| - | - | - |
| Kredensial | Token API yang Anda buat di Admin Console | ID klien dan JWK privat yang Anda buat dan daftarkan |
| Penyiapan | Tiga langkah, tanpa perlu membuat materi kunci | Sembilan langkah, termasuk pasangan kunci RSA |
| Peran administrator yang diperlukan | Administrator hanya-baca, ditetapkan kepada pemilik token | Administrator hanya-baca, ditetapkan kepada aplikasi |
| Masa berlaku token | Dinonaktifkan setelah 30 hari tanpa penggunaan | Tidak kedaluwarsa; rotasi pasangan kunci menjadi tanggung jawab Anda |
| Gunakan ketika | Ini adalah jalur yang direkomendasikan bagi sebagian besar organisasi | Kebijakan keamanan Anda melarang token API berumur panjang |

Kedua metode memerlukan akses yang sama, sehingga pilihan ini menyangkut penanganan kredensial, bukan apa yang dapat dibaca oleh platform.

***

## Opsi A — Token API (SSWS)

*Direkomendasikan.*

### Yang dibutuhkan Living Security

| Kredensial | Deskripsi |
| - | - |
| **Kunci API** | Token API Okta. Dialog koneksi memberi label **Kunci API** pada kolom ini |
| **Subdomain tenant** | `<tenant>` dalam `<tenant>.okta.com` — hanya subdomain, bukan URL lengkap |

### Prasyarat

* Anda harus menjadi **Super Administrator** Okta untuk membuat pengguna akun layanan, menetapkan peran administrator, dan membuat token API.

<Steps>
  <Step title="Buat pengguna sebagai pemilik token">
    Token API Okta membawa izin dari pengguna yang membuatnya, dan token tersebut berhenti berfungsi jika pengguna itu dinonaktifkan. Buatlah akun layanan khusus dan jangan menggunakan akun admin pribadi, agar koneksi tetap berfungsi ketika terjadi pergantian staf.

    1. Di Admin Console, buka **Directory** → **People**.
    2. Klik **Add person** dan buat pengguna seperti `svc-livingsecurity@yourcompany.com`.
    3. Aktifkan akun tersebut.
  </Step>

  <Step title="Tetapkan peran administrator hanya-baca">
    Platform hanya membaca data. Memberikan akses lebih dari akses baca akan memberi token izin yang tidak pernah digunakan.

    1. Buka **Keamanan** → **Administrators**.
    2. Klik **Add administrator** dan pilih pengguna dari langkah sebelumnya.
    3. Tetapkan peran **Read-only Administrator**.
    4. Simpan.

    <Note>
      Tanpa peran administrator, panggilan ke Okta Management API berhasil dengan `200 OK` dan mengembalikan daftar kosong. Tidak ada `403` yang memberi tahu Anda bahwa peran tersebut tidak ada — aliran data hanya tetap kosong.
    </Note>
  </Step>

  <Step title="Buat token API">
    1. Masuk ke Admin Console **sebagai pengguna akun layanan** dari langkah 1. Token mewarisi akun mana pun yang membuatnya.
    2. Buka **Keamanan** → **API** dan buka tab **Tokens**.
    3. Klik **Create token**, beri nama seperti `Living Security Platform`, lalu klik **Create token**.
    4. Salin nilai token sekarang — Okta hanya menampilkannya sekali dan tidak akan menampilkannya lagi.

    <Warning>
      Okta menonaktifkan token API setelah **30 hari tanpa penggunaan**. Sinkronisasi dalam integrasi ini berjalan setidaknya sekali sehari, sehingga koneksi yang aktif menjaga tokennya tetap hidup. Koneksi yang dijeda selama sebulan memerlukan token baru.
    </Warning>

    <EgressIpSafelist system="Okta" />

    <Note>
      Daftar alamat di atas hanya relevan jika org Okta Anda membatasi akses API berdasarkan **network zone**. Sebagian besar org tidak melakukannya.
    </Note>
  </Step>

  <Step title="Temukan subdomain tenant Anda">
    URL Admin Console Anda terlihat seperti `https://acme-admin.okta.com`. Subdomain tenant adalah `acme` — tanpa akhiran `-admin`, tanpa `.okta.com`, dan tanpa `https://`.
  </Step>

  <ConnectInPlatform tile="Okta (SSWS)">
    | Kolom | Nilai |
    | - | - |
    | **Kunci API** | Token API dari langkah 3 |
    | **Subdomain tenant** | Subdomain dari langkah 4 (mis. `acme`) |
  </ConnectInPlatform>
</Steps>

Sekarang Anda telah terhubung ke Okta (SSWS).

### Pemecahan masalah

<AccordionGroup>
  <Accordion title="401 Unauthorized">
    Token tidak valid, telah dicabut, atau telah dinonaktifkan setelah 30 hari tidak aktif. Buat token baru sebagai pengguna akun layanan dan masukkan kembali pada koneksi.
  </Accordion>

  <Accordion title="Terhubung, tetapi setiap aliran kosong">
    Pemilik token tidak memiliki peran administrator. Tetapkan **Read-only Administrator** kepada akun layanan (langkah 2) — API mengembalikan `200 OK` dengan daftar kosong, bukan kesalahan, ketika peran tersebut tidak ada.
  </Accordion>

  <Accordion title="Sinkronisasi gagal setelah pergantian staf">
    Token berhenti berfungsi jika pengguna yang membuatnya dinonaktifkan. Inilah sebabnya token sebaiknya dimiliki oleh akun layanan, bukan oleh perorangan.
  </Accordion>
</AccordionGroup>

***

## Opsi B — Aplikasi layanan OAuth 2.0

Gunakan metode ini ketika kebijakan keamanan Anda tidak mengizinkan token API berumur panjang. Metode ini menggantikan token dengan ID klien dan pasangan kunci RSA milik Anda. Di platform, ini adalah tile **Okta (OAuth 2.0)**, di bawah **Pengaturan → Integrasi → Katalog**.

Untuk melakukan autentikasi dengan Okta menggunakan Client Credentials, Anda memerlukan hal berikut:

1. **ID Klien** - Pengenal unik untuk aplikasi Okta API Services Anda.
2. **Private Key (JWK)** - Kunci privat RSA dalam format JSON Web Key, yang kunci publiknya didaftarkan di aplikasi Okta Anda.
3. **Okta Domain** - Hanya subdomain tenant Okta Anda (mis. `dev-12345678`), bukan nama host lengkap.
4. **Scopes** - Daftar scope Okta Management API yang dipisahkan spasi (mis. `okta.users.read okta.logs.read`).

Panduan ini akan membantu Anda membuat aplikasi API Services di Okta dengan autentikasi `private_key_jwt`.

### Prasyarat:

* Anda harus memiliki akun Okta. Daftar untuk akun developer gratis di [developer.okta.com](https://developer.okta.com/signup/).

#### Langkah 1: Membuat aplikasi Okta API Services Anda

1. Masuk ke [Okta Admin Console](https://login.okta.com/) Anda.
2. Di bilah sisi kiri, buka **Applications** > **Applications**.
3. Klik **Create App Integration**.
4. Pilih **API Services** sebagai metode masuk dan klik **Selanjutnya**.

<img src="https://raw.githubusercontent.com/NangoHQ/nango/master/docs/api-integrations/okta-cc/select-api-service.png" style={{maxWidth: "550px"}} />

5. Beri nama pada aplikasi Anda dan klik **Simpan**.
6. Pada tab **General** aplikasi, temukan **ID Klien** Anda — Anda akan membutuhkannya pada langkah terakhir.
7. Atur Client authentication ke **Public key / Private key**. Scope `okta.*` hanya didukung dengan metode autentikasi ini.

<img src="https://raw.githubusercontent.com/NangoHQ/nango/master/docs/api-integrations/okta-cc/select-public-private-key.png" style={{maxWidth: "550px"}} />

8. Nonaktifkan **Proof of possession (DPoP)** — fitur ini tidak didukung.

<img src="https://raw.githubusercontent.com/NangoHQ/nango/master/docs/api-integrations/okta-cc/disable-dpop.png" style={{maxWidth: "550px"}} />

<Note>
  Aplikasi harus dibuat sebagai **API Services**.
</Note>

#### Langkah 2: Membuat dan mendaftarkan pasangan kunci RSA Anda

##### Gunakan generator kunci Okta

Okta dapat membuat pasangan kunci RSA untuk Anda langsung di Admin Console:

1. Di Admin Console, buka aplikasi API Services Anda.
2. Buka tab **General** dan gulir ke bagian **PUBLIC KEYS**.
3. Klik **Add Key**, lalu pilih **Generate new key**.
4. Klik **Simpan** — Okta membuat pasangan kunci dan menampilkan **Private Key (JWK)** satu kali.
5. Segera salin dan simpan JSON kunci privat — kunci ini tidak akan ditampilkan lagi.

<img src="https://raw.githubusercontent.com/NangoHQ/nango/master/docs/api-integrations/okta-cc/create-public-key.png" style={{maxWidth: "550px"}} />

6. Kunci publik otomatis didaftarkan ke aplikasi Anda.

<Note>
  Salin JWK privat sebelum menutup dialog. Tempelkan ke kolom **Private Key** di Living Security Platform pada langkah terakhir.
</Note>

##### Buat kunci Anda sendiri

Okta menggunakan `private_key_jwt` untuk aplikasi API Services. Anda membuat pasangan kunci RSA, mendaftarkan JWK **publik** ke Okta, dan memberikan JWK **privat** ke Living Security Platform.

**Buat JWK privat** menggunakan skrip Node.js berikut (memerlukan Node.js 18+):

```javascript theme={null}
const { generateKeyPairSync } = require('crypto');
const { privateKey, publicKey } = generateKeyPairSync('rsa', { modulusLength: 2048 });

const privateJwk = privateKey.export({ format: 'jwk' });
const publicJwk  = publicKey.export({ format: 'jwk' });

// Assign a kid — must match between private and public JWK
const kid = require('crypto').randomUUID();
privateJwk.kid = kid;
publicJwk.kid  = kid;

console.log('=== PUBLIC JWK (upload to Okta) ===');
console.log(JSON.stringify(publicJwk, null, 2));
console.log('\n=== PRIVATE JWK (paste into the Living Security Platform) ===');
console.log(JSON.stringify(privateJwk));
```

**Daftarkan JWK publik di Okta:**

1. Di Admin Console, buka aplikasi API Services Anda.
2. Buka tab **General** dan gulir ke bagian **PUBLIC KEYS**.
3. Klik **Add Key**, tempelkan **JSON JWK publik** hasil keluaran skrip di atas, lalu klik **Simpan**.

<Note>
  JWK privat adalah yang Anda tempelkan ke Living Security Platform. JWK ini mencakup seluruh materi kunci (`d`, `p`, `q`, `dp`, `dq`, `qi`) dan `kid`. Jaga kerahasiaannya.
</Note>

#### Langkah 3: Menemukan Okta Domain Anda

Masukkan hanya subdomain tenant Okta Anda — bagian sebelum `.okta.com`.

* Di Admin Console, bilah alamat browser Anda akan menampilkan URL seperti `https://dev-12345678-admin.okta.com`.
* **Okta Domain** Anda hanyalah subdomain (mis., `dev-12345678`), bukan `dev-12345678.okta.com`.
* Sebagai alternatif, buka **Pengaturan** > **Account** di Admin Console untuk menemukan domain Okta Anda, lalu gunakan bagian subdomainnya.

#### Langkah 4: Berikan scope API kepada aplikasi Anda

Okta mensyaratkan setidaknya satu scope dalam setiap permintaan token. Sebelum aplikasi Anda dapat meminta scope tertentu, scope tersebut harus diberikan:

1. Di Admin Console, buka **Applications** > **Applications** dan buka aplikasi Anda.
2. Klik tab **Okta API Scopes**.
3. Berikan scope yang dibutuhkan integrasi Anda: `okta.users.read` dan `okta.logs.read`.

Daftar lengkap scope yang tersedia ada di [referensi Okta Management API](https://developer.okta.com/docs/api/oauth2/#okta-admin-management).

#### Langkah 5: Tetapkan peran admin kepada aplikasi Anda

Memberikan scope saja tidak cukup — endpoint Okta Management API (mis. `/api/v1/users`) secara diam-diam mengembalikan respons `200 []` kosong jika aplikasi Anda tidak memiliki peran admin. Anda harus menetapkan setidaknya **Read-Only Administrator**:

1. Di Admin Console, buka **Keamanan** > **Administrators** (atau buka **Applications** > **Applications** > aplikasi Anda > **Admin roles**).
2. Klik **Add administrator assignment** dan pilih aplikasi API Services Anda.

<img src="https://raw.githubusercontent.com/NangoHQ/nango/master/docs/api-integrations/okta-cc/admin-role-dropdown.png" style={{maxWidth: "550px"}} />

3. Tetapkan peran **Read-Only Administrator** (atau yang lebih tinggi, tergantung pada scope yang Anda butuhkan).
4. Klik **Simpan**.

<img src="https://raw.githubusercontent.com/NangoHQ/nango/master/docs/api-integrations/okta-cc/add-admin-role.png" style={{maxWidth: "550px"}} />

<Note>
  Tanpa peran admin, panggilan API berhasil dengan `200 OK` tetapi mengembalikan hasil kosong, dan tidak ada kesalahan `403` yang menunjukkan masalahnya.
</Note>

#### Langkah 6: Masukkan kredensial di Living Security Platform

Setelah Anda memiliki **ID Klien**, **Private Key (JWK)**, **Okta Domain**, dan **Scopes**:

1. Buka formulir tempat Anda perlu melakukan autentikasi dengan Okta (Client Credentials).
2. Masukkan **ID Klien** Anda.
3. Tempelkan **Private Key (JWK)** Anda — objek JSON lengkap dari skrip di atas (satu baris atau terformat).
4. Masukkan **Okta Domain** Anda hanya sebagai subdomain tenant (mis., `dev-12345678`).
5. Masukkan **Scopes** sebagai daftar yang dipisahkan spasi (mis., `okta.users.read okta.logs.read`).
6. Kirim formulir, dan Anda akan berhasil terautentikasi.

Sekarang Anda telah terhubung ke Okta (Client Credentials).

***

<Note>Sebagian dokumentasi ini diadaptasi dari [Nango](https://nango.dev/docs/), digunakan berdasarkan [Elastic License 2.0](https://github.com/NangoHQ/nango?tab=License-1-ov-file#readme).</Note>

<PublicIntegrationNextSteps />


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