---
title: "Autenticación con el uso de REMOTE_USER"
version: 3.2
locale: es
source: https://docs.djangoproject.com/es/3.2/howto/auth-remote-user/
canonical: https://djangodocs.dev/es/3.2/howto/auth-remote-user/
---
# Autenticación con el uso de `REMOTE_USER`

Este documento describe como hacer uso de los recursos de autenticación remota (donde el servidor web define la variable de entorno `REMOTE_USER`) en sus aplicaciones Django. Este tipo de solución de autenticación es típicamente vista en sitios de intranet con soluciones simples de ingreso como IIS con Integrated Windows Authentication o apache con [mod\_authnz\_ldap](https://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html), [CAS](https://www.apereo.org/projects/cas), [Cosign](http://weblogin.org), [WebAuth](https://uit.stanford.edu/service/authentication), [mod\_auth\_sspi](https://sourceforge.net/projects/mod-auth-sspi), etc.

Cuando el servidor web se ocupa de la autenticación, típicamente define la variable de ambiente `REMOTE_USER` para el uso subyacente en la aplicación. En Django, `REMOTE_USER` está disponible en el atributo [`request.META`](/es/3.2/ref/request-response/#django.http.HttpRequest.META). Django puede ser configurado para hacer uso del valor de `REMOTE_USER` usando el `RemoteUserMiddleware` o el `PersistentRemoteUserMiddleware` y las clases [`RemoteUserBackend`](/es/3.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) encontradas en [`django.contrib.auth`](/es/3.2/topics/auth/#module-django.contrib.auth).

## Configuración

Primero debe agregar la clase [`django.contrib.auth.middleware.RemoteUserMiddleware`](/es/3.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware) a la configuración de [`MIDDLEWARE`](/es/3.2/ref/settings/#std-setting-MIDDLEWARE) después de [`django.contrib.auth.middleware.AuthenticationMiddleware`](/es/3.2/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware):

```
MIDDLEWARE = [
    '...',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.RemoteUserMiddleware',
    '...',
]
```

Luego, debe remplazar la clase [`ModelBackend`](/es/3.2/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend) por [`RemoteUserBackend`](/es/3.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) en la configuración [`AUTHENTICATION_BACKENDS`](/es/3.2/ref/settings/#std-setting-AUTHENTICATION_BACKENDS):

```
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.RemoteUserBackend',
]
```

Con esta configuración, `RemoteUserMiddleware` detectará el usuario en `request.META['REMOTE_USER']` y autenticará e iniciará automáticamente la sesión de usuario usando [`RemoteUserBackend`](/es/3.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend).

Sea conciente de que esta configuración particular deshabilita la autenticación por defecto con el `ModelBackend`. Esto significa que si el valor del `REMOTE_USER` no está definido, entonces el usuario no será capaz de ingresar, incluso usando la interfaz de administración de Django.  Agregando `'django.contrib.auth.backends.ModelBackend'` a la lista de `AUTHENTICATION_BACKENDS`, servirá como respaldo si `REMOTE_USER` no está definido, lo que resolverá estas problemáticas.

El sistema de usuarios de Django, como las vistas en `contrib.admin` y el comando de manejo [`createsuperuser`](/es/3.2/ref/django-admin/#django-admin-createsuperuser), no se integran con usuarios remotos. Estas interfaces trabajan con usuarios almacenados en la base de datos independientemente de `AUTHENTICATION_BACKENDS`.

> **Note**
>
> Como `RemoteUserBackend` hereda de `ModelBackend`, todavía tendrá la misma comprobación de permisos implementada en `ModelBackend`.
>
> Usuarios con [`is_active=False`](/es/3.2/ref/contrib/auth/#django.contrib.auth.models.User.is_active) no serán capaces de autenticarse. Use [`AllowAllUsersRemoteUserBackend`](/es/3.2/ref/contrib/auth/#django.contrib.auth.backends.AllowAllUsersRemoteUserBackend) si quiere permitirles hacerlo.

Si su mecanismo de autenticación usa una cabecera HTTP personalizada y no `REMOTE_USER`, puede crear una clase hija de `RemoteUserMiddleware` y configurar el atributo `header` con la llave de `request.META` deseada. Por ejemplo:

```
from django.contrib.auth.middleware import RemoteUserMiddleware

class CustomHeaderMiddleware(RemoteUserMiddleware):
    header = 'HTTP_AUTHUSER'
```

> **Warning**
>
> Sea muy cuidadoso al usar una subclase de `RemoteUserMiddleware` con un encabezado HTTP personalizado. Debe asegurarse que su servidor web siempre defina o separe ese encabezado basado en las validaciones apropiadas de autenticación, nunca permitiendo que un usuario final envíe un encabezado falso (o envenenado). Desde que los encabezados HTTP `X-Auth-User`  y `X-Auth_User` (por ejemplo) se normalizan en la llave `HTTP_X_AUTH_USER` de `request.META`, usted debe verificar que el servidor web no permita encabezados envenenados usando guiones bajos en lugar de guiones.
>
> Esta advertencia no se aplica a `RemoteUserMiddleware` en su configuración por omisión con `header = 'REMOTE_USER'`, pues las llaves de `request.META` que no comiencen con `HTTP_` solo pueden ser establecidas por el servidor WSGI, no directamente desde una cabecera de petición HTTP.

Si necesita más control, puedes crear su propio backend de autenticación que herede de [`RemoteUserBackend`](/es/3.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) y redefinir uno o más de sus atributos y métodos.

## Usando `REMOTE_USER` en paginas de ingreso solamente

The `RemoteUserMiddleware` authentication middleware assumes that the HTTP
request header `REMOTE_USER` is present with all authenticated requests. That
might be expected and practical when Basic HTTP Auth with `htpasswd` or
similar mechanisms are used, but with Negotiate (GSSAPI/Kerberos) or other
resource intensive authentication methods, the authentication in the front-end
HTTP server is usually only set up for one or a few login URLs, and after
successful authentication, the application is supposed to maintain the
authenticated session itself.

[`PersistentRemoteUserMiddleware`](/es/3.2/ref/middleware/#django.contrib.auth.middleware.PersistentRemoteUserMiddleware)
provides support for this use case. It will maintain the authenticated session
until explicit logout by the user. The class can be used as a drop-in
replacement of [`RemoteUserMiddleware`](/es/3.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware)
in the documentation above.
