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

# Аутентификация OIDC

Эта функция разработана [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Здесь мы предлагаем несколько документов для вашей настройки.

### Конфигурация

Внутренне модуль Overleaf OIDC использует [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 Provider (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`
  * Ограничивает создание учётных записей Just-in-Time (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 Provider: `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

<summary>Пример файла variables.env</summary>

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

```dotenv
OVERLEAF_APP_NAME="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Включает генерацию миниатюр с помощью ImageMagick
ENABLE_CONVERSIONS=true

# Отключает требование подтверждения email
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=Провайдер OIDC Keycloak
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/ru/konfiguraciya/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.
