> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# OIDC Kimlik Doğrulama

<Info>
  Bu özellik [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep) tarafından geliştirilmiştir. Burada yapılandırmanız için bazı belgeler sunuyoruz.
</Info>

### Yapılandırma

Overleaf OIDC modülü dahili olarak [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) kütüphanesini kullanır. OpenID Connect'i yapılandırırken sorun yaşıyorsanız, beklediği yapılandırma hakkında fikir edinmek için `passport-openidconnect` README dosyasını okumaya değer.

OIDC kimlik doğrulama modülünü etkinleştirmek için `EXTERNAL_AUTH` ortam değişkeni gereklidir. Bu ortam değişkeni hangi harici kimlik doğrulama yöntemlerinin etkinleştirileceğini belirtir. Bu değişkenin değeri bir listedir. Liste `oidc` içeriyorsa OIDC kimlik doğrulaması etkinleştirilir.

Örneğin: `EXTERNAL_AUTH=ldap oidc`

OIDC kimlik doğrulama yöntemi kullanıldığında, kullanıcı Kimlik Sağlayıcının (IdP) kimlik doğrulama sitesine yönlendirilir. IdP kullanıcının kimliğini başarıyla doğrularsa, Overleaf kullanıcı veritabanında aşağıdaki yapıda bir `thirdPartyIdentifiers` alanı içeren bir kayıt aranır:

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

`externalUserId`, IdP sunucusu tarafından döndürülen profildeki kullanıcı kimliğiyle (`OVERLEAF_OIDC_USER_ID_FIELD` ortam değişkenine bakın), `providerId` ise OIDC sağlayıcısının kimliğiyle (`OVERLEAF_OIDC_PROVIDER_ID` değişkenine bakın) eşleşmelidir.

Eşleşen bir kayıt bulunamazsa, veritabanında birincil e-posta adresi IdP kullanıcı profilindeki e-postayla eşleşen bir kullanıcı aranır:

* Böyle bir kullanıcı bulunursa `thirdPartyIdentifiers` alanı güncellenir.
* Eşleşen bir kullanıcı bulunamazsa ve JIT hesap oluşturma devre dışı bırakılmamışsa, IdP profilindeki e-posta adresi ve `thirdPartyIdentifiers` ile yeni bir kullanıcı oluşturulur.

Her iki durumda da kullanıcının harici OIDC kullanıcısına 'bağlandığı' söylenir. Kullanıcının OIDC sağlayıcısıyla bağlantısı `/user/settings` sayfasından kaldırılabilir.

#### Değerleri keşif belgesiyle bulma

Her OpenID Sağlayıcısı (OP), `<issuer>/.well-known/openid-configuration` adresinde bir keşif (discovery) belgesi yayımlar. Değerleri elle yazmak yerine bu belgeden kopyalayın; tek bir yanlış karakter bile oturum açmayı bozmaya yeter.

