# Autenticació

## Registre d’usuari

La configuració predeterminada de Weblate és utilitzar python-social-auth, un formulari del lloc web per gestionar el registre de nous usuaris. Després de confirmar el seu correu electrònic, un nou usuari pot contribuir o autenticar-se mitjançant un dels serveis de tercers.

També podeu desactivar el registre d’usuaris nous mitjançant [`REGISTRATION_OPEN`](https://docs.weblate.org/ca/latest/admin/config.md#std-setting-REGISTRATION_OPEN).

Els intents d’autenticació estan subjectes a [Limitació de tarifes](https://docs.weblate.org/ca/latest/admin/optionals.md#rate-limit).

## Backends d’autenticació

Weblate confia en Django per a l’autenticació. Això inclou l’autenticació integrada basada en contrasenyes, l’autenticació social i els backends d’autenticació de tercers per a Django.

L’ús de l’autenticació integrada de Django significa que podeu importar la base de dades d’usuaris d’altres projectes basats en Django (vegeu [Migrant des de Pootle](https://docs.weblate.org/ca/latest/admin/upgrade.md#pootle-migration)).

#### SEE ALSO
[Configuració d’autenticació](https://docs.weblate.org/ca/latest/admin/install/docker.md#docker-auth) descriu com configurar l’autenticació a la imatge oficial de Docker.

## Autenticació social

Gràcies a [Welcome to Python Social Auth’s documentation!](https://python-social-auth.readthedocs.io/en/latest/index.html), Weblate admet l’autenticació mitjançant molts serveis de tercers com GitLab, Ubuntu, Fedora, etc.

Consulteu la seva documentació per obtenir instruccions genèriques de configuració a [Django Framework](https://python-social-auth.readthedocs.io/en/latest/configuration/django.html).

#### NOTE
Per defecte, Weblate es basa en serveis d’autenticació de tercers per proporcionar una adreça de correu electrònic validada. Si alguns dels serveis que voleu utilitzar no ho admeten, feu servir la validació del correu electrònic al costat de Weblate configurant FORCE_EMAIL_VALIDATION per a ells. Per exemple:

```python
SOCIAL_AUTH_OPENSUSE_FORCE_EMAIL_VALIDATION = True
```

#### SEE ALSO
[Pipeline](https://python-social-auth.readthedocs.io/en/latest/pipeline.html)

Habilitar backends individuals és bastant fàcil, només es tracta d’afegir una entrada a la configuració [`AUTHENTICATION_BACKENDS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTHENTICATION_BACKENDS) i possiblement d’afegir les claus necessàries per a un mètode d’autenticació determinat. Tingueu en compte que alguns backends no proporcionen correu electrònic de l’usuari de manera predeterminada, l’heu de sol·licitar de manera explícita, en cas contrari, Weblate no podrà acreditar correctament les contribucions que fan els usuaris.

#### HINT
La majoria dels backends d’autenticació requereixen HTTPS. Una vegada que HTTPS estigui habilitat al vostre servidor web, configureu Weblate per informar-ne correctament mitjançant [`ENABLE_HTTPS`](https://docs.weblate.org/ca/latest/admin/config.md#std-setting-ENABLE_HTTPS), o per [`WEBLATE_ENABLE_HTTPS`](https://docs.weblate.org/ca/latest/admin/install/docker.md#envvar-WEBLATE_ENABLE_HTTPS) al contenidor de Docker.

#### SEE ALSO
[Backend Python Social Auth](https://python-social-auth.readthedocs.io/en/latest/backends/index.html)

### Autenticació OpenID

Per als serveis basats en OpenID, normalment només es tracta d’habilitar-los. La secció següent habilita l’autenticació OpenID per a OpenSUSE, Fedora i Ubuntu:

```python
# 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",
)
```

#### SEE ALSO
[OpenID](https://python-social-auth.readthedocs.io/en/latest/backends/openid.html)

<a id="github-auth"></a>

### Autenticació GitHub

Heu de registrar una aplicació OAuth a GitHub i, a continuació, dir-li a Weblate tots els seus secrets:

```python
# 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"]
```

El GitHub s’ha de configurar per tenir un URL de retorn de trucada com a `https://WEBLATE SERVER/accounts/complete/github/`.

There are similar authentication backends for GitHub for Organizations and
GitHub for Teams. Their settings are named `SOCIAL_AUTH_GITHUB_ORG_*` and
`SOCIAL_AUTH_GITHUB_TEAM_*`, and they require additional setting of the scope
- `SOCIAL_AUTH_GITHUB_ORG_NAME` or `SOCIAL_AUTH_GITHUB_TEAM_ID`. Their
callback URLs are `https://WEBLATE SERVER/accounts/complete/github-org/` and
`https://WEBLATE SERVER/accounts/complete/github-teams/`.

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### SEE ALSO
[GitHub](https://python-social-auth.readthedocs.io/en/latest/backends/github.html)

<a id="github-ee-auth"></a>

### GitHub EE authentication

Heu de registrar una aplicació OAuth a GitHub EE i després dir-li a Weblate tots els seus secrets:

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.github_enterprise.GithubEnterpriseOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GITHUB_ENTERPRISE_KEY = "GitHub OAuth App Client ID"
SOCIAL_AUTH_GITHUB_ENTERPRISE_SECRET = "GitHub OAuth App Client Secret"
SOCIAL_AUTH_GITHUB_ENTERPRISE_URL = "https://git.example.com/"
SOCIAL_AUTH_GITHUB_ENTERPRISE_API_URL = "https://git.example.com/api/v3/"
SOCIAL_AUTH_GITHUB_ENTERPRISE_SCOPE = ["user:email"]
```

L’aplicació OAuth de GitHub s’ha de configurar per tenir un URL de retorn de trucada com a `https://WEBLATE SERVER/accounts/complete/github-enterprise/`.

En lloc de l’aplicació GitHub OAuth, també es pot utilitzar l’aplicació GitHub. Amb l’aplicació GitHub, es poden concedir permisos a nivell de repositoris, organització i/o usuari. Si decidiu utilitzar l’aplicació GitHub, heu d’habilitar el permís «Accés: només de lectura» per als usuaris - <Email addresses> i l’organització - <Members>.

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### SEE ALSO
[Backend classes](https://python-social-auth.readthedocs.io/en/latest/backends/github_enterprise.html)

<a id="bitbucket-auth"></a>

### Autenticació Bitbucket

Heu de registrar una aplicació a Bitbucket i després dir-li a Weblate tots els seus secrets:

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.bitbucket.BitbucketOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_BITBUCKET_OAUTH2_KEY = "Bitbucket Client ID"
SOCIAL_AUTH_BITBUCKET_OAUTH2_SECRET = "Bitbucket Client Secret"
SOCIAL_AUTH_BITBUCKET_OAUTH2_VERIFIED_EMAILS_ONLY = True
```

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### SEE ALSO
[Bitbucket](https://python-social-auth.readthedocs.io/en/latest/backends/bitbucket.html)

<a id="google-auth"></a>

### Google OAuth 2

Per utilitzar Google OAuth 2, heu de registrar una aplicació OAuth a <[https://console.developers.google.com/](https://console.developers.google.com/)>.

L’URL de redirecció és `https://WEBLATE SERVER/accounts/complete/google-oauth2/`.

```python
# 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"
```

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### SEE ALSO
[Google](https://python-social-auth.readthedocs.io/en/latest/backends/google.html)

<a id="facebook-auth"></a>

### Facebook OAuth 2

Com és habitual amb els serveis OAuth 2, heu de registrar la vostra aplicació a Facebook. Un cop fet això, podeu configurar Weblate per utilitzar-lo:

L’URL de redirecció és `https://WEBLATE SERVER/accounts/complete/facebook/`.

```python
# 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"]
```

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### SEE ALSO
[Facebook](https://python-social-auth.readthedocs.io/en/latest/backends/facebook.html)

<a id="gitlab-auth"></a>

### GitLab OAuth 2

Per utilitzar GitLab OAuth 2, heu de registrar una aplicació a <[https://gitlab.com/profile/applications](https://gitlab.com/profile/applications)>.

L’URL de redirecció és `https://WEBLATE SERVER/accounts/complete/gitlab/` i assegureu-vos de marcar l’àmbit read_user.

```python
# 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/'
```

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### SEE ALSO
[GitLab](https://python-social-auth.readthedocs.io/en/latest/backends/gitlab.html)

<a id="gitea-auth"></a>

### Gitea OAuth 2

Per utilitzar Gitea OAuth 2, heu de registrar una aplicació a `https://GITEA SERVER/user/settings/applications`.

L’URL de redirecció és `https://WEBLATE SERVER/accounts/complete/gitea/`.

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.gitea.GiteaOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Social auth backends setup
SOCIAL_AUTH_GITEA_KEY = ""
SOCIAL_AUTH_GITEA_SECRET = ""

# If you are using your own Gitea
SOCIAL_AUTH_GITEA_API_URL = "https://gitea.example.com/"
```

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### NOTE
La configuració anterior també funciona amb Forgejo; per obtenir un exemple de desplegament de producció amb Forgejo, vegeu [Codeberg Translate](https://translate.codeberg.org).

#### SEE ALSO
[Gitea](https://python-social-auth.readthedocs.io/en/latest/backends/gitea.html)

<a id="azure-auth"></a>

<a id="entra-auth"></a>

### ID d’entrada de Microsoft

L’Azure Active Directory (Azure AD) és ara Microsoft Entra ID. Weblate manté els noms de backend `azuread-oauth2` i `azuread-tenant-oauth2` per a la compatibilitat amb els backends subjacents de Python Social Auth i els desplegaments existents.

Weblate es pot configurar per utilitzar inquilins comuns o específics per a l’autenticació.

L’URL de redirecció és `https://WEBLATE SERVER/accounts/complete/azuread-oauth2/` per a l’autenticació comuna i `https://WEBLATE SERVER/accounts/complete/azuread-tenant-oauth2/` per a l’autenticació específica de l’inquilí.

Necessitareu el següent:

* *L’identificador de l’aplicació (client)* està disponible a la visió general del registre de l’aplicació al centre d’administració de Microsoft Entra. *L’ID d’objecte* no s’utilitza a Weblate.
* *L’identificador del directori (inquilí)* és necessari per a l’autenticació de l’àmbit de l’inquilí, el que normalment es desitja.
* *El valor secret* es mostra un cop creeu un secret de client per al registre de l’aplicació. *La identificació secreta* no s’utilitza a Weblate.

```python
# Microsoft Entra ID 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 = ""
```

```python
# Microsoft Entra ID with Tenant

# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.azuread_tenant.AzureADTenantOAuth2",
    "social_core.backends.email.EmailAuth",
    "weblate.accounts.auth.WeblateUserBackend",
)

# Application (client) ID
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_KEY = ""
# Secret value
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET = ""
# Directory (tenant) ID
SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID = ""
```

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### SEE ALSO
[Microsoft Entra ID and Azure AD B2C](https://python-social-auth.readthedocs.io/en/latest/backends/azuread.html)

<a id="slack-auth"></a>

### Slack

Per utilitzar Slack OAuth 2, heu de registrar una aplicació a <[https://api.slack.com/apps](https://api.slack.com/apps)>.

L’URL de redirecció és `https://WEBLATE SERVER/accounts/complete/slack/`.

```python
# 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 = ""
```

#### NOTE
L’URL de retorn de trucada proporcionat per Weblate durant l’autenticació inclou el domini configurat. En cas que rebeu errors sobre la discrepància d’URL, potser voldreu solucionar-ho, consulteu [Establiu el domini del lloc correcte](https://docs.weblate.org/ca/latest/admin/install.md#production-site).

#### SEE ALSO
[Slack](https://python-social-auth.readthedocs.io/en/latest/backends/slack.html)

### Anul·lació de noms i icones de mètodes d’autenticació

Podeu substituir el nom de visualització i la icona del mètode d’autenticació mitjançant la configuració com `SOCIAL_AUTH_<NAME>_IMAGE` i `SOCIAL_AUTH_<NAME>_TITLE`. Per exemple, anul·lar el nom per a Auth0 seria així:

```python
SOCIAL_AUTH_AUTH0_IMAGE = "custom.svg"
SOCIAL_AUTH_AUTH0_TITLE = "Custom auth"
```

<a id="disable-email-auth"></a>

### S’està desactivant l’autenticació de contrasenya

L’autenticació de correu electrònic i contrasenya es pot desactivar eliminant `social_core.backends.email.EmailAuth` de [`AUTHENTICATION_BACKENDS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTHENTICATION_BACKENDS). Mantingueu sempre allà `weblate.accounts.auth.WeblateUserBackend`, és necessari per a la funcionalitat bàsica de Weblate.

Si desactiveu l’autenticació del correu electrònic, es desactivarà tota la funcionalitat relacionada amb el correu electrònic: invitació d’usuari o funció de restabliment de la contrasenya.

#### TIP
Encara podeu utilitzar l’autenticació de contrasenya per a la interfície d’administració, per als usuaris que hi creeu manualment. Només cal que aneu a `/admin/login/`.

Per exemple, l’autenticació utilitzant només el proveïdor d’openSUSE Open ID es pot aconseguir mitjançant el següent:

```python
# Authentication configuration
AUTHENTICATION_BACKENDS = (
    "social_core.backends.suse.OpenSUSEOpenId",
    "weblate.accounts.auth.WeblateUserBackend",
)
```

<a id="password-authentication"></a>

## Autenticació de contrasenya

El `settings.py` predeterminat inclou un conjunt raonable de [`AUTH_PASSWORD_VALIDATORS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTH_PASSWORD_VALIDATORS) que garanteix que no es permetin contrasenyes febles. Podeu personalitzar aquesta configuració perquè coincideixi amb la vostra política de contrasenyes.

A més, també podeu instal·lar [django-zxcvbn-password-validator](https://github.com/Pierre-Sassoulas/django-zxcvbn-password-validator) que ofereix estimacions força realistes de la dificultat de la contrasenya i permet rebutjar contrasenyes per sota d’un determinat llindar.

#### SEE ALSO
* [`PASSWORD_MINIMAL_STRENGTH`](https://docs.weblate.org/ca/latest/admin/config.md#std-setting-PASSWORD_MINIMAL_STRENGTH)
* [`WEBLATE_MIN_PASSWORD_SCORE`](https://docs.weblate.org/ca/latest/admin/install/docker.md#envvar-WEBLATE_MIN_PASSWORD_SCORE)
* [Password security](https://docs.weblate.org/ca/latest/security/passwords.md)

<a id="saml-auth"></a>

## Autenticació SAML

#### Versionadded
Afegit a la versió 4.1.1.

#### Versionchanged
Canviat a la versió 5.12: Les dependències per a l’autenticació SAML ja no s’inclouen als extres per defecte `tots`. Heu d’incloure `saml` mentre instal·leu el paquet Weblate amb pip (`uv pip install Weblate[all,saml]`).

Si us plau, seguiu les instruccions d’autenticació social de Python per a la configuració. Diferències notables:

* Weblate admet IDP únic que s’ha d’anomenar `weblate` a `SOCIAL_AUTH_SAML_ENABLED_IDPS`.
* L’URL de metadades XML de SAML és `/accounts/metadata/saml/`, que també és un identificador d’entitat.
* L’URL d’inici de sessió és `/accounts/complete/saml/` (també conegut com a URL ACS).
* La configuració següent s’omple automàticament: `SOCIAL_AUTH_SAML_SP_ENTITY_ID`, `SOCIAL_AUTH_SAML_TECHNICAL_CONTACT`, `SOCIAL_AUTH_SAML_SUPPORT_CONTACT`

Exemple de configuració:

```default
# 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"
}
```

Podeu generar un nou parell de claus utilitzant:

```sh
openssl req -newkey rsa:4096 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.key
```

La configuració predeterminada extreu els detalls de l’usuari dels atributs següents, configureu el vostre IdP per proporcionar-los:

| Attribute          | SAML URI reference                  |
|--------------------|-------------------------------------|
| Nom complet        | `urn:oid:2.5.4.3`                   |
| First name         | `urn:oid:2.5.4.42`                  |
| Last name          | `urn:oid:2.5.4.4`                   |
| Adreça electrònica | `urn:oid:0.9.2342.19200300.100.1.3` |
| Nom d’usuari       | `urn:oid:0.9.2342.19200300.100.1.1` |

Quan configureu Weblate SP al vostre IdP, es recomana triar Format d’ID de nom persistent.

#### HINT
Some identity providers (such as Microsoft Entra ID with multi-factor
authentication) require disabling the default `requestedAuthnContext`
in the SAML security configuration:

```python
SOCIAL_AUTH_SAML_SECURITY_CONFIG = {"requestedAuthnContext": False}
```

In Docker, set [`WEBLATE_SAML_SECURITY_CONFIG`](https://docs.weblate.org/ca/latest/admin/install/docker.md#envvar-WEBLATE_SAML_SECURITY_CONFIG) instead.

#### HINT
L’exemple anterior i la imatge de Docker defineixen un IdP anomenat `weblate`. És possible que hàgiu de configurar aquesta cadena com a Relay al vostre IdP.

#### NOTE
L’autenticació de Weblate es basa en el paràmetre `RelayState` que s’ha de passar pel procés d’autenticació. Això s’ha de configurar amb alguns proveïdors d’identitat:

* [Com enviar un RelayState personalitzat amb Okta](https://support.okta.com/help/s/article/How-to-send-a-custom-relaystate-to-application-through-idp-initiated-authentication-urls)

#### SEE ALSO
* [Configuració de SAML a Docker](https://docs.weblate.org/ca/latest/admin/install/docker.md#docker-saml)
* [SAML](https://python-social-auth.readthedocs.io/en/latest/backends/saml.html)

<a id="ldap-auth"></a>

## Autenticació LDAP

L’autenticació LDAP es pot aconseguir millor utilitzant el paquet django-auth-ldap. Podeu instal·lar-lo mitjançant els mitjans habituals:

```sh
# Using PyPI
uv pip install 'django-auth-ldap>=1.3.0'

# Using apt-get
apt-get install python-django-auth-ldap
```

#### HINT
Aquest paquet està inclòs al contenidor de Docker, vegeu [Instal·lació mitjançant Docker](https://docs.weblate.org/ca/latest/admin/install/docker.md).

#### NOTE
Hi ha algunes incompatibilitats al mòdul Python LDAP 3.1.0, que poden impedir que utilitzeu aquesta versió. Si obteniu l’error [AttributeError: l’objecte “mòdul” no té l’atribut “_trace_level”](https://github.com/python-ldap/python-ldap/issues/226), la baixada de python-ldap a 3.0.0 pot ajudar.

Un cop hàgiu instal·lat el paquet, podeu connectar-lo a l’autenticació de Django:

```python
# 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
```

#### NOTE
Hauríeu d’eliminar `'social_core.backends.email.EmailAuth'` de la configuració [`AUTHENTICATION_BACKENDS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTHENTICATION_BACKENDS), en cas contrari els usuaris podran establir la seva contrasenya a Weblate i autenticar-se utilitzant-la. Mantenir `'weblate.accounts.auth.WeblateUserBackend'` encara és necessari per obtenir permisos i facilitar usuaris anònims. També us permetrà iniciar la sessió amb un compte d’administrador local, si l’heu creat (per exemple, utilitzant [`createadmin`](https://docs.weblate.org/ca/latest/admin/management.md#weblate-admin-createadmin)).

### Utilitzant la contrasenya d’enllaç

Si no podeu utilitzar l’enllaç directe per a l’autenticació, haureu d’utilitzar la cerca i proporcionar un usuari per vincular-lo per a la cerca. Per exemple:

```python
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 integration

```python
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
```

#### SEE ALSO
* [Django Authentication Using LDAP](https://django-auth-ldap.readthedocs.io/en/latest/index.html)
* [Authentication](https://django-auth-ldap.readthedocs.io/en/latest/authentication.html)

<a id="cas-auth"></a>

## Autenticació CAS

L’autenticació CAS es pot aconseguir mitjançant un paquet com [Django CAS NG](https://github.com/django-cas-ng/django-cas-ng).

El primer pas és revelar el camp de correu electrònic de l’usuari mitjançant CAS. Això s’ha de configurar al propi servidor CAS i requereix que executeu almenys CAS v2, ja que CAS v1 no admet en absolut els atributs.

El segon pas és actualitzar Weblate per utilitzar el servidor CAS i els atributs.

Per instal·lar [Django CAS NG](https://github.com/django-cas-ng/django-cas-ng):

```sh
uv pip install django-cas-ng
```

Un cop tingueu el paquet instal·lat, podeu connectar-lo al sistema d’autenticació de Django modificant el fitxer `settings.py`:

```python
# 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")
```

Finalment, es pot utilitzar un senyal per assignar el camp de correu electrònic a l’objecte d’usuari. Perquè això funcioni, heu d’importar el senyal del paquet django-cas-ng i connectar el vostre codi amb aquest senyal. Fer-ho al fitxer de configuració pot causar problemes, per tant, es recomana posar-ho:

- Al mètode [`django.apps.AppConfig.ready()`](https://docs.djangoproject.com/en/stable/ref/applications/#django.apps.AppConfig.ready) de la configuració de l’aplicació
- Al fitxer `urls.py` del projecte (quan no existeixen models)

```python
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()
```

## Configuració de l’autenticació de Django de tercers

En general, qualsevol connector d’autenticació de Django hauria de funcionar amb Weblate. Només cal que seguiu les instruccions del connector, només recordeu mantenir instal·lat el backend de l’usuari de Weblate.

#### SEE ALSO
* [Autenticació LDAP](#ldap-auth)
* [Autenticació CAS](#cas-auth)

Normalment, la instal·lació consistirà en afegir un backend d’autenticació a [`AUTHENTICATION_BACKENDS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-AUTHENTICATION_BACKENDS) i instal·lar una aplicació d’autenticació (si n’hi ha) a [`INSTALLED_APPS`](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-INSTALLED_APPS):

```python
AUTHENTICATION_BACKENDS = (
    # Add authentication backend here
    "weblate.accounts.auth.WeblateUserBackend",
)

INSTALLED_APPS += (
    # Install authentication app here
)
```

<a id="fa"></a>

# Autenticació de doble factor

#### Versionadded
Afegit a la versió 5.7.

#### HINT
L’autenticació de dos factors afegeix una altra capa de seguretat al vostre compte ja que requereix més que una contrasenya per iniciar la sessió.

Weblate supports the following second factors:

Claus de seguretat (WebAuthn)
: Both, Passkeys and security keys are supported.
  <br/>
  Les claus d’accés validen la vostra identitat mitjançant el tacte, el reconeixement facial, la contrasenya del dispositiu o un PIN, ja que inclouen la verificació d’usuari.
  <br/>
  Les claus de seguretat són credencials de WebAuthn que només es poden utilitzar com a segon factor d’autenticació i només validen la presència de l’usuari.
  <br/>
  When signing in on a new computer or in a different browser, your passkey
  might not be available. Use a device where the passkey is available, or
  connect your registered security key. A verification error can mean that
  the request timed out, was canceled, or that the credential is unavailable;
  it does not identify the exact cause.
  <br/>
  You can also select another configured verification method on the sign-in
  page, such as Use recovery codes. If you cannot use any configured
  method, contact the site administrator for help.

Aplicacions d’autenticació (TOTP)
: Les aplicacions d’autenticació i les extensions del navegador com Aegis, Bitwarden, Google Authenticator, 1Password, Authy, Microsoft Authenticator, etc. generen contrasenyes d’un sol ús basades en el temps que s’utilitzen com a segon factor per verificar la vostra identitat quan se us demani durant l’inici de sessió.
  <br/>
  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.
  <br/>
  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.

Codis de recuperació
: Els codis de recuperació es poden utilitzar per accedir al vostre compte si perdeu l’accés al dispositiu i no podeu rebre codis d’autenticació de dos factors.
  <br/>
  Mantingueu els vostres codis de recuperació tan segurs com la vostra contrasenya. Us recomanem que les deseu amb un gestor de contrasenyes com ara Bitwarden, 1Password, Authy o Keeper.

![image](screenshots/authentication.webp)

Cada usuari pot configurar-ho a [Compte](https://docs.weblate.org/ca/latest/user/profile.md#profile-account) i caldrà que signi un segon factor a més del mètode d’autenticació existent.

Això es pot aplicar per als usuaris del projecte (vegeu [Autenticació de doble factor obligatòria](https://docs.weblate.org/ca/latest/admin/projects.md#project-enforced-2fa)) o a nivell d’equip. En els desplegaments a tot el lloc, també es pot utilitzar per fer complir l’autenticació de dos factors per a tots els usuaris activant-la a l’equip predeterminat Usuaris, que s’assigna automàticament als nous usuaris mitjançant [assignació automàtica d’equip](https://docs.weblate.org/ca/latest/admin/access.md#autoteam).

Els permisos d’un equip amb una autenticació de dos factors forçada no s’aplicaran als usuaris que no la tinguin configurada.
