自定义身份验证-libmodbus源码解析

时间:2024-07-14 01:47:26
【文件属性】:

文件名称:自定义身份验证-libmodbus源码解析

文件大小:7.37MB

文件格式:PDF

更新时间:2024-07-14 01:47:26

PDF

11.10自定义身份验证 多数情况下,Django 自带的身份验证系统足够用了,但是开箱即用的默认系统可能无法满足你的需求。若想 定制,你要了解自带系统的哪些部分是可扩展的或可替换的。 身份验证后端提供了一个可扩展的系统,以防你想使用别的服务验证 User模型存储的用户名和密码。你可以 为模型赋予其他权限,然后使用 Django 的权限核准系统检测。你可以扩展默认的 User模型,或者完全替换 成自定义的模型。 11.10.1其他身份验证源 有时,可能需要连接其他身份验证源,即用户名、密码和身份验证方法来自别处。 例如,你的公司可能已经搭建好了 LDAP,用于存储每个员工的用户名和密码。如果分别为 LDAP 和 Django 开发的应用程序提供一套账户,对网络管理员和用户自身都是件麻烦事。 考虑到这种情况,Django 身份验证系统支持连接其他身份验证源。你可以覆盖 Django 默认基于数据库的模 式,或者把默认系统与其他系统连接起来。 11.10.2指定身份验证后端 Django 在背后维护着一个用于验证身份的后端列表。调用 authenticate()时(参见 11.5.1 节),Django 在 所有身份验证后端中一一尝试。如果第一个后端验证失败,再试第二个,然后一直下去,直到试完所有后端 为止。 身份验证后端列表由 AUTHENTICATION_BACKENDS设置指定。它的值是一个 Python 路径名列表,指向知道如何 验证身份的 Python 类。这些类可以在 Python 路径中的任何位置。AUTHENTICATION_BACKENDS的默认值为: ['django.contrib.auth.backends.ModelBackend'] 这是一个基本的身份验证后端,检查 Django 用户数据库,并查询内置的权限。这个后端无法防范暴力破解攻 击,因为没有提供频率限制机制。你可以在自定义的权限核准后端中实现这一机制,或者使用多数 Web 服务 器提供的机制。AUTHENTICATION_BACKENDS罗列元素的顺序是重要的,如果用户名和密码能通过多个后端的验 证,首次发现匹配后就会停止。如果后端抛出 PermissionDenied异常,身份验证立即失败,Django 不再使用 后面的后端检查。 通过身份验证后,Django 在用户的会话中存储通过验证的是哪个后端。在会话持续的时间内,只要需要访问 通过验证的用户,就使用会话中的后端。这其实意味着,每个会话会缓存身份验证源,所以如果修改了 AU- THENTICATION_BACKENDS,若想使用其他方法重新验证用户的身份,要清空会话数据。为此,一个简单的方法 是调用 Session.objects.all().delete()。 11.10.3编写一个身份验证后端 身份验证后端通过类定义,必须实现两个方法,即 get_user(user_id)和 authenticate(**credentials),此 外还有一些可选的权限核准方法。get_user的参数 user_id可以是用户名和数据库中的 ID 等,不过必须是 User对象的主键。get_user的返回值是一个 User对象。authenticate的参数是通过关键字参数指定的凭 据。多数时候,authenticate方法是下面这样: class MyBackend(object): 174 - 第 11 章 在 Django 中验证用户的身份


网友评论