<Steps>
  <Step title="Keşif URL'sini bulun">
    OP'niz bunu, Overleaf için oluşturduğunuz istemcinin (sağlayıcının) sayfasında gösterir. Authentik'te **Applications > Providers** sayfasını açın, sağlayıcıyı seçin ve **OpenID Configuration URL** ile **OpenID Configuration Issuer** alanlarını bulun:

    <Frame caption="Authentik: bir sağlayıcının keşif URL'si ve yayıncısı (test örneği)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/oidc-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=e3cb5603d959665472b53e39b58b2775" alt="" width="1280" height="633" data-path="images/on-premises/oidc-authentik-provider.png" />
    </Frame>

    URL genellikle şöyle görünür:

    * Keycloak: `https://keycloak.example.com/realms/<realm>/.well-known/openid-configuration`
    * Authentik: `https://authentik.example.com/application/o/<application-slug>/.well-known/openid-configuration`
  </Step>

  <Step title="Değerleri okuyun">
    URL'yi bir tarayıcıda açın veya Overleaf sunucusunda şunu çalıştırın:

    ```shell theme={null}
    curl -s https://authentik.example.com/application/o/overleaf/.well-known/openid-configuration \
      | jq '{issuer, authorization_endpoint, token_endpoint, userinfo_endpoint, end_session_endpoint}'
    ```

    Authentik'in yanıtı şöyle görünür:

    ```json theme={null}
    {
      "issuer": "https://authentik.example.com/application/o/overleaf/",
      "authorization_endpoint": "https://authentik.example.com/application/o/authorize/",
      "token_endpoint": "https://authentik.example.com/application/o/token/",
      "userinfo_endpoint": "https://authentik.example.com/application/o/userinfo/",
      "end_session_endpoint": "https://authentik.example.com/application/o/overleaf/end-session/"
    }
    ```

    Authentik bu URL'leri sağlayıcı sayfasının daha aşağısında da listeler:

    <Frame caption="Authentik: bir sağlayıcının uç noktaları (test örneği)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/oidc-authentik-endpoints.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=55d130cbbbf27fd11aebafa1ab3f090c" alt="" width="1280" height="633" data-path="images/on-premises/oidc-authentik-endpoints.png" />
    </Frame>
  </Step>

  <Step title="Bunları `variables.env` dosyasına kopyalayın">
    | Keşif belgesindeki alan | Ortam değişkeni |
    | - | - |
    | `issuer` | `OVERLEAF_OIDC_ISSUER` |
    | `authorization_endpoint` | `OVERLEAF_OIDC_AUTHORIZATION_URL` |
    | `token_endpoint` | `OVERLEAF_OIDC_TOKEN_URL` |
    | `userinfo_endpoint` | `OVERLEAF_OIDC_USER_INFO_URL` |
    | `end_session_endpoint` | `OVERLEAF_OIDC_LOGOUT_URL` |

    ```dotenv theme={null}
    OVERLEAF_OIDC_ISSUER=https://authentik.example.com/application/o/overleaf/
    OVERLEAF_OIDC_AUTHORIZATION_URL=https://authentik.example.com/application/o/authorize/
    OVERLEAF_OIDC_TOKEN_URL=https://authentik.example.com/application/o/token/
    OVERLEAF_OIDC_USER_INFO_URL=https://authentik.example.com/application/o/userinfo/
    OVERLEAF_OIDC_LOGOUT_URL=https://authentik.example.com/application/o/overleaf/end-session/
    ```
  </Step>

  <Step title="Overleaf'in OP'ye erişebildiğini kontrol edin">
    Overleaf, token ve userinfo uç noktalarını kendi container'ının içinden çağırır; bu nedenle OP'ye yalnızca tarayıcınızdan değil, oradan da erişilebilmelidir:

    ```shell theme={null}
    docker exec sharelatex curl -sS -o /dev/null -w "%{http_code}\n" \
      https://authentik.example.com/application/o/overleaf/.well-known/openid-configuration
    ```

    Çıktı `200` olmalıdır.
  </Step>
</Steps>

<Warning>
  `issuer` değerini sondaki eğik çizgi dahil olmak üzere tam olarak kopyalayın. Overleaf bunu ID token içindeki yayıncıyla karakter karakter karşılaştırır; herhangi bir fark, her OIDC oturum açma işleminin şu hatayla başarısız olmasına neden olur:

  `{"message":{"message":"ID token not issued by expected OpenID provider."}}`

  Authentik'te yayıncı uygulamaya aittir (`.../application/o/<application-slug>/`). Authorize, token ve userinfo URL'leri tüm uygulamalar tarafından paylaşılsa da yayıncı, Authentik sunucusunun adresi değildir.
</Warning>

#### Ortam Değişkenleri

Aşağıdaki beş zorunlu değişkenin değerleri, OpenID Sağlayıcınızın (OP) `.well-known/openid-configuration` uç noktası kullanılarak bulunabilir, yukarıya bakın.

* `OVERLEAF_OIDC_ISSUER` <strong>(zorunlu)</strong>
* `OVERLEAF_OIDC_AUTHORIZATION_URL` <strong>(zorunlu)</strong>
* `OVERLEAF_OIDC_TOKEN_URL` <strong>(zorunlu)</strong>
* `OVERLEAF_OIDC_USER_INFO_URL` <strong>(zorunlu)</strong>
* `OVERLEAF_OIDC_LOGOUT_URL` <strong>(zorunlu)</strong>

Aşağıdaki iki zorunlu değişkenin değerleri OP'nizin yöneticisi tarafından sağlanacaktır

