身份验证¶
用户注册¶
Weblate 的默认设置使用 python-social-auth,网站上处理新用户注册的一种形式。确定电子邮箱后,新用户可以通过使用一种第三方服务来贡献或证实。
还可以使用 REGISTRATION_OPEN
关闭新用户注册。
身份验证尝试服从于 频次限制。
身份验证后端¶
Django 的内置解决方案用途是进行身份验证,包括用各种社交登录选项进行验证。使用它意味着可以导入其他基于 Django 项目的用户数据库(请参见 从 Pootle 迁移)。
Django 还可以通过其他方式进行身份验证。
参见
身份验证设置 描述了如何配置官方 Docker 镜像的身份验证。
密码身份验证¶
默认 settings.py
与一组合理的设置 AUTH_PASSWORD_VALIDATORS
在一起:
密码不能与其它个人信息太相似。
密码必须至少包含 10 个字符。
密码不能是通常使用的密码。
密码不能完全是数字。
密码不能只由单个字符或仅空格组成。
密码与你过去使用的密码不匹配。
可以自定义这个设置来匹配密码政策。
可以另外安装 django-zxcvbn-password 这会非常实际地估计密码的难度,并允许拒绝低于下面适当阈值的密码。
SAML 身份验证¶
Added in version 4.1.1.
请遵守 Python 社交认证的指示来配置。显著的差异有:
Weblate 支持单一 IDP,在
SOCIAL_AUTH_SAML_ENABLED_IDPS
中必须称之为weblate
。SAML XML 元数据 URL 为
/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 URI 参照 |
---|---|
全名 |
|
名字 |
|
姓氏 |
|
电子邮箱 |
|
用户名 |
|
提示
上面的示例和 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 软件包导入,并将你的代码与这个信号连接。在设置文件中这样做可能产生问题,这样建议将它放进去:
在你的 app 配置的
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 身份验证¶
一般地,任何 Django 身份认证插件应该可以在 Weblate 上工作。只需要按照插件的说明,只记住安装了 Weblate 用户后台。
典型的安装包括,将身份验证后台添加到 AUTHENTICATION_BACKENDS
,并将身份验证 app (如果有的话)安装到 INSTALLED_APPS
:
AUTHENTICATION_BACKENDS = (
# Add authentication backend here
"weblate.accounts.auth.WeblateUserBackend",
)
INSTALLED_APPS += (
# Install authentication app here
)
Two-factor authentication¶
Added in version 5.7.
提示
Two-factor authentication adds another layer of security to your account by requiring more than just a password to sign in.
Weblate supports the following second factors:
- Security keys (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.
- Authenticator app (TOTP)
Authenticator apps and browser extensions like Aegis, Bitwarden, Google Authenticator, 1Password, Authy, Microsoft Authenticator, etc. generate one-time passwords that are used as a second factor to verify your identity when prompted during sign-in.
- Recovery codes
Recovery codes can be used to access your account if you lose access to your device and cannot receive two-factor authentication codes.
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 Enforced two-factor authentication) 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.
社交身份验证¶
由于 Welcome to Python Social Auth’s documentation!,Weblate 支持很多使用第三方服务的身份验证,如 GitLab 、 Ubuntu 、 Fedora 等。
请查阅 Django Framework 文档中的通用配置说明。
备注
Weblate 默认依赖于第三方身份验证服务来提供合法的电子邮箱地址。如果想要使用的一些服务不支持,请通过为其配置 FORCE_EMAIL_VALIDATION,来强制 Weblate 网站上的电子邮箱验证:
参见
Pipeline
启用单独的后端非常简单,只需在
AUTHENTICATION_BACKENDS
设置中添加一个条目(可能还需要添加特定认证方法所需的密钥)。请注意,一些后端默认不提供用户电子邮件,你必须明确地请求,否则 Weblate 将无法正确记入用户所做的贡献。提示
大多数身份验证后端都需要 HTTPS。在您的 Web 服务器中启用 HTTPS 后,请使用
ENABLE_HTTPS
或 Docker 容器中的WEBLATE_ENABLE_HTTPS
配置 Weblate 以正确报告它。参见
Python 社交认证后端
OpenID 身份验证¶
对于基于 OpenID 的服务,通常只要启用它们就行了。后面的部分关于对于 OpenSUSE 、 Fedora 和 Ubuntu 允许 OpenID 身份验证:
参见
OpenID
GitHub 身份验证¶
需要在 GitHub 上注册一个 OAuth 应用,然后告诉 Weblate 所有的 secrets:
GitHub 的 回调 URL 应配置为形如
https://WEBLATE SERVER/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://WEBLATE SERVER/accounts/complete/github-org/和``https://WEBLATE SERVER/accounts/complete/github-teams/`。备注
Weblate 在身份验证时提供的回调 URL。在得到 URL 不匹配的错误时,可以根据需要来修复,请参见 设置正确的网站域名。
参见
GitHub
GitHub 企业身份验证¶
你需要在 GitHub EE 上注册一个 OAuth 应用,然后告诉 Weblate 这个应用的所有 secrets:
GitHub 的回调 URL 应配置为形如
https://WEBLATE SERVER/accounts/complete/github-enterprise/
.也可以使用 GitHub 应用来替代 GitHub OAuth 应用。GitHub 应用可按照仓库、组织和/或用户级别授予权限。如果你决定使用 GitHub 应用,你需要为用户 - <Email addresses> 和组织 - <Members>启用 Access: Read-only 权限。
备注
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.
重定向 URL 为
https://WEBLATE SERVER/accounts/complete/google-oauth2/
备注
Weblate 在身份验证时提供的回调 URL。在得到 URL 不匹配的错误时,可以根据需要来修复,请参见 设置正确的网站域名。
参见
Google
Facebook OAuth 2¶
通常通过 OAuth2 服务,需要用 Facebook 来注册应用。一旦完成,就可以新建 Weblate 来使用了:
重定向 URL 为
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 SERVER/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 SERVER/accounts/complete/azuread-oauth2/
,https://WEBLATE SERVER/accounts/complete/azuread-tenant-oauth2/
用于租户特定身份验证。你需要下列东西:
Application (client) ID 可从应用程序页面获得。Weblate 不使用 Object ID.
租户范围的身份验证(通常情况下的理想选择)需要用到 Directory (tenant) ID.
一旦你为一个应用程序生成了 secret 就会显示 Secret value. Weblate 不使用 Secret ID.
备注
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 SERVER/accounts/complete/slack/
。备注
Weblate 在身份验证时提供的回调 URL。在得到 URL 不匹配的错误时,可以根据需要来修复,请参见 设置正确的网站域名。
参见
Slack
覆盖身份验证方法名称和图标¶
您可以使用
SOCIAL_AUTH_<NAME>_IMAGE
和SOCIAL_AUTH_<NAME>_TITLE
等设置覆盖身份验证方法显示名称和图标。例如,Auth0 的覆盖命名如下所示:关闭密码身份验证¶
通过从
AUTHENTICATION_BACKENDS
删除social_core.backends.email.EmailAuth
,可以关闭电子邮箱和密码身份验证。总是将weblate.accounts.auth.WeblateUserBackend
保留在那里,它用于 Weblate 核心功能。禁用电子邮件身份验证将禁用所有电子邮件相关的功能 - 用户邀请或密码重置功能。
小技巧
对于手动建立的用户,可以仍然在管理界面使用密码身份验证。只需导航到
/admin/login/
。例如,使用后面的设置可以实现只是用 openSUSE Open ID 的身份验证: