# Розпізнавання

## Реєстрація користувача

За типових налаштувань Weblate використовує python-social-auth, форму на сайті для обробки реєстрації нових користувачів. Після підтвердження адреси електронної пошти новий користувач може робити внески або проходити розпізнавання за допомогою однієї зі сторонніх служб.

Ви також можете вимкнути реєстрацію нових користувачів за допомогою параметра [`REGISTRATION_OPEN`](https://docs.weblate.org/uk/latest/admin/config.md#std-setting-REGISTRATION_OPEN).

Спроби розпізнавання описано у [Обмеження частоти](https://docs.weblate.org/uk/latest/admin/optionals.md#rate-limit).

## Модулі розпізнавання

Weblate використовує Django для автентифікації. Це включає вбудовану автентифікацію на основі пароля, соціальну автентифікацію та сторонні сервери автентифікації для Django.

Використання вбудованої автентифікації Django означає, що ви можете імпортувати базу даних користувачів інших проектів на базі Django (див. [Перенесення даних з Pootle](https://docs.weblate.org/uk/latest/admin/upgrade.md#pootle-migration)).

#### SEE ALSO
У розділі [Параметри розпізнавання](https://docs.weblate.org/uk/latest/admin/install/docker.md#docker-auth) описано, як налаштувати розпізнавання у офіційному образі Docker.

<a id="sso-team-sync"></a>

## Teams from identity providers

#### Versionadded
Added in version 2026.10.1.

Weblate can synchronize selected teams from external group memberships or
application roles during social authentication.
The default native and Docker pipelines include synchronization after
authentication checks and two-factor authentication. Extraction and assignment
are disabled until configured. If you use a custom authentication pipeline,
place `social_core.pipeline.user.sync_groups` after all authentication checks,
including `weblate.legal.pipeline.tos_confirm` when terms acceptance is enabled.

Map external identifiers to lists of existing Weblate team IDs. Find team IDs
in the administration interface URL or the teams REST API. Names can repeat
across project and workspace scopes, so they are not used as mapping targets.

For Microsoft Entra ID, prefer application roles:

```default
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_GROUPS_KEY = "roles"
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_GROUPS_MAP = {
    "Weblate.Translator": [42],
    "Weblate.Reviewer": [43],
}
```

Configure the provider to issue these roles. Group identifiers can instead be
selected with `GROUPS_KEY = "groups"`. Group overage causes authentication
to fail; Weblate does not retrieve memberships from Microsoft Graph. Restrict
the trusted tenant and issuer before granting permissions, especially when
using a common Azure endpoint.

For generic OpenID Connect or Keycloak, configure a literal claim name:

```default
SOCIAL_AUTH_OIDC_GROUPS_KEY = "groups"
SOCIAL_AUTH_OIDC_GROUPS_MAP = {"translators": [42]}

SOCIAL_AUTH_KEYCLOAK_GROUPS_KEY = "groups"
SOCIAL_AUTH_KEYCLOAK_GROUPS_MAP = {"/organization/reviewers": [43]}
```

For GitLab, explicitly enable membership retrieval:

```default
SOCIAL_AUTH_GITLAB_GROUPS_ENABLED = True
SOCIAL_AUTH_GITLAB_GROUPS_MAP = {"organization/translators": [42]}
```

Enabling retrieval automatically requests `read_api` unless `read_api` or
`api` is already requested. Enable the corresponding permission in the GitLab
OAuth application settings alongside `read_user`.

GitLab uses full group paths by default. Use stable numeric group IDs instead
when paths might change or be reused:

```default
SOCIAL_AUTH_GITLAB_GROUPS_IDENTIFIER = "id"
SOCIAL_AUTH_GITLAB_GROUPS_MAP = {"12345": [42]}
```

For SAML, add the group attribute and mapping to each existing entry in
`SOCIAL_AUTH_SAML_ENABLED_IDPS`:

```default
SOCIAL_AUTH_SAML_ENABLED_IDPS["company"].update(
    {
        "attr_groups": "https://example.com/claims/groups",
        "groups_map": {"translators": [42]},
        "allow_groups": ["translators", "reviewers"],
    }
)
```

All targets in a mapping become provider-managed teams. Authentication adds
desired memberships and removes obsolete managed memberships. Unrelated
teams and existing membership language restrictions are preserved. Changes
are recorded in the audit log. Manual membership in a managed team is subject
to replacement at the next authentication. A team may be managed by only one
configured provider or SAML IdP; conflicting mappings and nonexistent teams
cause errors before memberships change. No teams are created automatically.

A missing configured claim fails authentication. When a provider omits claims
for users without assignments, explicitly enable its
`SOCIAL_AUTH_<BACKEND>_GROUPS_MISSING_AS_EMPTY` setting. SAML uses
`groups_missing_as_empty` in the IdP entry. An empty membership list removes
all provider-managed memberships. An empty `GROUPS_MAP` disables assignment.

Login restrictions are independent of assignment. Configure
`SOCIAL_AUTH_<BACKEND>_ALLOW_GROUPS` to require membership in any listed
external group or role. Unknown identifiers grant nothing, but do not reject
login unless an allow list is configured. Existing CAS allow lists require no
new settings or pipeline entries.

Synchronization applies to login, registration, and authentication-method
linking. Password reset and account removal do not synchronize teams. Updates
occur only during authentication; this does not deactivate accounts or revoke
access in the background. Synchronization does not store external membership
snapshots.

In Docker installations, use [Налаштовування поза змінними середовища](https://docs.weblate.org/uk/latest/admin/install/docker.md#docker-custom-config) to supply these Python
settings; there are no dedicated environment variables for team mappings.

#### SEE ALSO
[External groups](https://python-social-auth.readthedocs.io/en/latest/groups.html)

## Розпізнавання за соціальними мережами

Завдяки [Welcome to Python Social Auth’s documentation!](https://python-social-auth.readthedocs.io/en/latest/index.html), у Weblate передбачено підтримку розпізнавання за допомогою сторонніх служб, зокрема GitLab, Ubuntu, Fedora тощо.

Будь ласка, ознайомтеся із документацією щодо типових настанов з налаштовування [Django Framework](https://python-social-auth.readthedocs.io/en/latest/configuration/django.html).

#### NOTE
Типово, Weblate покладається на сторонні служби розпізнавання для забезпечення коректності адреси електронної пошти. Якщо у якихось із служб, якими ви хочете скористатися, підтримки перевірки коректності адреси електронної пошти не передбачено, будь ласка, скористайтеся примусовою перевіркою адреси електронної пошти на боці Weblate, налаштувавши для таких служб параметр FORCE_EMAIL_VALIDATION. Приклад:

```python
SOCIAL_AUTH_OPENSUSE_FORCE_EMAIL_VALIDATION = True
```

#### SEE ALSO
[Pipeline](https://python-social-auth.readthedocs.io/en/latest/pipeline.html)

Provider names are normalized by Python Social Auth’s `social_names` pipeline
step before Weblate initializes an empty full name. Existing full names are
preserved. Weblate cleans and limits the resulting name and falls back to the
username when the provider name is missing or invalid.

`SOCIAL_AUTH_FIRSTLAST_FROM_FULL` and `SOCIAL_AUTH_FULL_FROM_FIRSTLAST`
control name conversion and both default to `True`. Backend-specific settings
are supported, for example `SOCIAL_AUTH_SAML_FULL_FROM_FIRSTLAST = False`.
See [Name normalization](https://python-social-auth.readthedocs.io/en/latest/pipeline.html#name-normalization) for the conversion rules. Custom
`SOCIAL_AUTH_PIPELINE` configurations should include
`social_core.pipeline.social_auth.social_names` after `social_details`.

Вмикання окремих модулів обробки є доволі простою справою — достатньо додати запис до параметра [`AUTHENTICATION_BACKENDS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTHENTICATION_BACKENDS) і, можливо, додати ключі, потрібні для вказаного способу розпізнавання. Зауважте, що у деяких модулях обробки типово не надається параметра адреси електронної пошти користувача — вам слід надсилати запит щодо неї явним чином, інакше Weblate не зможе належним чином зберігати авторські права учасників перекладу.

#### HINT
Більшість серверів автентифікації вимагається протокол HTTPS. Після увімкнення HTTPS на вашому вебсервері налаштуйте Weblate, щоб повідомити про це належним чином, застосувавши [`ENABLE_HTTPS`](https://docs.weblate.org/uk/latest/admin/config.md#std-setting-ENABLE_HTTPS), або за допомогою [`WEBLATE_ENABLE_HTTPS`](https://docs.weblate.org/uk/latest/admin/install/docker.md#envvar-WEBLATE_ENABLE_HTTPS) у контейнері Docker.

#### SEE ALSO
[Python Social Auth backend](https://python-social-auth.readthedocs.io/en/latest/backends/index.html)

### Authentication storage cleanup

Weblate removes expired OpenID protocol associations and OpenID Connect login
nonces in its hourly authentication cleanup task. OIDC login attempts have a
30-minute nonce lifetime by default; expiry is enforced during login even before
the next cleanup runs. Linked accounts are preserved. Verification codes and
partial pipelines retain their existing [`AUTH_TOKEN_VALID`](https://docs.weblate.org/uk/latest/admin/config.md#std-setting-AUTH_TOKEN_VALID) policy.

The social-auth database migration gives existing undated OIDC nonces a
30-minute grace period from upgrade. Follow the usual upgrade procedure with
old login-serving processes stopped while applying migrations. For backend
configuration, see [OIDC (OpenID Connect)](https://python-social-auth.readthedocs.io/en/latest/backends/oidc.html).

### Розпізнавання за OpenID

Для служб на основі OpenID, зазвичай, достатньо просто вмикання. Вказаний нижче розділ вмикає розпізнавання за OpenID для систем OpenSUSE, Fedora і Ubuntu:

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.email.EmailAuth",
    "social_core.backends.suse.OpenSUSEOpenId",
    "social_core.backends.ubuntu.UbuntuOpenId",
    "social_core.backends.fedora.FedoraOpenId",
    "weblate.accounts.auth.WeblateUserBackend",
)
```

#### SEE ALSO
[OpenID](https://python-social-auth.readthedocs.io/en/latest/backends/openid.html)

<a id="github-auth"></a>

### Розпізнавання за GitHub

Вам слід зареєструвати програму OAuth на GitHub, а потім повідомити Weblate усі її реєстраційні дані:

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.github.GithubOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GITHUB_KEY = "GitHub Client ID"
SOCIAL_AUTH_GITHUB_SECRET = "GitHub Client Secret"
SOCIAL_AUTH_GITHUB_SCOPE = ["user:email"]
```

GitHub слід налаштувати, щоб адреса зворотного виклику була подібно до `https://СЕРВЕР WEBLATE/accounts/complete/github/`.

Для GitHub для організацій і GitHub для команд існують схожі серверні версії автентифікації. Їх налаштування називаються `SOCIAL_AUTH_GITHUB_ORG_*` і `SOCIAL_AUTH_GITHUB_TEAM_*`, і вони потребують додаткового налаштування області дії - `SOCIAL_AUTH_GITHUB_ORG_NAME` або `SOCIAL_AUTH_GITHUB_TEAM_ID`. Їхні URL-адреси зворотного виклику: `https://WEBLATE SERVER/accounts/complete/github-org/` і `https://WEBLATE SERVER/accounts/complete/github-teams/`.

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### SEE ALSO
[GitHub](https://python-social-auth.readthedocs.io/en/latest/backends/github.html)

<a id="github-ee-auth"></a>

### Розпізнавання EE GitHub

Вам слід зареєструвати програму OAuth на GitHub, а потім повідомити Weblate усі її реєстраційні дані:

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.github_enterprise.GithubEnterpriseOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GITHUB_ENTERPRISE_KEY = "GitHub OAuth App Client ID"
SOCIAL_AUTH_GITHUB_ENTERPRISE_SECRET = "GitHub OAuth App Client Secret"
SOCIAL_AUTH_GITHUB_ENTERPRISE_URL = "https://git.example.com/"
SOCIAL_AUTH_GITHUB_ENTERPRISE_API_URL = "https://git.example.com/api/v3/"
SOCIAL_AUTH_GITHUB_ENTERPRISE_SCOPE = ["user:email"]
```

Додаток OAuth GitHub слід налаштувати, щоб адреса зворотного виклику була подібно до `https://СЕРВЕР WEBLATE/accounts/complete/github-enterprise/`.

Замість додатка OAuth GitHub, можна також скористатися додатком GitHub. За допомогою додатка GitHub можна надати права доступу до сховищ на рівні організації і/або користувача. Якщо ви вирішите скористатися додатком GitHub, вам слід увімкнути Доступ: Права лише для читання для користувачів - <Адреси електронної пошти> і Організація - <Учасники>.

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### SEE ALSO
[Backend classes](https://python-social-auth.readthedocs.io/en/latest/backends/github_enterprise.html)

<a id="bitbucket-auth"></a>

### Розпізнавання за Bitbucket

Вам слід зареєструвати програму на Bitbucket, а потім повідомити Weblate усі її реєстраційні дані:

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.bitbucket.BitbucketOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_BITBUCKET_OAUTH2_KEY = "Bitbucket Client ID"
SOCIAL_AUTH_BITBUCKET_OAUTH2_SECRET = "Bitbucket Client Secret"
SOCIAL_AUTH_BITBUCKET_OAUTH2_VERIFIED_EMAILS_ONLY = True
```

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### SEE ALSO
[Bitbucket](https://python-social-auth.readthedocs.io/en/latest/backends/bitbucket.html)

<a id="google-auth"></a>

### Google OAuth 2

Щоб використовувати Google OAuth 2, вам потрібно зареєструвати програму OAuth за адресою <[https://console.developers.google.com/](https://console.developers.google.com/)>.

Адреса переспрямовування — `https://СЕРВЕР WEBLATE/accounts/complete/google-oauth2/`.

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.google.GoogleOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = "Client ID"
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = "Client secret"
```

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### SEE ALSO
[Google](https://python-social-auth.readthedocs.io/en/latest/backends/google.html)

<a id="facebook-auth"></a>

### Facebook OAuth 2

Як звично для служб OAuth 2, вам слід зареєструвати вашу програму за допомогою Facebook. Після цього, вам слід налаштувати Weblate на її використання:

Адреса переспрямовування — `https://СЕРВЕР WEBLATE/accounts/complete/facebook/`.

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.facebook.FacebookOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_FACEBOOK_KEY = "key"
SOCIAL_AUTH_FACEBOOK_SECRET = "secret"
SOCIAL_AUTH_FACEBOOK_SCOPE = ["email", "public_profile"]
```

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### SEE ALSO
[Facebook](https://python-social-auth.readthedocs.io/en/latest/backends/facebook.html)

<a id="gitlab-auth"></a>

### GitLab OAuth 2

Для користування GitLab OAuth 2 вам слід зареєструвати програму у <[https://gitlab.com/profile/applications](https://gitlab.com/profile/applications)>.

Адреса переспрямовування — `https://СЕРВЕР WEBLATE/accounts/complete/gitlab/` і не забудьте позначити область видимості read_user.

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.gitlab.GitLabOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GITLAB_KEY = "Application ID"
SOCIAL_AUTH_GITLAB_SECRET = "Secret"
SOCIAL_AUTH_GITLAB_SCOPE = ["read_user"]

# If you are using your own GitLab
# SOCIAL_AUTH_GITLAB_API_URL = 'https://gitlab.example.com/'
```

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### SEE ALSO
[GitLab](https://python-social-auth.readthedocs.io/en/latest/backends/gitlab.html)

<a id="gitea-auth"></a>

### Gitea OAuth 2

Для використання Gitea OAuth 2 вам слід зареєструвати застосунок на `https://GITEA SERVER/user/settings/applications`.

Адреса переспрямовування — `https://СЕРВЕР WEBLATE/accounts/complete/gitea/`.

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.gitea.GiteaOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GITEA_KEY = ""
SOCIAL_AUTH_GITEA_SECRET = ""

# If you are using your own Gitea
SOCIAL_AUTH_GITEA_API_URL = "https://gitea.example.com/"
```

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### NOTE
Наведена вище конфігурація також працює з Forgejo; для прикладу розгортання виробництва з Forgejo див. [Codeberg Translate](https://translate.codeberg.org).

#### SEE ALSO
[Gitea](https://python-social-auth.readthedocs.io/en/latest/backends/gitea.html)

<a id="azure-auth"></a>

<a id="entra-auth"></a>

### Microsoft Entra ID

Azure Active Directory (Azure AD) тепер називається Microsoft Entra ID. Weblate зберігає назви бекендів `azuread-oauth2` та `azuread-tenant-oauth2` для забезпечення сумісності з базовими бекендами Python Social Auth та існуючими розгортаннями.

Weblate може бути налаштовано на використання типових або специфічних власників системи розпізнавання.

Адресою переспрямування є `https://СЕРВЕР WEBLATE/accounts/complete/azuread-oauth2/` для звичайного і `https://СЕРВЕР WEBLATE/accounts/complete/azuread-tenant-oauth2/` для специфічного для орендаря розпізнавання.

Вам знадобиться таке:

*  *Ідентифікатор застосунку (клієнта)* можна знайти в огляді реєстрації застосунків у центрі адміністрування Microsoft Entra.  *Ідентифікатор об’єкта* у Weblate не використовується.
*  *Ідентифікатор каталогу (орендного)* потрібен для розпізнавання для орендованого простору, що, зазвичай, є бажаним.
*  *Значення секретного ключа* відображається після створення секретного ключа клієнта під час реєстрації додатка.  *Ідентифікатор секретного ключа* у Weblate не використовується.

```python
# Microsoft Entra ID common

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.azuread.AzureADOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# OAuth2 keys
SOCIAL_AUTH_AZUREAD_OAUTH2_KEY = ""
SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET = ""
```

```python
# Microsoft Entra ID with Tenant

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.azuread_tenant.AzureADTenantOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Application (client) ID
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_KEY = ""
# Secret value
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET = ""
# Directory (tenant) ID
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID = ""
```

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### SEE ALSO
[Microsoft Entra ID and Azure AD B2C](https://python-social-auth.readthedocs.io/en/latest/backends/azuread.html)

<a id="slack-auth"></a>

### Ідентифікатор

Для користування Slack OAuth 2 вам слід зареєструвати програму на <[https://api.slack.com/apps](https://api.slack.com/apps)>.

Адреса переспрямовування — `https://СЕРВЕР WEBLATE/accounts/complete/slack/`.

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.slack.SlackOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_SLACK_KEY = ""
SOCIAL_AUTH_SLACK_SECRET = ""
```

#### NOTE
Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. [Установіть належний домен сайта](https://docs.weblate.org/uk/latest/admin/install.md#production-site).

#### SEE ALSO
[Slack](https://python-social-auth.readthedocs.io/en/latest/backends/slack.html)

### Перевизначення імен методів автентифікації та піктограм

Display names and bundled icons come from python-social-auth backend metadata.
Weblate retains translated labels and local icons for its password and e-mail
methods, and supplies its own fallback icon for providers without a logo.
Add `social_django.finders.SocialAuthIconFinder` after the standard finders in
`STATICFILES_FINDERS` to collect the provider icons from social-auth-core.
The example and Docker settings include this finder. Run
`weblate collectstatic --noinput` after upgrading.

You can override the authentication method display name and icon using settings as
`SOCIAL_AUTH_<NAME>_IMAGE` and `SOCIAL_AUTH_<NAME>_TITLE`. For example
overriding naming for Auth0 would look like:

```python
SOCIAL_AUTH_AUTH0_IMAGE = "custom.svg"
SOCIAL_AUTH_AUTH0_TITLE = "Custom auth"
```

Relative image names retain the `auth/` static directory convention. Existing
bundled filenames, such as `auth0.svg`, also resolve to the shared
`social_auth/icons/` directory when no local override exists. Full HTTP URLs
and data URLs continue to work.

<a id="disable-email-auth"></a>

### Вимикання розпізнавання за паролем

Розпізнавання за адресою електронної пошти і паролем можна вимкнути вилученням запису `social_core.backends.email.EmailAuth` з [`AUTHENTICATION_BACKENDS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTHENTICATION_BACKENDS). Не вилучайте `weblate.accounts.auth.WeblateUserBackend` — цей запис потрібне для реалізації основних функціональних можливостей Weblate.

Вимикання розпізнавання за електронною поштою призведе до вимикання усіх функціональних можливостей, які пов’язано з електронною поштою: запрошення користувачів або можливості скидання паролів.

#### TIP
Ви все ще можете скористатися для створених тут вручну записів користувачів розпізнаванням за паролями для адміністративного інтерфейсу. Просто перейдіть до `/admin/login/`.

Наприклад, розпізнаванням з використанням лише надавача даних Open ID openSUSE Open ID можна скористатися ось так:

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.suse.OpenSUSEOpenId",
    "weblate.accounts.auth.WeblateUserBackend",
)
```

<a id="password-authentication"></a>

## Розпізнавання за паролем

За замовчуванням `settings.py` поставляється з прийнятним набором [`AUTH_PASSWORD_VALIDATORS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTH_PASSWORD_VALIDATORS), який гарантує, що слабкі паролі не дозволені. Ви можете налаштувати цей параметр відповідно до своєї політики паролів.

Крім того, ви також можете встановити [django-zxcvbn-password-validator](https://github.com/Pierre-Sassoulas/django-zxcvbn-password-validator), який дає досить реалістичні оцінки складності пароля та дозволяє відхиляти паролі нижче певного порогу.

#### SEE ALSO
* [`PASSWORD_MINIMAL_STRENGTH`](https://docs.weblate.org/uk/latest/admin/config.md#std-setting-PASSWORD_MINIMAL_STRENGTH)
* [`WEBLATE_MIN_PASSWORD_SCORE`](https://docs.weblate.org/uk/latest/admin/install/docker.md#envvar-WEBLATE_MIN_PASSWORD_SCORE)
* [Безпека паролем](https://docs.weblate.org/uk/latest/security/passwords.md)

<a id="saml-auth"></a>

## Розпізнавання за SAML

#### Versionadded
Added in version 4.1.1.

#### Versionchanged
Змінено в версії 5.12: Залежності для розпізнавання у SAML виключено з типового списку додаткових пакунків `all`. Вам слід включити `saml` під час встановлення пакунка Weblate за допомогою pip (`uv pip install Weblate[all,saml]`).

Будь ласка, виконайте настанови щодо налаштовування розпізнавання за соціальними мережами у Python. Відмінності:

* У Weblate передбачено підтримку єдиного IDP, який має назву `weblate`, у `SOCIAL_AUTH_SAML_ENABLED_IDPS`.
* URL-адреса метаданих SAML XML — `/accounts/metadata/saml/`, яка також є ідентифікатором сутності.
* URL-адреса для входу — `/accounts/complete/saml/` (також відома як URL-адреса ACS).
* Автоматично заповнено буде такі параметри: `SOCIAL_AUTH_SAML_SP_ENTITY_ID`, `SOCIAL_AUTH_SAML_TECHNICAL_CONTACT`, `SOCIAL_AUTH_SAML_SUPPORT_CONTACT`

Приклад налаштувань:

```default
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.email.EmailAuth",
    "social_core.backends.saml.SAMLAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_SAML_SP_ENTITY_ID = f"https://{SITE_DOMAIN}/accounts/metadata/saml/"
SOCIAL_AUTH_SAML_SP_PUBLIC_CERT = "-----BEGIN CERTIFICATE-----"
SOCIAL_AUTH_SAML_SP_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----"
SOCIAL_AUTH_SAML_ENABLED_IDPS = {
    "weblate": {
        "entity_id": "https://idp.testshib.org/idp/shibboleth",
        "url": "https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO",
        "x509cert": "MIIEDjCCAvagAwIBAgIBADA ... 8Bbnl+ev0peYzxFyF5sQA==",
    }
}
SOCIAL_AUTH_SAML_ORG_INFO = {
    "en-US": {
        "name": "example",
        "displayname": "Example Inc.",
        "url": "http://example.com"
    }
}
SOCIAL_AUTH_SAML_TECHNICAL_CONTACT = {
    "givenName": "Tech Gal",
    "emailAddress": "technical@example.com"
}
SOCIAL_AUTH_SAML_SUPPORT_CONTACT = {
    "givenName": "Support Guy",
    "emailAddress": "support@example.com"
}
```

Ви можете створити нову пару ключів за допомогою:

```sh
openssl req -newkey rsa:4096 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.key
```

Конфігурація за замовчуванням витягує дані користувача з наступних атрибутів, налаштуйте свого постачальника ідентифікаційних даних, щоб він їх надавав:

| Атрибут          | Довідник щодо адрес SAML            |
|------------------|-------------------------------------|
| Повне ім’я       | `urn:oid:2.5.4.3`                   |
| Ім’я             | `urn:oid:2.5.4.42`                  |
| Прізвище         | `urn:oid:2.5.4.4`                   |
| Електронна пошта | `urn:oid:0.9.2342.19200300.100.1.3` |
| Імʼя користувача | `urn:oid:0.9.2342.19200300.100.1.1` |

Під час налаштування Weblate SP у вашому постачальнику ідентифікаційних даних рекомендується вибрати постійний варіант Name ID format.

#### HINT
Some identity providers (such as Microsoft Entra ID with multi-factor
authentication) require disabling the default `requestedAuthnContext`
in the SAML security configuration:

```python
SOCIAL_AUTH_SAML_SECURITY_CONFIG = {"requestedAuthnContext": False}
```

У Docker замість цього встановіть [`WEBLATE_SAML_SECURITY_CONFIG`](https://docs.weblate.org/uk/latest/admin/install/docker.md#envvar-WEBLATE_SAML_SECURITY_CONFIG).

#### HINT
У наведеному вище прикладі та зображенні Docker визначено постачальника ідентифікаційних даних під назвою `weblate`. Можливо, вам доведеться налаштувати цей рядок як Relay у вашому постачальнику ідентифікаційних даних.

#### NOTE
Автентифікація Weblate залежить від параметра `RelayState`, який передається через процес автентифікації. Це потрібно налаштувати з деякими постачальниками ідентифікаційних даних:

* [Як надіслати власний стан реле за допомогою Okta](https://support.okta.com/help/s/article/How-to-send-a-custom-relaystate-to-application-through-idp-initiated-authentication-urls)

#### SEE ALSO
* [Configuring SAML in Docker](https://docs.weblate.org/uk/latest/admin/install/docker.md#docker-saml)
* [SAML](https://python-social-auth.readthedocs.io/en/latest/backends/saml.html)

<a id="ldap-auth"></a>

## Розпізнавання за допомогою LDAP

Оптимальним способом уможливлення розпізнавання за допомогою LDAP є використанням пакунка django-auth-ldap. Встановити його можна у звичний спосіб:

```sh
# Using PyPI
uv pip install 'django-auth-ldap>=1.3.0'

# Using apt-get
apt-get install python-django-auth-ldap
```

#### HINT
Цей пакунок включено до контейнера Docker, див. [Установлення за допомогою Docker](https://docs.weblate.org/uk/latest/admin/install/docker.md).

#### NOTE
Маємо певні несумісності із модулем Python LDAP 3.1.0, які можуть вам завадити вам користуватися цією версією. Якщо система повідомляє вам про помилку [AttributeError: „module“ object has no attribute „_trace_level“](https://github.com/python-ldap/python-ldap/issues/226), зниження версії python-ldap до 3.0.0 може вирішити проблему.

Після встановлення пакунка, ви можете вставити його до скрипту розпізнавання Django:

```python
# Add LDAP backed, keep Django one if you want to be able to sign in
# even without LDAP for admin account
AUTHENTICATION_BACKENDS = (
    "django_auth_ldap.backend.LDAPBackend",
    "weblate.accounts.auth.WeblateUserBackend",
)

# LDAP server address
AUTH_LDAP_SERVER_URI = "ldaps://ldap.example.net"

# DN to use for authentication
AUTH_LDAP_USER_DN_TEMPLATE = "cn=%(user)s,o=Example"
# Depending on your LDAP server, you might use a different DN
# like:
# AUTH_LDAP_USER_DN_TEMPLATE = 'ou=users,dc=example,dc=com'

# List of attributes to import from LDAP upon sign in
# Weblate stores full name of the user in the full_name attribute
AUTH_LDAP_USER_ATTR_MAP = {
    "full_name": "name",
    # Use the following if your LDAP server does not have full name
    # Weblate will merge them later
    # 'first_name': 'givenName',
    # 'last_name': 'sn',
    # Email is required for Weblate (used in VCS commits)
    "email": "mail",
}
# Optional: route "Forgot your password?" to your LDAP self-service page
PASSWORD_RESET_URL = "https://id.example.net/password-reset/"


# Hide the registration form
REGISTRATION_OPEN = False
```

#### NOTE
Вам слід вилучити `'social_core.backends.email.EmailAuth'` з параметра [`AUTHENTICATION_BACKENDS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTHENTICATION_BACKENDS), інакше користувачі зможуть встановлювати пароль у Weblate і проходити розпізнавання за допомогою пароля. Збереження `'weblate.accounts.auth.WeblateUserBackend'` все одно потрібен для того, щоб встановити права доступу і полегшити роботу з анонімними користувачами. Цей параметр також надає вам змогу входити до системи за допомогою локального адміністративного облікового запису, якщо ви його створили (наприклад, за допомогою [`createadmin`](https://docs.weblate.org/uk/latest/admin/management.md#weblate-admin-createadmin)).

### Використання пароля bind

Якщо ви не можете скористатися безпосередньою прив’язкою для розпізнавання, вам доведеться скористатися пошуком і вказати користувача для прив’язки пошуку. Приклад:

```python
import ldap
from django_auth_ldap.config import LDAPSearch

AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "ou=users,dc=example,dc=com", ldap.SCOPE_SUBTREE, "(uid=%(user)s)"
)
```

### Інтеграція із Active Directory

```python
import ldap
from django_auth_ldap.config import LDAPSearch, NestedActiveDirectoryGroupType

AUTH_LDAP_BIND_DN = "CN=ldap,CN=Users,DC=example,DC=com"
AUTH_LDAP_BIND_PASSWORD = "password"

# User and group search objects and types
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "CN=Users,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"
)

# Make selected group a superuser in Weblate
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    # is_superuser means user has all permissions
    "is_superuser": "CN=weblate_AdminUsers,OU=Groups,DC=example,DC=com",
}

# Map groups from AD to Weblate
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    "OU=Groups,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(objectClass=group)"
)
AUTH_LDAP_GROUP_TYPE = NestedActiveDirectoryGroupType()
AUTH_LDAP_FIND_GROUP_PERMS = True

# Optionally enable group mirroring from LDAP to Weblate
# AUTH_LDAP_MIRROR_GROUPS = True
```

#### SEE ALSO
* [Django Authentication Using LDAP](https://django-auth-ldap.readthedocs.io/en/latest/index.html)
* [Authentication](https://django-auth-ldap.readthedocs.io/en/latest/authentication.html)

<a id="cas-auth"></a>

## Розпізнавання за допомогою CAS

Аутентифікацію CAS можна здійснити за допомогою такого пакета, як [Django CAS NG](https://github.com/django-cas-ng/django-cas-ng).

Першим кроком є розкриття поля адреси електронної пошти користувача за допомогою CAS. Цю можливість має бути налаштовано на самому сервері CAS, вона потребує роботи із принаймні версією 2 CAS, оскільки у версії 1 CAS не передбачено підтримки атрибутів взагалі.

Другим кроком є оновлення Weblate для використання вашого сервера CAS і атрибутів.

Щоб встановити [Django CASE NG](https://github.com/django-cas-ng/django-cas-ng):

```sh
uv pip install django-cas-ng
```

Після встановлення пакунка, ви можете вставити його до скрипту розпізнавання Django внесенням змін до файла `settings.py`:

```python
# Add CAS backed, keep the Django one if you want to be able to sign in
# even without LDAP for the admin account
AUTHENTICATION_BACKENDS = (
    "django_cas_ng.backends.CASBackend",
    "weblate.accounts.auth.WeblateUserBackend",
)

# CAS server address
CAS_SERVER_URL = "https://cas.example.net/cas/"

# Add django_cas_ng somewhere in the list of INSTALLED_APPS
INSTALLED_APPS = (..., "django_cas_ng")
```

Нарешті, для прив’язки поля адреси електронної пошти до об’єкта користувача можна скористатися сигналом. Щоб це спрацювало, вам слід імпортувати сигнал з пакунка django-cas-ng і з’єднати ваш код із цим сигналом. Виконання цього завдання у файлів параметрів може спричинити проблеми, тому пропонуємо вам такий варіант:

- У методі [`django.apps.AppConfig.ready()`](https://docs.djangoproject.com/en/stable/ref/applications/#django.apps.AppConfig.ready) налаштувань вашої програми
- У файлі проєкту `urls.py` (якщо моделей не існує)

```python
from django_cas_ng.signals import cas_user_authenticated
from django.dispatch import receiver


@receiver(cas_user_authenticated)
def update_user_email_address(sender, user=None, attributes=None, **kwargs):
    # If your CAS server does not always include the email attribute
    # you can wrap the next two lines of code in a try/catch block.
    user.email = attributes["email"]
    user.save()
```

## Налаштовування стороннього розпізнавання за допомогою Django

Загалом, із Weblate має працювати будь-який додаток розпізнавання Django. Просто виконуйте настанови для цього додатка, просто не забудьте встановити модуль користувачів Weblate.

#### SEE ALSO
* [Розпізнавання за допомогою LDAP](#ldap-auth)
* [Розпізнавання за допомогою CAS](#cas-auth)

Типово, встановлення полягає у додаванні модуля розпізнавання до запису [`AUTHENTICATION_BACKENDS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTHENTICATION_BACKENDS) і встановленні програми для розпізнавання (якщо таку передбачено) до [`INSTALLED_APPS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-INSTALLED_APPS):

```python
AUTHENTICATION_BACKENDS = (
    # Add authentication backend here
    "weblate.accounts.auth.WeblateUserBackend",
)

INSTALLED_APPS += (
    # Install authentication app here
)
```

<a id="fa"></a>

# Двофакторне розпізнавання

#### Versionadded
Added in version 5.7.

#### HINT
Двофакторна автентифікація додає ще один рівень безпеки до вашого облікового запису вимагаючи для входу не лише пароль.

У Weblate передбачено підтримку таких других факторів:

Ключі безпеки (WebAuthn)
: Підтримуються і ключі доступу, і ключі безпеки.
  <br/>
  Ключі доступу підтверджують вашу особу за допомогою дотику, розпізнавання пальця, паролю пристрою або PIN-коду, оскільки вони включають підтвердження користувача.
  <br/>
  Ключі безпеки — це облікові дані WebAuthn, які можна використовувати лише як другий фактор автентифікації, і вони лише підтверджують присутність користувача.
  <br/>
  When signing in on a new computer or in a different browser, your passkey
  might not be available. Use a device where the passkey is available, or
  connect your registered security key. A verification error can mean that
  the request timed out, was canceled, or that the credential is unavailable;
  it does not identify the exact cause.
  <br/>
  You can also select another configured verification method on the sign-in
  page, such as Use recovery codes. If you cannot use any configured
  method, contact the site administrator for help.

Програми для розпізнавання (TOTP)
: Програми автентифікатора та розширення браузера, такі як Aegis, Bitwarden, Google Authenticator, 1Password, Authy, Microsoft Authenticator тощо, генерують одноразові паролі на основі часу, які використовуються як другий фактор для підтвердження вашої особи, коли з’являється запит під час входу.
  <br/>
  Registration becomes active only after you verify a code from the app.
  Complete registration within 24 hours; otherwise start again with a new QR
  code. Each registration can be completed only once. After registering, wait
  for the next code before using the app to sign in.
  <br/>
  Only one registration can be pending per account. Opening registration in
  another browser session shows the same QR code until registration is
  completed or expires.
  <br/>
  If you have more than one registered authenticator app, select the app
  you are using when entering its code during sign-in.

Коди відновлення
: Кодами відновлення можна скористатися для доступу до вашого облікового запису, якщо ви втратите доступ до вашого пристрою і не зможете отримати двофакторні коди розпізнавання.
  <br/>
  Зберігайте ваші коди відновлення із таким самим захистом, що і ваші паролі. Ми рекомендуємо зберігати їх за допомогою програми для керування паролями, зокрема Bitwarden, 1Password, Authy або Keeper.

Each user can configure this in [Безпека](https://docs.weblate.org/uk/latest/user/profile.md#profile-security) and second factor will
be required to sign in addition to the existing authentication method.

Це можна застосувати для користувачів на рівні проєкту (див.: [Примусове двофакторне розпізнавання](https://docs.weblate.org/uk/latest/admin/projects.md#project-enforced-2fa)) або команди. У разі розгортання на всьому сайті цю функцію також можна використовувати для обов’язкового застосування двофакторної автентифікації для всіх користувачів, увімкнувши її для команди за замовчуванням Users, яка автоматично призначається новим користувачам за допомогою [automatic team assignment](https://docs.weblate.org/uk/latest/admin/access.md#autoteam).

Права доступу команди із примусовим двофакторним розпізнаванням не буде застосовано до користувачів, які не налаштували таке розпізнавання.