* `OVERLEAF_OIDC_CLIENT_ID` <strong>(zorunlu)</strong>
* `OVERLEAF_OIDC_CLIENT_SECRET` <strong>(zorunlu)</strong>
* `OVERLEAF_OIDC_SCOPE`
  * Varsayılan: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * OP'nin isteğe bağlı kimliği, varsayılan olarak `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * `/user/settings` sayfasının `Linked Accounts` bölümünde kullanılan OP adı, varsayılan olarak `OIDC Provider`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Giriş sayfasında kullanılan kimlik hizmetinin görünen adı (varsayılan: `Log in with $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * `Linked Accounts` bölümünde kullanılan OP açıklaması (varsayılan: `Log in with $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * OP açıklamasındaki `Learn more` URL'si; varsayılan: açıklamada `Learn more` bağlantısı yoktur.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Kullanıcının hesabı OP ile bağlı değilse OP'yi `/user/settings` sayfasında gösterme; varsayılan `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * Bu özniteliğin değeri Overleaf tarafından harici kullanıcı kimliği olarak kullanılır, varsayılan olarak `id`. Diğer olası makul değerler `email` ve `username`'dir (`preferred_username` OIDC talebine karşılık gelir).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * OIDC üzerinden kimlik doğrulayan kullanıcılar için Tam Zamanında (JIT) hesap oluşturmayı kısıtlar. Virgülle ayrılmış bir alan adları listesine ayarlanırsa, yeni bir hesap yalnızca kullanıcının e-posta adresinin alan adı listelenen alan adlarından biriyle eşleşirse oluşturulur. Alan adı eşleşmezse, bir yöneticinin kullanıcı hesabını OIDC kullanıcısının e-posta adresini kullanarak, güçlü ve rastgele bir parolayla ya da tercihen `hashedPassword` alanı hiç olmadan manuel olarak oluşturması gerekir. Alan adları, alt alan adlarını eşleştirmek için başta bir `*.` joker karakteri içerebilir.
    * Örnek: `name@example.com` ve `name@math.example.com` gibi e-posta adreslerine sahip kullanıcılar için JIT hesap oluşturmaya izin vermek için:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Örnek: JIT hesap oluşturmayı tamamen devre dışı bırakmak için:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * `true` olarak ayarlanırsa, oturum açıldığında kullanıcının `first_name` ve `last_name` alanlarını günceller ve `/user/settings` sayfasındaki kullanıcı bilgileri formunu devre dışı bırakır.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` ve `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Her iki ortam değişkeni de ayarlandığında, OP tarafından döndürülen profil `OVERLEAF_OIDC_IS_ADMIN_FIELD` ile belirtilen özniteliği içeriyorsa ve değeri `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE` ile eşleşiyorsa ya da `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE` değerini içeren bir diziyse (örneğin `groups` claim'i) oturum açma işlemi `user.isAdmin = true` olarak günceller; aksi takdirde `user.isAdmin` `false` olarak ayarlanır. `OVERLEAF_OIDC_IS_ADMIN_FIELD` değeri `email` ise eşleşme kontrolü için `emails[0].value` özniteliğinin değeri kullanılır.

OpenID Sağlayıcınız için yönlendirme URL'si `https://my-overleaf-instance.com/oidc/login/callback` şeklindedir.

<Accordion title="Örnek variables.env dosyası">
  ```dotenv title="variables.env" wrap theme={null}
  OVERLEAF_APP_NAME="Our Overleaf Instance"

  ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

  # Enables Thumbnail generation using ImageMagick
  ENABLE_CONVERSIONS=true

  # Disables email confirmation requirement
  EMAIL_CONFIRMATION_DISABLED=true

  ## Nginx
  # NGINX_WORKER_PROCESSES=4
  # NGINX_WORKER_CONNECTIONS=768

  ## Set for TLS via nginx-proxy
  # OVERLEAF_BEHIND_PROXY=true
  # OVERLEAF_SECURE_COOKIE=true

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

  OVERLEAF_LEFT_FOOTER=[{"text": "Contact your support team", "url": "mailto:support@example.com"}]
  OVERLEAF_RIGHT_FOOTER=[{"text":"Hello, I am on the Right", "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=This system is run by department x

  OVERLEAF_PROXY_LEARN=true
  NAV_HIDE_POWERED_BY=true

  #################
  ## OIDC for 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='Log in with Keycloak OIDC Provider'
  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
  ```
</Accordion>

## Adım adım: goauthentik

Bu bölüm, [goauthentik](https://goauthentik.io/) ile test edilmiş bir kurulumu adım adım anlatır. `https://overleaf.example.com` adresini kendi `OVERLEAF_SITE_URL` değerinizle, `https://authentik.example.com` adresini ise Authentik'inizin adresiyle değiştirin.

<Steps>
  <Step title="Sağlayıcıyı oluşturun">
    Authentik'te **Applications > Providers** sayfasını açın, **New Provider**'a tıklayın, **OAuth2/OpenID Provider**'ı seçin ve **Next**'e tıklayın.

    * **Client Type**: `Confidential`.
    * **Redirect URIs** (**Protocol settings** altında): `https://overleaf.example.com/oidc/login/callback` adresini `Strict` eşleşme moduyla ekleyin.
    * **Client ID** ve **Client Secret** değerlerini şimdi `OVERLEAF_OIDC_CLIENT_ID` ve `OVERLEAF_OIDC_CLIENT_SECRET` değişkenlerine kopyalayın.

    <Frame caption="Authentik: yeni bir sağlayıcının Client ID ve Client Secret değerleri">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/oidc-authentik-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=f127a92eaf3063714e9af515fe97c263" alt="" width="1120" height="808" data-path="images/on-premises/oidc-authentik-create.png" />
    </Frame>

    <Warning>
      Authentik, istemci gizli anahtarını yalnızca sağlayıcıyı oluştururken gösterir. Daha sonra düzenleme formu yalnızca gizli anahtarı yenisiyle değiştiren **Modify** seçeneğini sunar.
    </Warning>
  </Step>

  <Step title="Uygulamayı oluşturun">
    **Applications > Applications** sayfasını açın, yeni bir uygulama oluşturun, ona bir ad ve bir slug verin, örneğin `overleaf`, ve sağlayıcıyı seçin. Slug, yayıncının bir parçası olur: `https://authentik.example.com/application/o/overleaf/`.
  </Step>

  <Step title="URL'leri kopyalayın">
    Beş URL'yi doldurmak için yukarıdaki [Değerleri keşif belgesiyle bulma](#değerleri-keşif-belgesiyle-bulma) bölümünü izleyin.
  </Step>

  <Step title="Yöneticileri eşleyin (isteğe bağlı)">
    Authentik, kullanıcının gruplarını bir dizi olan `groups` claim'i olarak gönderir. Authentik grubu `Admins` üyelerini Overleaf yöneticisi yapmak için:

    ```dotenv theme={null}
    OVERLEAF_OIDC_IS_ADMIN_FIELD=groups
    OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=Admins
    ```

    <Warning>
      Yönetici bayrağı her OIDC oturum açma işleminde güncellenir. Yanlış bir alan veya değerle, Launchpad'de oluşturulan yönetici de dahil olmak üzere OIDC üzerinden oturum açan her yönetici yönetici haklarını kaybeder. Eşlemeyi önce ikinci bir yönetici hesabıyla test edin.
    </Warning>
  </Step>
</Steps>

<Accordion title="goauthentik için test edilmiş variables.env">
  ```dotenv title="variables.env" wrap theme={null}
  EXTERNAL_AUTH=oidc
  OVERLEAF_OIDC_PROVIDER_ID=authentik
  OVERLEAF_OIDC_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_OIDC_ISSUER=https://authentik.example.com/application/o/overleaf/
  OVERLEAF_OIDC_AUTHORIZATION_URL=https://authentik.example.com/application/o/authorize/
  OVERLEAF_OIDC_TOKEN_URL=https://authentik.example.com/application/o/token/
  OVERLEAF_OIDC_USER_INFO_URL=https://authentik.example.com/application/o/userinfo/
  OVERLEAF_OIDC_LOGOUT_URL=https://authentik.example.com/application/o/overleaf/end-session/
  OVERLEAF_OIDC_CLIENT_ID=<Client ID>
  OVERLEAF_OIDC_CLIENT_SECRET=<Client Secret>
  OVERLEAF_OIDC_USER_ID_FIELD=username
  OVERLEAF_OIDC_IS_ADMIN_FIELD=groups
  OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=Admins
  OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


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