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

Регистрация пользователя

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

Также вы можете отключить регистрацию новых пользователей с помощью установки параметра REGISTRATION_OPEN.

Попытки аутентификации учитываются при применении ограничений на частоту запросов.

Способы аутентификации

Для аутентификации используется встроенное решение Django, включающее в себя для этого аутентификацию от различных социальных сетей. Использование этого решения означает, что вы сможете импортировать себе базу данных пользователей других проектов, написанных на Django (смотрите раздел Переход с Pootle).

Кроме того, аутентификация в Django может быть настроена и с использованием других способов.

См.также

В разделе Параметры аутентификации описано, как настроить аутентификацию в официальном образе Docker’а.

Социальная аутентификация

Благодаря пакету Python Social Auth, Weblate поддерживает аутентификацию с использованием множества сторонних сервисов, таких как GitLab, Ubuntu, Fedora и другие.

Для получения общих инструкций по настройке ознакомьтесь с их документацией в разделе Фреймворк Django.

Примечание

По умолчанию Weblate полагается на сторонние сервисы аутентификации для предоставления подтверждённого адреса электронной почты. Если некоторые сервисы, которые вы хотите использовать, это не поддерживают, включите принудительную проверку адреса электронной почты на стороне Weblate, настроив их параметр FORCE_EMAIL_VALIDATION. Например:

SOCIAL_AUTH_OPENSUSE_FORCE_EMAIL_VALIDATION = True

См.также

Конвейер

Включить конкретный способ аутентификации довольно просто: нужно всего-навсего добавить его имя в параметр AUTHENTICATION_BACKENDS, а также, по необходимости, задать необходимые ему ключи доступа. Обратите внимание, что некоторые способы по умолчанию не предоставляют адрес электронной почты пользователя, в этом случае вы должны запросить его явно, иначе Weblate не сможет правильно указать авторство выполненных пользователями переводов.

Подсказка

Большинство бэкендов аутентификации требуют HTTPS. Как только HTTPS включен на вашем веб-сервере, пожалуйста, настройте Weblate, чтобы он сообщал об этом должным образом, используя ENABLE_HTTPS, или WEBLATE_ENABLE_HTTPS в контейнере Docker.

Аутентификация OpenID

Для сервисов, основанных на OpenID, обычно это просто вопрос её включения. Следующий блок кода включает аутентификацию OpenID для OpenSUSE, Fedora и Ubuntu:

# 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",
)

См.также

OpenID

Аутентификация GitHub

Вам нужно будет зарегистрировать приложение OAuth в GitHub’е, а затем передать Weblate’у все его секреты:

# 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 нужно задать URL-адрес обратного вызова, указывающий на https://example.com/accounts/complete/github/.

Примечание

Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.

См.также

GitHub

Аутентификация Bitbucket

Вам нужно будет зарегистрировать приложение в Bitbucket’е, а затем рассказать Weblate’у все его секреты:

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

# Social auth backends setup
SOCIAL_AUTH_BITBUCKET_KEY = "Bitbucket Client ID"
SOCIAL_AUTH_BITBUCKET_SECRET = "Bitbucket Client Secret"
SOCIAL_AUTH_BITBUCKET_VERIFIED_EMAILS_ONLY = True

Примечание

Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.

См.также

Bitbucket

Google OAuth 2

Для использования Google OAuth 2 необходимо зарегистрировать приложение на <https://console.developers.google.com/> и включить Google+ API.

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/google-oauth2/

# 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"

Примечание

Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.

См.также

Google

Facebook OAuth 2

Как обычно с сервисами OAuth 2, вам необходимо зарегистрировать ваше приложение в Facebook. После этого вы сможете настроить Weblate на его использование:

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/facebook/

# 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"]

Примечание

Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.

См.также

Facebook

GitLab OAuth 2

Для использования GitLab OAuth 2 необходимо зарегистрировать приложение на <https://gitlab.com/profile/applications>.

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

# 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/'

Примечание

Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.

См.также

GitLab

Microsoft Azure Active Directory

Weblate можно настроить на использование общих или конкретных арендаторов для аутентификации.

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/azuread-oauth2/ для общей и https://СЕРВЕР WEBLATE/accounts/complete/azuread-tenant-oauth2/ для конкретной для арендатора аутентификации.

# Azure AD 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 = ""
# Azure AD Tenant

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

# OAuth2 keys
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_KEY = ""
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET = ""
# Tenant ID
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID = ""

Примечание

Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.

Slack

Для использования Slack OAuth 2 необходимо зарегистрировать приложение на <https://api.slack.com/apps>.

URL-адрес перенаправления — https://СЕРВЕР WEBLATE/accounts/complete/slack/.

# 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 = ""

Примечание

Weblate предоставляет URL-адрес обратного вызова, вызываемый во время аутентификации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.

См.также

Slack

Переопределение имён и значков методов аутентификации

Вы можете переопределить отображаемое имя метода аутентификации и иконку, используя параметры SOCIAL_AUTH_<NAME>_IMAGE и SOCIAL_AUTH_<NAME>_TITLE. Например, переопределение именования для Auth0 будет выглядеть следующим образом:

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

Отключение аутентификации по паролю

Аутентификацию по электронной почте и паролю можно отключить, удалив social_core.backends.email.EmailAuth из параметра AUTHENTICATION_BACKENDS. Никогда не удаляйте оттуда weblate.accounts.auth.WeblateUserBackend, он необходим для работы основных функций Weblate.

Совет

Вы всё ещё можете использовать аутентификацию по паролю для интерфейса администратора и для пользователей, которых вы создаёте там вручную. Просто зайдите на /admin/.

Например, аутентификация с использованием только провайдера openSUSE Open ID может быть достигнута при помощи следующего кода:

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

Аутентификация по паролю

По умолчанию settings.py поставляется с разумным набором проверок в параметре AUTH_PASSWORD_VALIDATORS:

  • Пароли не могут быть слишком похожи на другие ваши личные данные.

  • Пароли должны содержать минимум 10 символов.

  • Пароли не могут быть широко распространёнными паролями.

  • Пароли не могут быть полностью цифровыми.

  • Пароли не могут состоять из одного символа или только из пробелов.

  • Пароли не могут совпадать с предыдущими вашими паролями.

Вы можете настроить этот параметр в соответствии с вашей политикой паролей.

Дополнительно можно установить пакет django-zxcvbn-password, который вычисляет вполне реалистичные оценки сложности пароля и позволяет отклонять пароли с оценкой ниже определённого порога.

Аутентификация через SAML

Добавлено в версии 4.1.1.

Пожалуйста, следуйте инструкциям по настройке Python Social Auth. Значимые отличия:

  • Weblate поддерживает один IDP, который в SOCIAL_AUTH_SAML_ENABLED_IDPS должен называться weblate.

  • URL-адрес XML с метаданными SAML — /accounts/metadata/saml/.

  • Следующие параметры заполняются автоматически: SOCIAL_AUTH_SAML_SP_ENTITY_ID, SOCIAL_AUTH_SAML_TECHNICAL_CONTACT и SOCIAL_AUTH_SAML_SUPPORT_CONTACT

Пример настроек:

# 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==",
        "attr_name": "full_name",
        "attr_username": "username",
        "attr_email": "email",
    }
}
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"
}

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

Атрибут

Ссылка на URL-адрес 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

Подсказка

Приведённый выше пример и образ Docker определяют IDP с меткой weblate. Вам может понадобиться настроить эту строку в качестве Relay в вашем IDP.

Аутентификация через LDAP

Аутентификацию через LDAP лучше всего реализовать с помощью пакета django-auth-ldap. Установить его вы можете как обычно:

# Using PyPI
pip install django-auth-ldap>=1.3.0

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

Подсказка

Этот пакет включён в Docker-контейнер, смотреть Установка с помощью Docker’а.

Примечание

У Python’ьего модуля LDAP версии 3.1.0 есть некоторые несовместимости, которые могут помешать вам использовать эту версию. Если вы получили ошибку AttributeError: „module“ object has no attribute „_trace_level“, то может помочь понижение версии python-ldap до 3.0.0.

После установки пакета вы сможете подключить его к системе аутентификации Django:

# 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",
}

# Hide the registration form
REGISTRATION_OPEN = False

Примечание

Вы должны удалить значение 'social_core.backends.email.EmailAuth' из параметра AUTHENTICATION_BACKENDS, в противном случае пользователи смогут установить в Weblate свой пароль и пройти аутентификацию, используя его. Оставление 'weblate.accounts.auth.WeblateUserBackend' необходимо для того, чтобы работали разрешения и анонимные пользователи. Также он позволит вам войти в систему, используя учётную запись локального администратора, если вы его создали (например, с помощью команды createadmin).

Использование пароля привязки

Если вы не можете использовать для аутентификации прямую привязку, вам нужно будет использовать поиск, и предоставить для поиска привязываемого пользователя. Например:

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

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

Аутентификация через CAS

Аутентификация через CAS может быть выполнена с помощью такого пакета, как django-cas-ng.

Первый шаг — раскрытие поля электронной почты пользователя через CAS. Раскрытие нужно настроить на самом сервере CAS, и оно требует, чтобы у вас был запущен CAS как минимум версии v2, поскольку CAS версии v1 вообще не поддерживает атрибуты.

Второй шаг — обновление Weblate’а для использования вашего сервера CAS и атрибутов.

Для установки django-cas-ng выполните команду:

pip install django-cas-ng

После установки пакета вы сможете подключить его к системе аутентификации Django, изменив файл settings.py:

# 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() конфигурации вашего приложения

  • В проектовый файл urls.py (если у вас нет моделей)

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 CAS NG

Настройка сторонней аутентификации Django

Как правило, с Weblate должен заработать любой плагин аутентификации Django. Просто следуйте инструкциям для установки плагина и не забудьте оставить в способах аутентификации пользователя Weblate.

Обычно установка заключается в том, чтобы добавить способ аутентификации в список AUTHENTICATION_BACKENDS и установить соответствующее приложение аутентификации (если таковое имеется) и добавить его в список INSTALLED_APPS:

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

INSTALLED_APPS += (
    # Install authentication app here
)