身份验证
注册用户
Weblate 的默认设置使用 python-social-auth,网站上处理新用户注册的一种形式。确定电子邮箱后,新用户可以通过使用一种第三方服务来贡献或证实。
还可以使用 REGISTRATION_OPEN
关闭新用户注册。
身份验证尝试服从于 频次限制。
身份验证后端
Django 的内置解决方案用途是进行身份验证,包括用各种社交登录选项进行验证。使用它意味着可以导入其他基于 Django 项目的用户数据库(请参见 从 Pootle 迁移)。
Django 还可以通过其他方式进行身份验证。
参见
身份验证设置 描述了如何配置官方 Docker 镜像的身份验证。
密码身份验证
默认 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_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
)
社交身份验证
由于 Python 社交认证,Weblate 支持很多使用第三方服务的身份验证,如 GitLab 、 Ubuntu 、 Fedora 等。
请查阅 Django 框架 文档中的通用配置说明。
备注
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://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 所有的秘密:
备注
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/
备注
Weblate 在身份验证时提供的回调 URL。在得到 URL 不匹配的错误时,可以根据需要来修复,请参见 设置正确的网站域名。
参见
Google
Facebook OAuth 2
通常通过 OAuth2 服务,需要用 Facebook 来注册应用。一旦完成,就可以新建 Weblate 来使用了:
重定向 URL 为
https://WEBLATE SERVER/accounts/complete/facebook/
备注
Weblate 在身份验证时提供的回调 URL。在得到 URL 不匹配的错误时,可以根据需要来修复,请参见 设置正确的网站域名。
参见
Facebook
GitLab OAuth 2
为了使用 GitLab OAuth 2,需要在 <https://gitlab.com/profile/applications> 上注册应用。
重定向 URL 为
https://WEBLATE SERVER/accounts/complete/gitlab/
,并确保你标记 read_user 范围。备注
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/
用于租户特定身份验证。备注
Weblate 在身份验证时提供的回调 URL。在得到 URL 不匹配的错误时,可以根据需要来修复,请参见 设置正确的网站域名。
参见
Microsoft Azure Active Directory
Slack
为了使用 Slack OAuth 2,需要在 <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 的身份验证: