Autentikasi¶
Pendaftaran pengguna¶
Pengaturan bawaan untuk Weblate adalah menggunakan python-social-auth, formulir di situs web untuk menangani pendaftaran pengguna baru. Setelah mengkonfirmasikan surel mereka, pengguna baru dapat berkontribusi atau mengautentikasikan dengan menggunakan salah satu layanan pihak ketiga.
Anda juga dapat mematikan pendaftaran pengguna baru menggunakan REGISTRATION_OPEN.
Percobaan autentikasi tunduk pada Pembatasan akses.
Backend autentikasi¶
Weblate mengandalkan Django untuk autentikasi. Ini mencakup autentikasi berbasis kata sandi bawaan, autentikasi sosial, dan backend autentikasi pihak ketiga untuk Django.
Menggunakan autentikasi bawaan Django berarti Anda dapat mengimpor basis data pengguna proyek berbasis Django lainnya (lihat Memigrasikan dari Pootle).
Lihat juga
Pengaturan autentikasi menjelaskan cara mengkonfigurasikan autentikasi di gambar Docker resmi.
Autentikasi kata sandi¶
settings.py bawaan dilengkapi dengan serangkaian AUTH_PASSWORD_VALIDATORS yang wajar yang memastikan bahwa kata sandi yang lemah tidak diperbolehkan. Anda dapat menyesuaikan pengaturan ini agar sesuai dengan kebijakan kata sandi Anda.
Selain itu Anda juga dapat memasang django-zxcvbn-password-validator yang memberikan perkiraan kesulitan kata sandi yang cukup realistis dan memungkinkan penolakan kata sandi di bawah ambang batas tertentu.
Autentikasi SAML¶
Added in version 4.1.1.
Berubah pada versi 5.12: Dependensi untuk autentikasi SAML tidak lagi disertakan dalam ekstra all bawaan. Anda perlu menyertakan saml saat memasang paket Weblate menggunakan pip (uv pip install Weblate[all,saml]).
Silakan ikuti petunjuk Python Social Auth untuk mengkonfigurasikan. Perbedaan penting:
Weblate mendukung IDP tunggal yang harus disebut
weblatedalamSOCIAL_AUTH_SAML_ENABLED_IDPS.URL metadata SAML XML adalah
/accounts/metadata/saml/, yang juga merupakan ID entitas.URL masuk adalah
/accounts/complete/saml/(juga dikenal sebagai URL ACS).Pengaturan berikut diiisi secara otomatis:
SOCIAL_AUTH_SAML_SP_ENTITY_ID,SOCIAL_AUTH_SAML_TECHNICAL_CONTACT,SOCIAL_AUTH_SAML_SUPPORT_CONTACT
Contoh konfigurasi:
# 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==",
}
}
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"
}
Anda dapat menghasilkan pasangan kunci baru menggunakan:
openssl req -newkey rsa:4096 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.key
Konfigurasi bawaan mengekstrak rincian pengguna dari atribut berikut, konfigurasikan IdP Anda untuk menyediakannya:
Atribut |
Referensi URI SAML |
|---|---|
Nama lengkap |
|
Nama depan |
|
Nama belakang |
|
Surel |
|
Nama pengguna |
|
Saat mengkonfigurasikan Weblate SP di IdP Anda, disarankan untuk memilih Format ID nama yang persisten.
Petunjuk
Beberapa penyedia identitas (seperti Microsoft Entra ID dengan autentikasi multifaktor) memerlukan penonaktifan requestedAuthnContext bawaan di konfigurasi keamanan SAML:
SOCIAL_AUTH_SAML_SECURITY_CONFIG = {"requestedAuthnContext": False}
In Docker, set WEBLATE_SAML_SECURITY_CONFIG instead.
Petunjuk
Contoh di atas dan gambar Docker mendefinisikan sebuah IdP bernama weblate. Anda mungkin perlu mengkonfigurasikan string ini sebagai Relay di IdP Anda.
Catatan
Autentikasi Weblate bergantung pada parameter RelayState yang akan diteruskan melalui proses autentikasi. Parameter ini perlu dikonfigurasi dengan beberapa penyedia identitas:
Lihat juga
Autentikasi LDAP¶
Autentikasi LDAP dapat dicapai dengan baik menggunakan paket django-auth-ldap. Anda dapat memasangnya melalui cara biasa:
# Using PyPI
uv pip install 'django-auth-ldap>=1.3.0'
# Using apt-get
apt-get install python-django-auth-ldap
Petunjuk
Paket ini sudah termasuk dalam kontainer Docker, lihat Memasang menggunakan Docker.
Catatan
Ada beberapa ketidakcocokan dalam modul Python LDAP 3.1.0, yang mungkin mencegah Anda untuk menggunakan versi tersebut. Jika Anda mendapatkan galat AttributeError: 'module' object has no attribute '_trace_level', menurunkan versi python-ldap ke 3.0.0 mungkin akan membantu.
Setelah Anda memasang paket, Anda dapat mengaitkannya ke dalam autentikasi 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",
}
# Optional: route "Forgot your password?" to your LDAP self-service page
PASSWORD_RESET_URL = "https://id.example.net/password-reset/"
# Hide the registration form
REGISTRATION_OPEN = False
Catatan
Anda harus menghapus 'social_core.backends.email.EmailAuth' dari pengaturan AUTHENTICATION_BACKENDS. Jika tidak, pengguna akan dapat mengatur kata sandi mereka di Weblate, dan mengautentikasikan menggunakan itu. Mempertahankan 'weblate.accounts.auth.WeblateUserBackend' tetap diperlukan untuk memberikan izin dan memfasilitasikan pengguna anonim. Ini juga akan memungkinkan Anda untuk masuk menggunakan akun admin lokal, jika Anda telah membuatnya (mis. dengan menggunakan createadmin).
Menggunakan kata sandi pengikat¶
Jika Anda tidak dapat menggunakan pengikatan langsung untuk autentikasi, Anda perlu menggunakan pencarian, dan menyediakan pengguna untuk diikat untuk pencarian. Contoh:
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)"
)
Integrasi 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
Lihat juga
Autentikasi CAS¶
Autentikasi CAS dapat dicapai menggunakan paket seperti Django CAS NG.
Langkah pertama adalah mengungkapkan kolom surel pengguna melalui CAS. Ini harus dikonfigurasikan pada server CAS itu sendiri dan mengharuskan Anda untuk menjalankan setidaknya CAS v2 karena CAS v1 tidak mendukung atribut sama sekali.
Langkah kedua adalah memperbarui Weblate untuk menggunakan server dan atribut CAS Anda.
Untuk memasang Django CAS NG:
uv pip install django-cas-ng
Setelah Anda memiliki paket yang terpasang, Anda dapat mengaitkannya dengan sistem autentikasi Django dengan memodifikasi berkas settings.py:
# 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")
Akhirnya, sebuah sinyal dapat digunakan untuk memetakan kolom surel ke objek pengguna. Agar ini bekerja, Anda harus mengimpor sinyal dari paket django-cas-ng dan menghubungkan kode Anda dengan sinyal ini. Melakukan hal ini di berkas pengaturan dapat menyebabkan masalah, oleh karena itu disarankan untuk meletakkannya:
Di dalam metode
django.apps.AppConfig.ready()konfigurasi aplikasi AndaDi dalam berkas
urls.pyproyek (ketika tidak ada model yang ada)
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()
Mengkonfigurasikan autentikasi Django pihak ketiga¶
Umumnya setiap pengaya autentikasi Django harus bekerja dengan Weblate. Cukup ikuti petunjuk untuk pengaya tersebut, ingatlah untuk tetap memasang backend pengguna Weblate.
Lihat juga
Biasanya pemasangan akan terdiri dari penambahan backend autentikasi ke AUTHENTICATION_BACKENDS dan memasang aplikasi autentikasi (jika ada) ke dalam INSTALLED_APPS:
AUTHENTICATION_BACKENDS = (
# Add authentication backend here
"weblate.accounts.auth.WeblateUserBackend",
)
INSTALLED_APPS += (
# Install authentication app here
)
Autentikasi dua faktor¶
Added in version 5.7.
Petunjuk
Autentikasi dua faktor menambahkan lapisan keamanan lain pada akun Anda dengan memerlukan lebih dari sekadar kata sandi untuk masuk.
Weblate mendukung faktor kedua berikut:
- Kunci keamanan (WebAuthn)
Keduanya, Kunci sandi dan kunci keamanan didukung.
Kunci sandi memvalidasikan identitas Anda menggunakan sentuhan, pengenalan wajah, kata sandi perangkat, atau PIN karena kunci sandi mencakup verifikasi pengguna.
Kunci keamanan adalah kredensial WebAuthn yang hanya dapat digunakan sebagai faktor kedua autentikasi, dan ini hanya memvalidasikan keberadaan pengguna.
- Aplikasi autentikator (TOTP)
Aplikasi autentikator dan ekstensi peramban seperti Aegis, Bitwarden, Google Authenticator, 1Password, Authy, Microsoft Authenticator, dsb. menghasilkan kata sandi sekali pakai berbasis waktu yang digunakan sebagai faktor kedua untuk memverifikasi identitas Anda saat diminta saat masuk.
- Kode pemulihan
Kode pemulihan dapat digunakan untuk mengakses akun Anda jika Anda kehilangan akses ke perangkat dan tidak dapat menerima kode autentikasi dua faktor.
Jaga keamanan kode pemulihan Anda sama seperti keamanan kata sandi Anda. Kami sarankan menyimpannya dengan pengelola kata sandi seperti Bitwarden, 1Password, Authy, atau Keeper.
Setiap pengguna dapat mengkonfigurasikan ini di Akun dan faktor kedua akan diperlukan untuk masuk sebagai tambahan terhadap metode autentikasi yang ada.
This can be enforced for users at the project (see Autentikasi dua faktor yang dipaksakan) or team level. In site-wide deployments, this can also be used to enforce two-factor authentication for all users by enabling it on the default Users team, which is assigned automatically to new users by automatic team assignment.
Izin tim dengan autentikasi dua faktor yang dipaksakan tidak akan diterapkan kepada pengguna yang tidak mengkonfigurasikannya.
Autentikasi sosial¶
Berkat Welcome to Python Social Auth’s documentation!, Weblate mendukung autentikasi menggunakan banyak layanan pihak ketiga seperti GitLab, Ubuntu, Fedora, dll.
Silakan periksa dokumentasi mereka untuk melihat petunjuk konfigurasi umum di Django Framework.
Catatan
Secara bawaan, Weblate mengandalkan layanan autentikasi pihak ketiga untuk memberikan alamat surel yang divalidasi. Jika beberapa layanan yang ingin Anda gunakan tidak mendukung ini, harap terapkan validasi surel di sisi Weblate dengan mengkonfigurasikan FORCE_EMAIL_VALIDATION untuk layanan tersebut. Sebagai contoh:
Lihat juga
Pipeline
Mengaktifkan backend individual cukup mudah, hanya masalah penambahan entri ke pengaturan
AUTHENTICATION_BACKENDSdan mungkin menambahkan kunci yang diperlukan untuk metode autentikasi yang diberikan. Harap dicatat bahwa beberapa backend tidak menyediakan surel pengguna secara bawaan, Anda harus memintanya secara eksplisit, jika tidak, Weblate tidak akan dapat mengkredit kontribusi yang dibuat pengguna dengan benar.Petunjuk
Sebagian besar backend autentikasi memerlukan HTTPS. Setelah HTTPS diaktifkan di server web Anda, silakan konfigurasikan Weblate untuk melaporkannya dengan benar menggunakan
ENABLE_HTTPS, atau denganWEBLATE_ENABLE_HTTPSdi kontainer Docker.Lihat juga
Backend Auth Sosial Python
Autentikasi OpenID¶
Untuk layanan berbasis OpenID biasanya hanya masalah pengaktifannya. Bagian berikut mengaktifkan autentikasi OpenID untuk OpenSUSE, Fedora, dan Ubuntu:
Lihat juga
OpenID
Autentikasi GitHub¶
Anda perlu mendaftarkan aplikasi OAuth di GitHub kemudian memberi tahu Weblate semua rahasianya:
GitHub harus dikonfigurasikan untuk memiliki URL panggilan balik sebagai
https://WEBLATE SERVER/accounts/complete/github/.Terdapat backend autentikasi serupa untuk GitHub for Organizations dan GitHub for Teams. Pengaturannya bernama
SOCIAL_AUTH_GITHUB_ORG_*danSOCIAL_AUTH_GITHUB_TEAM_*, dan keduanya memerlukan pengaturan tambahan untuk cakupannya -SOCIAL_AUTH_GITHUB_ORG_NAMEatauSOCIAL_AUTH_GITHUB_TEAM_ID. URL panggilan baliknya adalahhttps://WEBLATE SERVER/accounts/complete/github-org/danhttps://WEBLATE SERVER/accounts/complete/github-teams/.Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Lihat juga
GitHub
Autentikasi GitHub EE¶
Anda perlu mendaftarkan Aplikasi OAuth di GitHub EE dan kemudian memberi tahu Weblate semua rahasianya:
Aplikasi GitHub OAuth harus dikonfigurasikan untuk memiliki URL panggilan balik sebagai
https://WEBLATE SERVER/accounts/complete/github-enterprise/.Selain Aplikasi OAuth GitHub, Aplikasi GitHub juga dapat digunakan. Dengan Aplikasi GitHub, izin dapat diberikan pada repositori, organisasi, dan/atau tingkat pengguna. Jika Anda memutuskan untuk menggunakan Aplikasi GitHub, Anda perlu mengaktifkan izin Akses: Hanya baca untuk Pengguna - <Alamat surel> dan Organisasi - <Anggota>.
Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Lihat juga
GitHub Enterprise
Autentikasi Bitbucket¶
Anda perlu mendaftarkan aplikasi di Bitbucket kemudian memberi tahu Weblate semua rahasianya:
Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Lihat juga
Bitbucket
Google OAuth 2¶
Untuk menggunakan Google OAuth 2, Anda perlu mendaftarkan aplikasi OAuth di <https://console.developers.google.com/>.
URL pengalihannya adalah
https://WEBLATE SERVER/accounts/complete/google-oauth2/.Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Lihat juga
Google
Facebook OAuth 2¶
Seperti biasa dengan layanan OAuth 2, Anda harus mendaftarkan aplikasi Anda ke Facebook. Setelah ini selesai, Anda dapat menyiapkan Weblate untuk menggunakannya:
URL pengalihannya adalah
https://WEBLATE SERVER/accounts/complete/facebook/.Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Lihat juga
Facebook
GitLab OAuth 2¶
Untuk menggunakan GitLab OAuth 2, Anda perlu mendaftarkan aplikasi di <https://gitlab.com/profile/applications>.
URL pengalihannya adalah
https://WEBLATE SERVER/accounts/complete/gitlab/dan pastikan Anda menandai cakupan read_user.Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Lihat juga
GitLab
Gitea OAuth 2¶
Untuk menggunakan Gitea OAuth 2, Anda perlu mendaftarkan aplikasi di
https://GITEA SERVER/user/settings/applications.URL pengalihannya adalah
https://WEBLATE SERVER/accounts/complete/gitea/.Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Catatan
Konfigurasi di atas juga berfungsi dengan Forgejo; untuk contoh penyebaran produksi dengan Forgejo, lihat Codeberg Translate.
Lihat juga
Gitea
Microsoft Entra ID¶
Azure Active Directory (Azure AD) is now Microsoft Entra ID. Weblate keeps the
azuread-oauth2andazuread-tenant-oauth2backend names for compatibility with the underlying Python Social Auth backends and existing deployments.Weblate dapat dikonfigurasikan untuk menggunakan penyewa autentikasi umum atau spesifik.
URL pengalihannya adalah
https://WEBLATE SERVER/accounts/complete/azuread-oauth2/untuk umum danhttps://WEBLATE SERVER/accounts/complete/azuread-tenant-oauth2/untuk penyewa autentikasi khusus.Anda akan memerlukan hal berikut:
Application (client) ID is available on the app registration overview in the Microsoft Entra admin center. Object ID is not used in Weblate.
ID Direktori (penyewa) diperlukan untuk autentikasi cakupan penyewa, yang biasanya diinginkan.
Secret value is displayed once you create a client secret for the app registration. Secret ID is not used in Weblate.
Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Lihat juga
Microsoft Azure Active Directory
Slack¶
Untuk menggunakan Slack OAuth 2, Anda perlu mendaftarkan aplikasi di <https://api.slack.com/apps>.
URL pengalihannya adalah
https://WEBLATE SERVER/accounts/complete/slack/.Catatan
URL panggilan balik yang disediakan oleh Weblate selama autentikasi mencakup domain yang dikonfigurasi. Jika Anda mendapatkan galat tentang ketidakcocokan URL, Anda mungkin ingin memperbaikinya, lihat Atur domain situs yang benar.
Lihat juga
Slack
Menimpa nama dan ikon dari metode autentikasi¶
You can override the authentication method display name and icon using settings as
SOCIAL_AUTH_<NAME>_IMAGEandSOCIAL_AUTH_<NAME>_TITLE. For example overriding naming for Auth0 would look like:Mematikan autentikasi kata sandi¶
Autentikasi surel dan kata sandi dapat dimatikan dengan menghapus
social_core.backends.email.EmailAuthdariAUTHENTICATION_BACKENDS. Selalu simpanweblate.accounts.auth.WeblateUserBackenddi sana, ini diperlukan untuk fungsionalitas inti Weblate.Menonaktifkan autentikasi surel akan menonaktifkan semua fungsi yang terkait dengan surel dan undangan pengguna atau fitur pengaturan ulang kata sandi.
Tip
Anda masih dapat menggunakan autentikasi kata sandi untuk antarmuka admin, untuk pengguna yang Anda buat secara manual di sana. Cukup arahkan ke
/admin/login/.Misalnya, autentikasi hanya menggunakan penyedia Open ID openSUSE dapat dicapai dengan menggunakan yang berikut: