Horizon的登录过程
正常的Django访问流程
1 | flow |
Django身份认证框架
1 | st=>start: Request |
Django的身份验证系统
auth
模块是Django
提供的标准权限管理系统,并可拓展性auth
身份验证系统包括:user
user对象是身份验证系统的核心(
django.contrib.auth.models.User
类)permission
为指定的用户和用户组指定权限(
django.contrib.auth.models.ModelAdmin
类)group
一个分组中的用户可自动获得该分组的权限(
django.contrib.auth.models.Group
类)可配置的密码哈希系统
django
不在用户模型中存储原始密码,只存储密码的哈希值可集成第三方认证系统
django.contrib.auth
在
settings.py
文件中的INSTALLED_APPS
中添加
django.contrib.auth
以激活认证系统在
settings.py
文件中的MIDDLEWARE_CLASSES
中添加
django.contrib.auth.middleware.AuthenticationMiddleware
以在中间件处理request
请求时完成身份认证在
settings.py
文件中的AUTHENTICATION_BACKENDS
中添加
openstack_auth.backend.KeystoneBackend
以指定keystone
进行用户认证
自定义认证后端
1 | 自定义认证后端:通过类定义,且必须实现以下两个方法 |
authenticate()
authenticate()
检查传入的用户凭据,并在通过检查时返回对应的User
对象,否则返回None
当调用authenticate()
方法时,Django
会在AUTHENTICATION_BACKENDS
指定的所有身份认证后端中一一尝试认 证(第一个后端认证失败,尝试使用第二个认证后端,
依次类推)get_user(user_id)
参数
user_id
可以是用户名或数据库中的ID
等,但必须是User
对象的主键get_user()
返回一个User
对象
使用django身份验证系统
Django
使用会话和中间件把身份验证系统插入request
对象,为每个请求提供request.user
属性,表示当前用户- 未认证用户是一个
AnonymousUser
实例,已认证用户是一个User
实例 request.user
提供了一个方法is_authenticated()
判断当前用户是否登陆
Horizon登录验证流程
1 | st=>start: 开始 |
Horizon的登录过程