인증¶
사용자 등록¶
Weblate의 기본 설정은 python-social-auth를 사용하여 새 사용자 등록을 처리합니다. 이메일을 확인한 후 새 사용자는 서드파티 서비스를 사용하여 기여하거나 인증할 수 있습니다.
REGISTRATION_OPEN 을 사용하여 새 사용자 등록을 비활성화할 수도 있습니다.
인증 시도는 속도 제한 의 적용을 받습니다.
인증 백엔드¶
Weblate는 인증을 위해 Django에 의존합니다. 여기에는 내장 비밀번호 기반 인증, 소셜 인증, Django용 서드파티 인증 백엔드가 포함됩니다.
Django의 내장 인증을 사용하면 다른 Django 기반 프로젝트의 사용자 데이터베이스를 가져올 수 있습니다 ( Pootle에서 마이그레이션 참조).
더 보기
인증 설정 는 공식 Docker 이미지에서 인증을 구성하는 방법을 설명합니다.
비밀번호 인증¶
기본 settings.py 에는 약한 비밀번호가 허용되지 않도록 하는 합리적인 AUTH_PASSWORD_VALIDATORS 설정이 포함되어 있습니다. 비밀번호 정책에 맞게 이 설정을 사용자 지정할 수 있습니다.
또한 비밀번호 난이도를 상당히 현실적으로 추정하고 특정 임계값 미만의 비밀번호를 거부할 수 있는 django-zxcvbn-password-validator 를 설치할 수도 있습니다.
SAML 인증¶
Added in version 4.1.1.
버전 5.12에서 변경: SAML 인증의 종속 성분은 더 이상 기본 all 추가 항목에 포함되지 않습니다. pip을 사용하여 Weblate 패키지를 설치할 때 saml 을 포함해야 합니다 (uv pip install Weblate[all,saml]).
구성에 대해서는 Python Social Auth 지침을 따르세요. 주요 차이점:
Weblate는
SOCIAL_AUTH_SAML_ENABLED_IDPS에서weblate로 지정해야 하는 단일 IDP를 지원합니다.SAML XML 메타데이터 URL은
/accounts/metadata/saml/이며, 엔티티 ID이기도 합니다.로그인 URL은
/accounts/complete/saml/입니다 (ACS URL이라고도 함).다음 설정은 자동으로 채워짐:
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==",
}
}
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"
}
다음을 사용하여 새 키 쌍을 생성할 수 있음:
openssl req -newkey rsa:4096 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.key
기본 설정은 다음 속성에서 사용자 정보를 추출합니다. IdP에서 이를 제공하도록 설정하세요:
속성 |
SAML URI 참조 |
|---|---|
성명 |
|
이름 |
|
성 |
|
이메일 |
|
사용자 이름 |
|
IdP에서 Weblate SP를 구성할 때, 영구 Name ID 형식 을 선택하는 것이 권장됩니다.
힌트
일부 ID 공급자(예: multi-factor authentication을 지원하는 Microsoft Entra ID)는 SAML 보안 구성에서 기본값인 requestedAuthnContext 를 비활성화해야 합니다.
SOCIAL_AUTH_SAML_SECURITY_CONFIG = {"requestedAuthnContext": False}
Docker 환경에서는 대신 WEBLATE_SAML_SECURITY_CONFIG 를 지정하세요.
힌트
위의 예시와 Docker 이미지는 weblate 라는 IdP를 정의합니다. IdP에서 이 문자열을 Relay 로 설정해야 할 수 있습니다.
참고
Weblate 인증은 인증 프로세스를 통해 RelayState 매개변수가 전달되는 것에 의존합니다. 일부 ID 제공자에서는 이를 설정해야 함:
더 보기
LDAP 인증¶
LDAP 인증은 django-auth-ldap 패키지를 사용하여 가장 잘 구현할 수 있습니다. 일반적인 방법으로 설치할 수 있음:
# Using PyPI
uv 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",
}
# 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
참고
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 v1은 속성을 전혀 지원하지 않으므로 최소 CAS v2를 실행해야 합니다.
2단계는 Weblate를 업데이트하여 CAS 서버와 속성을 사용하도록 하는 것입니다.
Django CAS NG 설치:
uv 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 패키지에서 시그널을 가져와 코드를 이 시그널에 연결해야 합니다. 설정 파일에서 이 작업을 하면 문제가 발생할 수 있으므로 다음 위치에 배치하는 것이 좋음:
앱 설정의
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 에 인증 백엔드를 추가하고 (존재하는 경우) 인증 앱을 INSTALLED_APPS 에 설치하는 것이 포함됨:
AUTHENTICATION_BACKENDS = (
# Add authentication backend here
"weblate.accounts.auth.WeblateUserBackend",
)
INSTALLED_APPS += (
# Install authentication app here
)
2단계 인증¶
Added in version 5.7.
힌트
2단계 인증은 비밀번호 이외에 다른 정보도 요구하여 계정의 보안을 한 단계 더 강화합니다.
Weblate는 다음과 같은 2차 인증 요소를 지원함:
- 보안 키 (WebAuthn)
패스키와 보안 키 모두 지원됩니다.
패스키는 사용자 확인을 포함하므로 터치, 얼굴 인식, 기기 비밀번호 또는 PIN을 사용하여 신원을 확인합니다.
보안 키는 2차 인증 요소로만 사용할 수 있는 WebAuthn 자격 증명이며, 사용자의 존재 여부만 확인합니다.
- 인증 앱 (TOTP)
Aegis, Bitwarden, Google Authenticator, 1Password, Authy, Microsoft Authenticator 등의 인증 앱 및 브라우저 확장 프로그램은 로그인 시 본인 확인을 위한 2차 인증 요소로 사용되는 시간 기반 일회용 비밀번호를 생성합니다.
Registration becomes active only after you verify a code from the app. Complete registration within 24 hours; otherwise start again with a new QR code. Each registration can be completed only once. After registering, wait for the next code before using the app to sign in.
Only one registration can be pending per account. Opening registration in another browser session shows the same QR code until registration is completed or expires.
- 복구 코드
복구 코드는 기기에 대한 접근 권한을 잃고 2단계 인증 코드를 받을 수 없는 경우 계정에 접근하는 데 사용할 수 있습니다.
복구 코드를 비밀번호만큼 안전하게 보관하세요. Bitwarden, 1Password, Authy 또는 Keeper와 같은 비밀번호 관리자에 저장하는 것을 권장합니다.
각 사용자는 계정 에서 이를 설정할 수 있으며, 기존 인증 방법 외에 2차 인증이 로그인 시 요구됩니다.
이는 프로젝트 ( 강제 2단계 인증 참조) 또는 팀 수준에서 사용자에 대해 강제할 수 있습니다. 사이트 전체 배포에서는 기본 사용자 팀에서 활성화하여 모든 사용자에 대해 2단계 인증을 강제할 수도 있습니다. 이 팀은 자동 팀 할당 에 의해 새 사용자에게 자동으로 배정됩니다.
2단계 인증이 강제된 팀의 권한은 이를 설정하지 않은 사용자에게 적용되지 않습니다.
소셜 인증¶
Welcome to Python Social Auth’s documentation! 덕분에 Weblate는 GitLab, Ubuntu, Fedora 등 다양한 서드파티 서비스를 사용한 인증을 지원합니다.
일반 설정 지침은 Django Framework 문서를 참조하세요.
참고
기본적으로 Weblate는 검증된 이메일 주소를 제공하기 위해 서드파티 인증 서비스에 의존합니다. 사용하려는 서비스 중 일부가 이를 지원하지 않는 경우, 해당 서비스에 대해 FORCE_EMAIL_VALIDATION을 구성하여 Weblate 측에서 이메일 검증을 강제하세요. 예:
더 보기
Pipeline
개별 백엔드를 활성화하는 것은 매우 간단합니다.
AUTHENTICATION_BACKENDS설정에 항목을 추가하고, 필요시 해당 인증 방법에 필요한 키를 추가하기만 하면 됩니다. 일부 백엔드는 기본적으로 사용자 이메일을 제공하지 않으므로 명시적으로 요청해야 합니다. 그렇지 않으면 Weblate가 사용자의 기여를 올바르게 인정할 수 없습니다.힌트
대부분의 인증 백엔드는 HTTPS가 필요합니다. 웹 서버에서 HTTPS를 활성화한 후
ENABLE_HTTPS또는 Docker 컨테이너의WEBLATE_ENABLE_HTTPS를 사용하여 Weblate가 이를 올바르게 보고하도록 설정하세요.더 보기
Python Social Auth 백엔드
OpenID 인증¶
OpenID 기반 서비스의 경우 보통 활성화만 하면 됩니다. 다음 섹션은 OpenSUSE, Fedora 및 Ubuntu에 대해 OpenID 인증을 활성화함:
더 보기
OpenID
GitHub 인증¶
GitHub에 OAuth 애플리케이션을 등록한 후 Weblate에 해당 시크릿을 모두 알려야 함:
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 EE 인증¶
GitHub EE에 OAuth 앱을 등록한 후 Weblate에 해당 시크릿을 모두 알려야 함:
GitHub OAuth 앱의 콜백 URL을
https://WEBLATE SERVER/accounts/complete/github-enterprise/로 설정해야 합니다.GitHub OAuth 앱 대신 GitHub 앱을 사용할 수도 있습니다. GitHub 앱을 사용하면 저장소, 조직 및/또는 사용자 수준에서 권한을 부여할 수 있습니다. GitHub 앱을 사용하기로 결정한 경우 Users - <Email addresses> 및 Organisation - <Members>에 대해 Access: Read-only 권한을 활성화해야 합니다.
참고
Weblate는 인증 중에 구성된 도메인을 포함한 콜백 URL을 제공합니다. URL 불일치 관련 오류가 발생하면 이를 수정해야 할 수 있습니다. 올바른 사이트 도메인 설정 를 참조하세요.
더 보기
Backend classes
Bitbucket 인증¶
Bitbucket에 애플리케이션을 등록한 후 Weblate에 해당 시크릿을 모두 알려야 함:
참고
Weblate는 인증 중에 구성된 도메인을 포함한 콜백 URL을 제공합니다. URL 불일치 관련 오류가 발생하면 이를 수정해야 할 수 있습니다. 올바른 사이트 도메인 설정 를 참조하세요.
더 보기
Bitbucket
Google OAuth 2¶
Google OAuth 2를 사용하려면 <https://console.developers.google.com/>에서 OAuth 애플리케이션을 등록해야 합니다.
리디렉션 URL은
https://WEBLATE SERVER/accounts/complete/google-oauth2/입니다.참고
Weblate는 인증 중에 구성된 도메인을 포함한 콜백 URL을 제공합니다. URL 불일치 관련 오류가 발생하면 이를 수정해야 할 수 있습니다. 올바른 사이트 도메인 설정 를 참조하세요.
더 보기
Google
Facebook OAuth 2¶
일반적인 OAuth 2 서비스와 마찬가지로 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
Gitea OAuth 2¶
Gitea OAuth 2를 사용하려면
https://GITEA SERVER/user/settings/applications에서 애플리케이션을 등록해야 합니다.리디렉션 URL은
https://WEBLATE SERVER/accounts/complete/gitea/입니다.참고
Weblate는 인증 중에 구성된 도메인을 포함한 콜백 URL을 제공합니다. URL 불일치 관련 오류가 발생하면 이를 수정해야 할 수 있습니다. 올바른 사이트 도메인 설정 를 참조하세요.
참고
위의 구성은 Forgejo에서도 작동하며, Forgejo를 사용한 프로덕션 배포의 예는 Codeberg 번역자 을 참조하세요.
더 보기
Gitea
Microsoft Entra ID¶
Azure Active Directory(Azure AD)는 이제 Microsoft Entra ID입니다. Weblate는 기존 Python Social Auth 백엔드 및 기존 배포와의 호환성을 위해
azuread-oauth2및azuread-tenant-oauth2백엔드 이름을 유지합니다.Weblate는 공통 또는 특정 테넌트를 인증에 사용하도록 구성할 수 있습니다.
리디렉션 URL은 공통 인증의 경우
https://WEBLATE SERVER/accounts/complete/azuread-oauth2/, 테넌트별 인증의 경우https://WEBLATE SERVER/accounts/complete/azuread-tenant-oauth2/입니다.다음이 필요함:
Application (client) ID 는 Microsoft Entra 관리 센터의 앱 등록 개요에서 확인할 수 있습니다. Object ID 는 Weblate에서 사용되지 않습니다.
Directory (tenant) ID 는 일반적으로 원하는 테넌트 범위 인증에 필요합니다.
Secret value 는 앱 등록의 클라이언트 시크릿을 생성하면 표시됩니다. Secret ID 는 Weblate에서 사용되지 않습니다.
참고
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 제공자만 사용한 인증은 다음과 같이 구성할 수 있음: