Авторизация¶
Регистрация пользователя¶
В установке по умолчанию Weblate использует python-social-auth, форму на сайте для обработки регистраций новых пользователей. После подтверждения своей электронной почты новый пользователь может вносить свой вклад в переводы или пройти авторизацию, воспользовавшись одним из сторонних сервисов.
Также вы можете отключить регистрацию новых пользователей с помощью установки параметра REGISTRATION_OPEN
.
Попытки авторизации учитываются при применении ограничений на частоту запросов.
Способы авторизации¶
Для авторизации используется встроенное решение Django, включающее в себя для этого авторизацию от различных социальных сетей. Использование этого решения означает, что вы сможете импортировать себе базу данных пользователей других проектов, написанных на Django (смотрите раздел Переход с Pootle).
Кроме того, авторизация в Django может быть настроена и с использованием других способов.
См. также
В разделе Параметры авторизации описано, как настроить авторизацию в официальном образе Docker.
Авторизация по паролю¶
The default settings.py
comes with a reasonable set of
AUTH_PASSWORD_VALIDATORS
that ensures that weak passwords are
not allowed. You can customize this setting to match your password policy.
Additionally you can also install django-zxcvbn-password-validator which gives quite realistic estimates of password difficulty and allows rejecting passwords below a certain threshold.
Авторизация через 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 |
---|---|
Полное имя |
|
Имя |
|
Фамилия |
|
Эл. почта |
|
Имя пользователя |
|
Подсказка
Приведённый выше пример и образ Docker определяют IDP с именем weblate
. Вам может понадобиться настроить эту строку как Relay в вашем IDP.
См. также
Авторизация через LDAP¶
Авторизация через LDAP лучше всего реализовать с помощью пакета django-auth-ldap. Установить его вы можете как обычно:
# Using PyPI
uv 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 выполните команду:
uv 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¶
Как правило, с Weblate должен заработать любой плагин авторизации Django. Просто следуйте инструкциям для установки плагина и не забудьте оставить в способах авторизации пользователя Weblate.
См. также
Обычно установка заключается в том, чтобы добавить способ авторизации в список AUTHENTICATION_BACKENDS
и установить соответствующее приложение авторизации (если таковое имеется) и добавить его в список INSTALLED_APPS
:
AUTHENTICATION_BACKENDS = (
# Add authentication backend here
"weblate.accounts.auth.WeblateUserBackend",
)
INSTALLED_APPS += (
# Install authentication app here
)
Двухфакторная авторизация¶
Добавлено в версии 5.7.
Подсказка
Двухфакторная авторизация добавляет ещё один уровень безопасности вашей учётной записи, требуя для входа больше, чем просто пароль.
Weblate supports the following second factors:
- Ключи безопасности (WebAuthn)
Both, Passkeys and security keys are supported.
Passkeys validate your identity using touch, facial recognition, a device password, or a PIN as they include user verification.
Security keys are WebAuthn credentials that can only be used as a second factor of authentication, and these only validate user presence.
- Приложения для авторизации (TOTP)
Authenticator apps and browser extensions like Aegis, Bitwarden, Google Authenticator, 1Password, Authy, Microsoft Authenticator, etc. generate time-based one-time passwords that are used as a second factor to verify your identity when prompted during sign-in.
- Коды восстановления
Коды восстановления можно использовать для доступа к вашей учётной записи, если вы потеряете доступ к своему устройству и не можете получить коды двухфакторной авторизации.
Keep your recovery codes as safe as your password. We recommend saving them with a password manager such as Bitwarden, 1Password, Authy, or Keeper.
Each user can configure this in Учётная запись and second factor will be required to sign in addition to the existing authentication method.
This can be enforced for users at the project (see Принудительная двухфакторная аутентификация) or team level.
The permissions of a team with enforced two-factor authentication won’t be applied to users who do not have it configured.
Социальная авторизация¶
Благодаря пакету Python Social Auth, Weblate поддерживает авторизацию с использованием множества сторонних сервисов, таких как GitLab, Ubuntu, Fedora и другие.
Для получения общих инструкций по настройке ознакомьтесь с их документацией в разделе среды Django.
Примечание
По умолчанию Weblate полагается на сторонние сервисы авторизации для предоставления подтверждённого адреса электронной почты. Если некоторые сервисы, которые вы хотите использовать, это не поддерживают, включите принудительную проверку адреса электронной почты на стороне Weblate, настроив их параметр FORCE_EMAIL_VALIDATION. Например:
См. также
Pipeline
Включить конкретный способ авторизации довольно просто: нужно всего-навсего добавить его имя в параметр
AUTHENTICATION_BACKENDS
, а также, по необходимости, задать необходимые ему ключи доступа. Обратите внимание, что некоторые способы по умолчанию не предоставляют адрес электронной почты пользователя, в этом случае вы должны запросить его явно, иначе Weblate не сможет правильно указать авторство выполненных пользователями переводов.Подсказка
Большинство бэкендов авторизации требуют HTTPS. Как только HTTPS включён на вашем веб-сервере, пожалуйста, настройте Weblate, чтобы он сообщал об этом должным образом, используя
ENABLE_HTTPS
, илиWEBLATE_ENABLE_HTTPS
в контейнере Docker.См. также
Бэкэнд пакета Python Social Auth
Авторизация OpenID¶
Для сервисов, основанных на OpenID, обычно это просто вопрос её включения. Следующий блок кода включает авторизацию OpenID для OpenSUSE, Fedora и Ubuntu:
См. также
OpenID
Авторизация GitHub¶
Вам нужно будет зарегистрировать приложение OAuth в GitHub, а затем передать Weblate все его данные:
На GitHub должен быть настроен URL обратного вызова
https://WEBLATE SERVER/accounts/complete/github/
.There are similar authentication backends for GitHub for Organizations and GitHub for Teams. Their settings are named
SOCIAL_AUTH_GITHUB_ORG_*
andSOCIAL_AUTH_GITHUB_TEAM_*
, and they require additional setting of the scope -SOCIAL_AUTH_GITHUB_ORG_NAME
orSOCIAL_AUTH_GITHUB_TEAM_ID
. Their callback URLs arehttps://WEBLATE SERVER/accounts/complete/github-org/
andhttps://WEBLATE SERVER/accounts/complete/github-teams/
.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См. также
GitHub
Авторизация GitHub EE¶
Вам необходимо зарегистрировать приложение OAuth на GitHub EE, а затем сообщить Weblate все его данные:
Приложение GitHub OAuth App должно быть настроено так, чтобы URL обратного вызова имел вид
https://WEBLATE SERVER/accounts/complete/github-enterprise/
.Вместо GitHub OAuth App можно также использовать GitHub App. С помощью GitHub App права доступа могут быть предоставлены на уровне репозиториев, организации и/или пользователя. Если вы решили использовать GitHub App, то необходимо включить разрешение Доступ: Только чтение для пользователей - <Адреса электронной почты> и организаций - <Участники>.
Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См. также
GitHub Enterprise
Авторизация Bitbucket¶
Вам нужно будет зарегистрировать приложение в Bitbucket, а затем сообщить Weblate все его данные:
Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См. также
Bitbucket
Google OAuth 2¶
To use Google OAuth 2, you need to register an application at <https://console.developers.google.com/> and enable the Google+ API.
The redirect URL is
https://WEBLATE SERVER/accounts/complete/google-oauth2/
.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См. также
Google
Facebook OAuth 2¶
Как обычно с сервисами OAuth 2, вам необходимо зарегистрировать ваше приложение в Facebook. После этого вы сможете настроить Weblate на его использование:
The redirect URL is
https://WEBLATE SERVER/accounts/complete/facebook/
.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См. также
Facebook
GitLab OAuth 2¶
For using GitLab OAuth 2, you need to register an application at <https://gitlab.com/profile/applications>.
URL-адрес перенаправления —
https://СЕРВЕР WEBLATE/accounts/complete/gitlab/
и убедитесь, что вы отметили область видимости read_user.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См. также
GitLab
Gitea OAuth 2¶
For using Gitea OAuth 2, you need to register an application at
https://GITEA SERVER/user/settings/applications
.The redirect URL is
https://WEBLATE SERVER/accounts/complete/gitea/
.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
Примечание
The configuration above also works with Forgejo; for an example of production deployment with Forgejo, see Codeberg Translate.
См. также
Gitea
Microsoft Azure Active Directory¶
Weblate можно настроить на использование общих или конкретных арендаторов для авторизации.
URL-адрес перенаправления —
https://СЕРВЕР WEBLATE/accounts/complete/azuread-oauth2/
для общей иhttps://СЕРВЕР WEBLATE/accounts/complete/azuread-tenant-oauth2/
для конкретной для арендатора авторизации.Вам потребуется следующее:
Идентификатор (ID) приложения (клиента) можно получить на странице приложения. Идентификатор объекта в Weblate не используется.
Идентификатор (ID) каталога (клиента) необходим для проверки подлинности на уровне клиента, что обычно требуется.
Значение секрета отображается после создания ключа для приложения. Идентификатор (ID) секрета не используется в Weblate.
Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См. также
Microsoft Azure Active Directory
Slack¶
For using Slack OAuth 2, you need to register an application at <https://api.slack.com/apps>.
URL-адрес перенаправления —
https://СЕРВЕР WEBLATE/accounts/complete/slack/
.Примечание
Weblate предоставляет URL-адрес обратного вызова, вызываемый во время авторизации, в который включён настроенный домен. В случае, если вы получаете ошибки о несовпадении URL, возможно, вы захотите это исправить, смотрите раздел Установка правильного домена сайта.
См. также
Slack
Переопределение имён и значков методов авторизации¶
Вы можете переопределить отображаемое имя метода авторизации и иконку, используя параметры
SOCIAL_AUTH_<NAME>_IMAGE
иSOCIAL_AUTH_<NAME>_TITLE
. Например, переопределение именования для Auth0 будет выглядеть следующим образом:Отключение авторизации по паролю¶
Авторизацию по электронной почте и паролю можно отключить, удалив
social_core.backends.email.EmailAuth
из параметраAUTHENTICATION_BACKENDS
. Никогда не удаляйте оттудаweblate.accounts.auth.WeblateUserBackend
, он необходим для работы основных функций Weblate.Отключение авторизации по электронной почте приведёт к отключению всех функций, связанных с электронной почтой, включая приглашение пользователя или функцию сброса пароля.
Совет
Вы всё ещё можете использовать авторизацию по паролю для интерфейса администратора и для пользователей, которых вы создаёте там вручную. Просто зайдите на
/admin/login/
.Например, авторизация с использованием только провайдера openSUSE Open ID может быть достигнута при помощи следующего кода: