> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/on-premises/ar/althyeh/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). إذا قام مزوّد الهوية بمصادقة المستخدم بنجاح، تتم مراجعة قاعدة بيانات مستخدمي 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 من `صفحة مستخدمي LDAP. وإلا، فسيتم جلب التفاصيل فقط عند أول تسجيل دخول.` .

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

يمكن العثور على قيم المتغيرات الخمسة المطلوبة التالية باستخدام `.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` **(مطلوب)**

سيتم توفير قيم المتغيرين المطلوبين التاليين من قِبل مسؤول مزوّد OpenID (OP) الخاص بك

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

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

<details>

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

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

```dotenv
OVERLEAF_APP_NAME="مثيل Overleaf الخاص بنا"

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=Our Overleaf Instance
# 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://ayakaleaf-pro.ayaka.space/on-premises/ar/althyeh/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.
