身份验证

注册用户

Weblate 的默认设置使用 python-social-auth,网站上处理新用户注册的一种形式。确定电子邮箱后,新用户可以通过使用一种第三方服务来贡献或证实。

还可以使用 REGISTRATION_OPEN 关闭新用户注册。

身份验证尝试服从于 频次限制

身份验证后端

Django 的内置解决方案用途是进行身份验证,包括用各种社交登录选项进行验证。使用它意味着可以导入其他基于 Django 项目的用户数据库(请参见 从 Pootle 迁移)。

Django 还可以通过其他方式进行身份验证。

参见

身份验证设置 描述了如何配置官方 Docker 镜像的身份验证。

社交身份验证

由于 Python 社交认证,Weblate 支持很多使用第三方服务的身份验证,如 GitLab 、 Ubuntu 、 Fedora 等。

请查阅 Django 框架 文档中的通用配置说明。

备注

Weblate 默认依赖于第三方身份验证服务来提供合法的电子邮箱地址。如果想要使用的一些服务不支持,请通过为其配置 FORCE_EMAIL_VALIDATION,来强制 Weblate 网站上的电子邮箱验证:

SOCIAL_AUTH_OPENSUSE_FORCE_EMAIL_VALIDATION = True

参见

Pipeline

启用单独的后端非常简单,只需在 AUTHENTICATION_BACKENDS 设置中添加一个条目(可能还需要添加特定认证方法所需的密钥)。请注意,一些后端默认不提供用户电子邮件,你必须明确地请求,否则 Weblate 将无法正确记入用户所做的贡献。

提示

大多数身份验证后端都需要 HTTPS。在您的 Web 服务器中启用 HTTPS 后,请使用 ENABLE_HTTPS 或 Docker 容器中的 WEBLATE_ENABLE_HTTPS 配置 Weblate 以正确报告它。

OpenID 身份验证

对于基于 OpenID 的服务,通常只要启用它们就行了。后面的部分关于对于 OpenSUSE 、 Fedora 和 Ubuntu 允许 OpenID 身份验证:

# 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 身份验证

需要在 GitHub 上注册一个 OAuth 应用,然后告诉 Weblate 所有的 secrets:

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

GitHub for Organizations 和 GitHub for Teams 也有类似的认证后端。他们的设置名为``SOCIAL_AUTH_GITHUB_ORG_*`和``SOCIAL_AUTH_GITHUB_TEAM_*``。它们需要额外设置范围 - SOCIAL_AUTH_GITHUB_ORG_NAME``或 ``SOCIAL_AUTH_GITHUB_TEAM_ID。 它们的回调URL是``https://example.com/accounts/complete/github-org/和``https://example.com/accounts/complete/github-teams/`

备注

Weblate 在身份验证时提供的回调 URL。在得到 URL 不匹配的错误时,可以根据需要来修复,请参见 设置正确的网站域名

参见

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 在身份验证时提供的回调 URL。在得到 URL 不匹配的错误时,可以根据需要来修复,请参见 设置正确的网站域名

参见

Bitbucket

Google OAuth 2

为了使用 Google OAuth 2,可以在 <https://console.developers.google.com/> 上注册应用,并允许 Google+ API。

重定向 URL 为 https://WEBLATE SERVER/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

通常通过 OAuth2 服务,需要用 Facebook 来注册应用。一旦完成,就可以新建 Weblate 来使用了:

重定向 URL 为 https://WEBLATE SERVER/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 SERVER/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 SERVER/accounts/complete/azuread-oauth2/https://WEBLATE SERVER/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 SERVER/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>_IMAGESOCIAL_AUTH_<NAME>_TITLE 等设置覆盖身份验证方法显示名称和图标。例如,Auth0 的覆盖命名如下所示:

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

关闭密码身份验证

通过从 AUTHENTICATION_BACKENDS 删除 social_core.backends.email.EmailAuth,可以关闭电子邮箱和密码身份验证。总是将 weblate.accounts.auth.WeblateUserBackend 保留在那里,它用于 Weblate 核心功能。

禁用电子邮件身份验证将禁用所有电子邮件相关的功能 - 用户邀请或密码重置功能。

小技巧

对于手动建立的用户,可以仍然在管理界面使用密码身份验证。只需导航到 /admin/login/

例如,使用后面的设置可以实现只是用 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,在 SOCIAL_AUTH_SAML_ENABLED_IDPS 中必须称之为 weblate

  • SAML XML 元数据 URL 为 /accounts/metadata/saml/

  • 以下设置会自动填充:SOCIAL_AUTH_SAML_SP_ENTITY_IDSOCIAL_AUTH_SAML_TECHNICAL_CONTACTSOCIAL_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 URI 参照

全名

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 镜像定义了一个 叫做 weblate 的 IDP。您可能需要在 IDP 中将此字符串配置为 Relay

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

备注

你应当从设置的 AUTHENTICATION_BACKENDS 部分移除 'social_core.backends.email.EmailAuth',否则用户不能够在 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 身份验证

可以使用软件包如 django-cas-ng 来实现 CAS 身份验证。

第一步通过 CAS 揭示了用户电子邮箱字段。这必须在 CAS 服务器自身来配置,并需要至少运行 CAS v2,因为 CAS v1 不支持属性。

第二步更新 Weblate,来使用 CAS 服务器和属性。

为了安装 django-cas-ng

pip install django-cas-ng

一旦安装了软件包,就可以通过修改 settings.py 文件将其钩连到 Django 身份验证系统:

# 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 软件包导入,并将你的代码与这个信号连接。在设置文件中这样做可能产生问题,这样建议将它放进去:

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 身份验证

一般地,任何 Django 身份认证插件应该可以在 Weblate 上工作。只需要按照插件的说明,只记住安装了 Weblate 用户后台。

典型的安装包括,将身份验证后台添加到 AUTHENTICATION_BACKENDS,并将身份验证 app (如果有的话)安装到 INSTALLED_APPS

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

INSTALLED_APPS += (
    # Install authentication app here
)