認証
ユーザー登録
Weblate のデフォルトの設定では、新規ユーザーの登録を処理するために Web サイト上のフォームである python-social-auth を使用します。メールを確認すると、新規ユーザーはサード パーティのサービスを利用して協力したり認証したりできます。
新規ユーザーの登録は、REGISTRATION_OPEN
を使用して無効にもできます。
認証の試行は、接続制限 の対象です。
認証バックエンド
Django に組み込まれたソリューションは、認証のためのさまざまなソーシャル オプションを含む認証に使用されます。これを使用すると、他の Django ベースのプロジェクト(参照: Migrating from Pootle)のユーザーデータベースをインポートできます。
Django は他の手段からも認証できるように設定できます。
参考
Authentication settings で、 Docker の公式イメージで認証を設定する方法を説明します。
パスワード認証
デフォルトの 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_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"
}
The default configuration extracts user details from following attributes, configure your IDP to provide them:
属性 |
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 認証
CAS 認証は、django-cas-ng などのパッケージを使用して実行できます。
ステップ 1、CAS 経由でユーザーのメールアドレスの入力フィールドを表示させます。これは、CAS サーバー自体に設定することが必要です。、CAS v 1 は属性に一切対応していないため、少なくとも CAS v 2 の実行が必要です。
ステップ 2、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")
最後に、signal を使用してメールの入力フィールドをユーザー オブジェクトに設置できます。この機能を使用するには django-cas-ng パッケージから signal をインポートし、この signal を使用してコードに接続することが必要です。設定ファイルに設定すると問題が発生することがあります。推奨する設定方法:
アプリケーションの設定ファイル、
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 user backend をインストールした状態にしておくことに注意が必要です。
通常の、認証バックエンドを AUTHENTICATION_BACKENDS
に追加し、認証アプリケーション(存在する場合)を INSTALLED_APPS
にインストールする方法:
AUTHENTICATION_BACKENDS = (
# Add authentication backend here
"weblate.accounts.auth.WeblateUserBackend",
)
INSTALLED_APPS += (
# Install authentication app here
)
ソーシャル認証
Welcome to Python Social Auth’s documentation! のおかげで、GitLab、Ubuntu、Fedora など、多くのサードパーティサービスを使用した認証に対応しています。
一般的な設定方法については、Django Framework のドキュメントを確認してください。
注釈
デフォルトでは、Weblate はサードパーティの認証サービスを使用して、検証済みのメールアドレスを運用します。使用するサービスの中に、認証サービスに対応していないものがある場合は、FORCE_EMAIL_VALIDATION を設定して、Weblate 側でメールアドレスの検証を強制してください。設定例:
参考
Pipeline
それぞれのバックエンドを有効にするのは非常に簡単です。
AUTHENTICATION_BACKENDS
の設定にエントリを追加し、場合によっては特定の認証方式に必要な秘密鍵を追加するだけです。バックエンドの中には、デフォルトではユーザーのメールアドレスを公開しないものがあり、リクエストで指定することが必要なことに注意してください。そうしなければ、Weblate は適切にユーザーの貢献を署名できません。ヒント
Most of the authentication backends require HTTPS. Once HTTPS is enabled in your web server please configure Weblate to report it properly using
ENABLE_HTTPS
, or byWEBLATE_ENABLE_HTTPS
in the Docker container.参考
Python Social Auth backend
OpenID 認証
OpenID ベースのサービスでは、通常は認証を有効にするだけで使用できます。次のセクションは、OpenSUSE、Fedora、および Ubuntu で OpenID 認証を有効にする方法:
参考
OpenID
GitHub 認証
GitHub 上で OAuth アプリケーションの登録が必要です。Weblate にすべての秘密鍵を設定する方法:
GitHub のコールバック URL を
https://example.com/accounts/complete/github/
に設定することが必要です。注釈
認証時に 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
一般的な OAuth 2 サービスと同じように、Facebook にアプリケーションを登録することが必要です。そのあとに必要な、Webrate の設定方法:
リダイレクト先の 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
Overriding authentication method names and icons
You can override the authentication method display name and icon using using settings as
SOCIAL_AUTH_<NAME>_IMAGE
andSOCIAL_AUTH_<NAME>_TITLE
. For example overriding naming for Auth0 would look like:パスワード認証の無効化
メールとパスワード認証は、
AUTHENTICATION_BACKENDS
からsocial_core.backends.email.EmailAuth
を削除すると無効にできます。weblate.accounts.auth.WeblateUserBackend
は Weblate のコア機能に必要なので残しておいてください。ちなみに
管理画面から手動で作成したユーザーは、まだパスワード認証をすることができます。
/admin/
で入力するだけです。openSUSE Open ID プロバイダのみを使用して認証する設定例: