Horizon的登录过程

正常的Django访问流程

Django身份认证框架

Django的身份验证系统

  1. auth模块是Django提供的标准权限管理系统,并可拓展性

  2. auth身份验证系统包括:

    • user

    user对象是身份验证系统的核心(django.contrib.auth.models.User类)

    • permission

    为指定的用户和用户组指定权限(django.contrib.auth.models.ModelAdmin类)

    • group

    一个分组中的用户可自动获得该分组的权限(django.contrib.auth.models.Group类)

    • 可配置的密码哈希系统

    django不在用户模型中存储原始密码,只存储密码的哈希值

  3. 可集成第三方认证系统

django.contrib.auth

  1. settings.py文件中的INSTALLED_APPS

    添加django.contrib.auth以激活认证系统

  2. settings.py文件中的MIDDLEWARE_CLASSES

    添加django.contrib.auth.middleware.AuthenticationMiddleware以在中间件处理request请求时完成身份认证

  3. settings.py文件中的AUTHENTICATION_BACKENDS

    添加openstack_auth.backend.KeystoneBackend以指定keystone进行用户认证

自定义认证后端

1
自定义认证后端:通过类定义,且必须实现以下两个方法
  1. authenticate()

    authenticate()检查传入的用户凭据,并在通过检查时返回对应的User对象,否则返回None当调用authenticate()方法时,Django会在AUTHENTICATION_BACKENDS指定的所有身份认证后端中一一尝试认 证(第一个后端认证失败,尝试使用第二个认证后端,依次类推)

  2. get_user(user_id)

    参数user_id可以是用户名或数据库中的ID等,但必须是User对象的主键get_user()返回一个User对象

使用django身份验证系统

  1. Django使用会话和中间件把身份验证系统插入request对象,为每个请求提供request.user 属性,表示当前用户
  2. 未认证用户是一个AnonymousUser实例,已认证用户是一个User实例
  3. request.user提供了一个方法is_authenticated()判断当前用户是否登陆

Horizon登录验证流程