> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/on-premises/id/konfigurasi/overleaf-toolkit/authentication/oidc-authentication.md).

# Autentikasi OIDC

Fitur ini dikembangkan oleh [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Di sini kami menawarkan beberapa dokumen untuk konfigurasi Anda.

### Konfigurasi

Secara internal, modul OIDC Overleaf menggunakan [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) pustaka. Jika Anda mengalami masalah saat mengonfigurasi OpenID Connect, ada baiknya membaca README untuk `passport-openidconnect` untuk memahami konfigurasi yang diharapkannya.

Variabel lingkungan `EXTERNAL_AUTH` diperlukan untuk mengaktifkan modul autentikasi OIDC. Variabel lingkungan ini menentukan metode autentikasi eksternal mana yang diaktifkan. Nilai variabel ini adalah sebuah daftar. Jika daftar tersebut menyertakan `oidc` maka autentikasi OIDC akan diaktifkan.

Contohnya: `EXTERNAL_AUTH=ldap oidc`

Saat menggunakan metode autentikasi OIDC, pengguna dialihkan ke situs autentikasi Identity Provider (IdP). Jika IdP berhasil mengautentikasi pengguna, basis data pengguna Overleaf akan diperiksa untuk mencari catatan yang berisi sebuah `thirdPartyIdentifiers` bidang yang disusun sebagai berikut:

```
thirdPartyIdentifiers: [
  {
    externalUserId: "...",
    externalData: null,
    providerId: "..."
  }
]
```

Grup `externalUserId` harus cocok dengan ID pengguna di profil yang dikembalikan oleh server IdP (lihat `OVERLEAF_OIDC_USER_ID_FIELD` variabel lingkungan), dan `providerId` harus cocok dengan ID penyedia OIDC (lihat `OVERLEAF_OIDC_PROVIDER_ID`).

Jika tidak ditemukan catatan yang cocok, basis data akan dicari untuk pengguna dengan alamat email utama yang cocok dengan email di profil pengguna IdP:

* Jika pengguna seperti itu ditemukan, `thirdPartyIdentifiers` bidang tersebut diperbarui.
* Jika tidak ditemukan pengguna yang cocok dan pembuatan akun JIT tidak dinonaktifkan, pengguna baru dibuat dengan alamat email dan `thirdPartyIdentifiers` dari profil IdP.

Dalam kedua kasus, pengguna dikatakan 'terhubung' dengan pengguna OIDC eksternal. Pengguna dapat diputuskan tautannya dari penyedia OIDC pada `/user/settings` halaman.

#### Variabel Lingkungan

Nilai dari lima variabel wajib berikut dapat ditemukan menggunakan `.well-known/openid-configuration` endpoint dari OpenID Provider (OP) Anda.

* `OVERLEAF_OIDC_ISSUER` **(wajib)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(wajib)**
* `OVERLEAF_OIDC_TOKEN_URL` **(wajib)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(wajib)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(wajib)**

Nilai dari dua variabel wajib berikut akan disediakan oleh admin OP Anda

* `OVERLEAF_OIDC_CLIENT_ID` **(wajib)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(wajib)**
* `OVERLEAF_OIDC_SCOPE`
  * Default: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * ID arbitrer dari OP, defaultnya `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * Nama OP, digunakan di `Akun yang Terhubung` bagian dari `/user/settings` halaman, defaultnya `Penyedia OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Nama tampilan untuk layanan identitas, digunakan pada halaman login (default: `Masuk dengan $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Deskripsi OP, digunakan di `Akun yang Terhubung` bagian (default: `Masuk dengan $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Pelajari selengkapnya` URL dalam deskripsi OP, default: tidak ada `Pelajari selengkapnya` tautan di deskripsi.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Jangan tampilkan OP di `/user/settings` halaman, jika akun pengguna tidak terhubung dengan OP, default `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * Nilai atribut ini akan digunakan oleh Overleaf sebagai ID pengguna eksternal, defaultnya `id`. Nilai wajar lain yang mungkin adalah `email` dan `nama pengguna` (sesuai dengan `preferred_username` klaim OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Membatasi pembuatan akun Just-in-Time (JIT) bagi pengguna yang melakukan autentikasi melalui OIDC. Jika disetel ke daftar nama domain yang dipisahkan koma, akun baru hanya akan dibuat jika domain alamat email pengguna cocok dengan salah satu domain yang tercantum. Jika domain tidak cocok, admin harus membuat akun pengguna secara manual menggunakan alamat email pengguna OIDC, dengan kata sandi acak yang kuat atau, lebih baik, tanpa bidang tersebut sama sekali. `hashedPassword` Nama domain dapat menyertakan wildcard di depan untuk mencocokkan subdomain. `*.` wildcard untuk mencocokkan subdomain.
    * Contoh: Untuk mengizinkan pembuatan akun JIT bagi pengguna dengan alamat email seperti `name@example.com` dan `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Contoh: Untuk sepenuhnya menonaktifkan pembuatan akun JIT:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Jika disetel ke `true`, memperbarui bidang pengguna saat login, dan menonaktifkan formulir detail pengguna di `first_name` dan `last_name` bidang `/user/settings` halaman.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` dan `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Ketika kedua variabel lingkungan disetel, proses login memperbarui `user.isAdmin = true` jika profil yang dikembalikan oleh OP berisi atribut yang ditentukan oleh `OVERLEAF_OIDC_IS_ADMIN_FIELD` dan nilainya cocok dengan `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, jika tidak `user.isAdmin` disetel ke `false`. Jika `OVERLEAF_OIDC_IS_ADMIN_FIELD` adalah `email` maka nilai atribut `emails[0].value` digunakan untuk pemeriksaan kecocokan.

URL pengalihan untuk OpenID Provider Anda adalah `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

<summary>Contoh berkas variables.env</summary>

{% code title="variables.env" overflow="wrap" %}

```dotenv
OVERLEAF_APP_NAME="Instans Overleaf Kami"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Mengaktifkan pembuatan thumbnail menggunakan ImageMagick
ENABLE_CONVERSIONS=true

# Menonaktifkan persyaratan konfirmasi email
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Atur untuk TLS melalui nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=Instans Overleaf Kami
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "Hubungi tim dukungan Anda", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Halo, saya di sisi kanan", "url":"https://github.com/yu-i-i/overleaf-cep"}]

OVERLEAF_EMAIL_FROM_ADDRESS=team@example.com
OVERLEAF_EMAIL_SMTP_HOST=smtp.example.com
OVERLEAF_EMAIL_SMTP_PORT=587
OVERLEAF_EMAIL_SMTP_SECURE=false
# OVERLEAF_EMAIL_SMTP_USER=
# OVERLEAF_EMAIL_SMTP_PASS=
# OVERLEAF_EMAIL_SMTP_NAME=
OVERLEAF_EMAIL_SMTP_LOGGER=false
OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false
OVERLEAF_CUSTOM_EMAIL_FOOTER=Sistem ini dijalankan oleh departemen x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## OIDC untuk CE ##
#################

EXTERNAL_AUTH=oidc

OVERLEAF_OIDC_PROVIDER_ID=oidc
OVERLEAF_OIDC_ISSUER=https://keycloak.provider.com/realms/example
OVERLEAF_OIDC_AUTHORIZATION_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/auth
OVERLEAF_OIDC_TOKEN_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/token
OVERLEAF_OIDC_USER_INFO_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/userinfo
OVERLEAF_OIDC_LOGOUT_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/logout
OVERLEAF_OIDC_CLIENT_ID=Overleaf-OIDC
OVERLEAF_OIDC_CLIENT_SECRET=DoNotUseThisATGgaAcTgCcATgGATTACAagGtTCaGcGTAG
OVERLEAF_OIDC_IDENTITY_SERVICE_NAME='Masuk dengan Penyedia OIDC Keycloak'
OVERLEAF_OIDC_PROVIDER_NAME=OIDC Keycloak Provider
OVERLEAF_OIDC_PROVIDER_INFO_LINK=https://openid.net
OVERLEAF_OIDC_IS_ADMIN_FIELD=email
OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=overleaf.admin@example.com
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=false
```

{% endcode %}

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/on-premises/id/konfigurasi/overleaf-toolkit/authentication/oidc-authentication.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
