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

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

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

Ви також можете вимкнути реєстрацію нових користувачів за допомогою параметра REGISTRATION_OPEN.

Спроби розпізнавання описано у Обмеження частоти.

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

Для розпізнавання використовується вбудоване рішення Django, у якому передбачено різноманітні варіанти розпізнавань для соціальних мереж. Використання цього рішення означає, що чи можете імпортувати базу даних користувачів інших заснованих на Django проєктів (див. Перенесення даних з Pootle).

Django можна додатково налаштувань для розпізнавання в інших системах розпізнавання.

Дивись також

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

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

Завдяки Welcome to Python Social Auth’s documentation!, у Weblate передбачено підтримку розпізнавання за допомогою сторонніх служб, зокрема GitLab, Ubuntu, Fedora тощо.

Будь ласка, ознайомтеся із документацією щодо типових настанов з налаштовування Django Framework.

Примітка

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

SOCIAL_AUTH_OPENSUSE_FORCE_EMAIL_VALIDATION = True

Дивись також

Pipeline

Вмикання окремих модулів обробки є доволі простою справою — достатньо додати запис до параметра 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 слід налаштувати, щоб адреса зворотного виклику була подібно до https://example.com/accounts/complete/github/.

Існують подібні модулі розпізнавання для «GitHub для організацій» та «GitHub для команд». Їхні параметри мають назви SOCIAL_AUTH_GITHUB_ORG_* і SOCIAL_AUTH_GITHUB_TEAM_*. Ці модулі потребують додаткових налаштувань області видимості — SOCIAL_AUTH_GITHUB_ORG_NAME або``SOCIAL_AUTH_GITHUB_TEAM_ID``. Відповідними адресами зворотних викликів є https://example.com/accounts/complete/github-org/ і https://example.com/accounts/complete/github-teams/.

Примітка

Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. Установіть належний домен сайта.

Дивись також

GitHub

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

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

# 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

Примітка

Надана Weblate адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. Установіть належний домен сайта.

Дивись також

Bitbucket

Google OAuth 2

Щоб скористатися OAuth 2 Google, вам слід зареєструвати програму на <https://console.developers.google.com/> і увімкнути програмний інтерфейс Google+.

Адреса переспрямовування — 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 адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. Установіть належний домен сайта.

Дивись також

Google

Facebook OAuth 2

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

Адреса переспрямовування — 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 адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. Установіть належний домен сайта.

Дивись також

Facebook

GitLab OAuth 2

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

Адреса переспрямовування — 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 адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. Установіть належний домен сайта.

Дивись також

GitLab

Microsoft Azure Active Directory

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

Адресою переспрямування є 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 адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. Установіть належний домен сайта.

Дивись також

Microsoft Azure Active Directory

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

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

Адреса переспрямовування — 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 адреса зворотного виклику під час розпізнавання містить дані щодо налаштованого домену. Якщо система повідомляє вам про помилки щодо невідповідності, вам варто внести виправлення, див. Установіть належний домен сайта.

Дивись також

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/login/.

Наприклад, розпізнаванням з використанням лише надавача даних Open ID 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. Відмінності:

  • У Weblate передбачено підтримку єдиного IDP, який має назву weblate, у SOCIAL_AUTH_SAML_ENABLED_IDPS.

  • Адреса метаданих 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 на надання таких параметрів:

Атрибут

Довідник щодо адрес 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' з параметра django:`AUTHENTICATION_BACKENDS, інакше користувачі зможуть встановлювати пароль у Weblate і проходити розпізнавання за допомогою пароля. Збереження 'weblate.accounts.auth.WeblateUserBackend' все одно потрібен для того, щоб встановити права доступу і полегшити роботу з анонімними користувачами. Цей параметр також надає вам змогу входити до системи за допомогою локального адміністративного облікового запису, якщо ви його створили (наприклад, за допомогою createadmin).

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

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

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, вона потребує роботи із принаймні версією 2 CAS, оскільки у версії 1 CAS не передбачено підтримки атрибутів взагалі.

Другим кроком є оновлення 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
)