> 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/ar/aliadadat/overleaf-toolkit/authentication/oidc-authentication.md).

# مصادقة OIDC

هذه الميزة مطوَّرة بواسطة [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). هنا نقدّم بعض المستندات لتكوينك.

### الإعدادات

داخليًا، تستخدم وحدة OIDC في Overleaf [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) المكتبة. إذا كنت تواجه مشكلات في إعداد OpenID Connect، فمن المفيد قراءة ملف README الخاص بـ `passport-openidconnect` للاطلاع على شكل التهيئة التي يتوقعها.

متغير البيئة `EXTERNAL_AUTH` مطلوب لتمكين وحدة مصادقة OIDC. يحدد متغير البيئة هذا طرق المصادقة الخارجية التي يتم تفعيلها. قيمة هذا المتغير هي قائمة. إذا كانت القائمة تتضمن `oidc` فسيتم تفعيل مصادقة OIDC.

على سبيل المثال: `EXTERNAL_AUTH=ldap oidc`

عند استخدام طريقة مصادقة OIDC، يتم إعادة توجيه المستخدم إلى موقع مصادقة موفّر الهوية (IdP). إذا نجح IdP في مصادقة المستخدم، يتم التحقق من قاعدة بيانات مستخدمي Overleaf بحثًا عن سجل يحتوي على `thirdPartyIdentifiers` حقلًا مُنظَّمًا على النحو التالي:

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

إن `externalUserId` يجب أن يطابق معرّف المستخدم في الملف الشخصي الذي يعيده خادم IdP (انظر `OVERLEAF_OIDC_USER_ID_FIELD` متغير البيئة)، و `providerId` يجب أن يطابق معرّف موفّر OIDC (انظر `OVERLEAF_OIDC_PROVIDER_ID`).

إذا لم يتم العثور على سجل مطابق، يتم البحث في قاعدة البيانات عن مستخدم يطابق عنوان بريده الإلكتروني الأساسي البريد الإلكتروني الموجود في ملف المستخدم الشخصي لدى IdP:

* إذا تم العثور على مثل هذا المستخدم، يتم `thirdPartyIdentifiers` تحديث الحقل.
* إذا لم يتم العثور على مستخدم مطابق ولم يكن إنشاء الحساب الفوري (JIT) معطّلًا، يتم إنشاء مستخدم جديد باستخدام عنوان البريد الإلكتروني و `thirdPartyIdentifiers` من الملف الشخصي لدى IdP.

في كلتا الحالتين، يُقال إن المستخدم «مرتبط» بالمستخدم الخارجي في OIDC. يمكن إلغاء ربط المستخدم من موفّر OIDC في `/user/settings` الصفحة.

#### متغيرات البيئة

يمكن العثور على قيم المتغيرات الخمسة المطلوبة التالية باستخدام `.well-known/openid-configuration` نقطة نهاية موفّر OpenID (OP) الخاص بك.

* `OVERLEAF_OIDC_ISSUER` **(مطلوب)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(مطلوب)**
* `OVERLEAF_OIDC_TOKEN_URL` **(مطلوب)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(مطلوب)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(مطلوب)**

ستُقدَّم قيم المتغيرين المطلوبين التاليين من قِبل مسؤول OP الخاص بك

* `OVERLEAF_OIDC_CLIENT_ID` **(مطلوب)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(مطلوب)**
* `OVERLEAF_OIDC_SCOPE`
  * الافتراضي: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * معرّف اختياري لـ OP، والقيمة الافتراضية هي `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * اسم OP، ويُستخدم في `الحسابات المرتبطة` قسم `/user/settings` الصفحة، والقيمة الافتراضية هي `موفّر OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * اسم العرض لخدمة الهوية، ويُستخدم في صفحة تسجيل الدخول (الافتراضي: `تسجيل الدخول باستخدام $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * وصف OP، ويُستخدم في `الحسابات المرتبطة` القسم (الافتراضي: `تسجيل الدخول باستخدام $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `اعرف المزيد` عنوان URL في وصف OP، الافتراضي: لا `اعرف المزيد` رابط في الوصف.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * لا تعرض OP في `/user/settings` الصفحة، إذا لم يكن حساب المستخدم مرتبطًا بـ OP، الافتراضي `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * ستُستخدم قيمة هذه السمة من قِبل Overleaf كمعرّف مستخدم خارجي، والقيمة الافتراضية هي `id`. ومن القيم المعقولة الأخرى الممكنة `email` و `اسم المستخدم`  (مقابل لـ `preferred_username` ادعاء OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * يقيّد إنشاء الحساب الفوري (JIT) للمستخدمين الذين تتم مصادقتهم عبر OIDC. إذا تم ضبطه على قائمة مفصولة بفواصل من أسماء النطاقات، فلن يتم إنشاء حساب جديد إلا إذا كان نطاق عنوان البريد الإلكتروني للمستخدم يطابق أحد النطاقات المدرجة. إذا لم يتطابق النطاق، فيجب على أحد المسؤولين إنشاء حساب المستخدم يدويًا باستخدام عنوان البريد الإلكتروني لمستخدم OIDC، إما بكلمة مرور عشوائية قوية أو، ويفضّل، بدون `hashedPassword` الحقل على الإطلاق. قد تتضمن أسماء النطاقات بادئة `*.` بدلٍ عام لمطابقة النطاقات الفرعية.
    * مثال: للسماح بإنشاء حساب JIT للمستخدمين ذوي عناوين البريد الإلكتروني مثل `name@example.com` و `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * مثال: لتعطيل إنشاء حساب JIT بالكامل:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * إذا تم ضبطه على `true`، يتم تحديث المستخدم `first_name` و `last_name` الحقل عند تسجيل الدخول، ويعطّل نموذج تفاصيل المستخدم في `/user/settings` الصفحة.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` و `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * عندما يكون كلا متغيري البيئة مضبوطين، تُحدّث عملية تسجيل الدخول `user.isAdmin = true` إذا كان الملف الشخصي الذي يعيده OP يحتوي على السمة المحددة بواسطة `OVERLEAF_OIDC_IS_ADMIN_FIELD` وتطابق قيمتها `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`، وإلا `user.isAdmin` يُضبط على `false`. إذا `OVERLEAF_OIDC_IS_ADMIN_FIELD` هو `email` فستُستخدم قيمة السمة `emails[0].value` في التحقق من التطابق.

عنوان URL لإعادة التوجيه لموفّر OpenID الخاص بك هو `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

<summary>ملف variables.env نموذجي</summary>

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

```dotenv
OVERLEAF_APP_NAME="مثيل أوفرليف الخاص بنا"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# يفعّل إنشاء الصور المصغّرة باستخدام ImageMagick
ENABLE_CONVERSIONS=true

# يعطّل متطلب تأكيد البريد الإلكتروني
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## اضبطه لـ TLS عبر nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=مثيل Overleaf الخاص بنا
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "تواصل مع فريق الدعم الخاص بك", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"مرحبًا، أنا على اليمين", "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=يُدار هذا النظام بواسطة القسم x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## OIDC لإصدار 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='تسجيل الدخول باستخدام موفّر Keycloak OIDC'
OVERLEAF_OIDC_PROVIDER_NAME=موفّر Keycloak OIDC
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/ar/aliadadat/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.
