身份验证

注册用户

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

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

身份验证尝试服从于 Rate limiting

身份验证后台

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

也可以另外设置 Django,相对于其他方式进行身份验证。

参见

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

社交身份验证

由于 Welcome to Python Social Auth’s documentation! , Weblate 支持很多使用第三方服务的身份验证,如 GitLab 、 Ubuntu 、 Fedora 等。

请检查 Django Framework 中的通用配置指示的文件。

注解

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

SOCIAL_AUTH_OPENSUSE_FORCE_EMAIL_VALIDATION = True

参见

Pipeline

允许各自的后端非常容易,只是添加 AUTHENTICATION_BACKENDS 入口设置,并且可能为给定的身份验证方法添加所需的密钥。请注意,一些后端不默认提供用户邮箱,必须另外请求,否则 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 上注册应用,然后告诉 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 具有回调 URL 作为 https://example.com/accounts/complete/github/

注解

Weblate在身份验证时提供的回调 URL 。在得到 URL 不匹配的错误时,可以根据需要来修改,请见 Set correct site domain

参见

GitHub

Bitbucket 身份验证

需要在 Bitbucket 上注册应用,然后告诉 Weblate 所有的秘密:

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    'social_core.backends.bitbucket.BitbucketOAuth',
    'social_core.backends.email.EmailAuth',
    'weblate.accounts.auth.WeblateUserBackend',
)

# Social auth backends setup
SOCIAL_AUTH_BITBUCKET_KEY = 'Bitbucket Client ID'
SOCIAL_AUTH_BITBUCKET_SECRET = 'Bitbucket Client Secret'
SOCIAL_AUTH_BITBUCKET_VERIFIED_EMAILS_ONLY = True

注解

Weblate在身份验证时提供的回调 URL 。在得到 URL 不匹配的错误时,可以根据需要来修改,请见 Set correct site domain

参见

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 不匹配的错误时,可以根据需要来修改,请见 Set correct site domain

参见

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 不匹配的错误时,可以根据需要来修改,请见 Set correct site domain

参见

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 不匹配的错误时,可以根据需要来修改,请见 Set correct site domain

参见

GitLab

微软 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 不匹配的错误时,可以根据需要来修改,请见 Set correct site domain

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 不匹配的错误时,可以根据需要来修改,请见 Set correct site domain

参见

Slack

关闭密码身份验证

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

小技巧

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

例如,使用后面的设置可以实现只是用 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 Social Auth 的指示来配置。显著的差异有:

  • 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_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",
    }
}

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

警告

早于 1.3.0 版的 django-auth-ldap , 自动分配组 对新建立的用户无法正常工作。

注解

在 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 login
# 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 login
# 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)")

活动目录集成

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 = (
    ...
    'weblate',
    # Install authentication app here
)