使用 REMOTE_USER
进行身份验证
当 Web 服务器负责鉴权时,通常会设置 REMOTE_USER
环境变量,这是为了在底层应用中使用。在 Django 中, REMOTE_USER
是作为 的参数来使用的。如果想在 Django 中使用 REMOTE_USER
, 可以通过配置 RemoteUserMiddleware
中间件, PersistentRemoteUserMiddleware
中间件,或者继承在 django.contrib.auth
中的 来实现。
首先,你需要向配置文件的 MIDDLEWARE
键中,在 的 后面 添加 django.contrib.auth.middleware.RemoteUserMiddleware
然后,你需要将设置中的 setting:: 键值由 ModelBackend
替换为 :
通过此项设置, 可以检测 request.META['REMOTE_USER']
中的用户名,而且可以认证和自动登录用户使用的 RemoteUserBackend
。
Django 的用户管理系统,比如 contrib.admin
中的视图函数及 的管理命令,都没有与远程用户集成。这些接口只工作在数据库中存储的用户上,无论 AUTHENTICATION_BACKENDS
为何值。
注解
因为 RemoteUserBackend
继承自 ModelBackend
, 您仍将拥有在 ModelBackend
中实现的所有相同的权限检查。
具有 is_active=False
的用户将被禁止验证。你可以使用 来允许验证。
警告
使用具有自定义HTTP头部的 RemoteUserMiddleware
子类时需要特别小心。你要确保你的前端服务器基于验证检查结果正确设置或去除了该头部,禁止任何终端用户提交一个仿冒的头部值。因为HTTP头部 X-Auth-User
与(比方说) X-Auth_User
都会标准化为 request.META
的 HTTP_X_AUTH_USER
键,你必须确保你的服务器不允许头部使用下划线来替代横杠。
这个警告不适用于 RemoteUserMiddlewar
,它的默认配置为 header ='REMOTE_USER'
, 因为在 request.META
中不存在以 HTTP_
开始的键可以只由WSGI服务器设置, 而不能直接来自HTTP请求头部.
如果你需要更多控制, 你可以通过继承 RemoteUserBackend
并且覆盖其一个或多个属性和方法来创建你自己的验证后端.