zoukankan      html  css  js  c++  java
  • 二次开发Jumpserver用户登录认证模块,调用独立认证接口(一)

    一、概述

    Jumpserver用的是python的django框架开发,所以主要完成两个事情:

    1、开发自己的认证后台

      一个认证后台就是要实现如下两个方法的类: get_user(id) 和 authenticate(**credentials) 。

         方法 get_user 返回一个 User 对象,参数 id 可以是用户名或者数据库ID。

       方法authenticate(**credentials)可以使用密码、token或者已有的认证接口实现身份认证,返回User对象。如果你的认证后台的User模型不是继承Django自带认证后台的 AbstractUser,每个User还需要创建一个对应的Django User对象,这样就可以继续沿用Django认证后台其他强大的功能。


    2、指定认证后台    

      Django维护了一个用于检查认证的后台列表。 当调用 django.contrib.auth.authenticate() ,Django会尝试对其认证后台进行遍历认证。 如果第一个认证方法失败,Django会尝试认证第二个,以此类推,一直到尝试完。

      认证后台列表在AUTHENTICATION_BACKENDS设置中进行指定。

           下面开始实现Jumpserver用户认证模块二次开发

    二、修改jusermodels class User(根据自己的需要增加attribute) 

    class User(AbstractUser):
        USER_ROLE_CHOICES = (
    ('SU', 'SuperUser'),
    ('GA', 'GroupAdmin'),
    ('CU', 'CommonUser'),
    )
    name = models.CharField(max_length=80)
    uuid = models.CharField(max_length=100)
    role = models.CharField(max_length=2, choices=USER_ROLE_CHOICES, default='CU')
    group = models.ManyToManyField(UserGroup)
    phone = models.CharField(max_length=64, null=True)
    department = models.CharField(max_length=255, null=True)
    ssh_key_pwd = models.CharField(max_length=200)
    三、修改setting
    1、增加认证接口url配置
    # myauth use sso
    SSO_URL= 'http://192.168.40.133:8080'
    DJANGO_AUTH_TOKEN = 'zhoeuhnghuiuewpje9933378p&(po3j43'
    2、authentication_backend(指定认证后台)
    # Define Authentic use myauth
    AUTHENTICATION_BACKENDS= (
    'myauth.myauth_backend.MyAuthBackend',
    )
    3、installed_apps增加 myauth 
    INSTALLED_APPS= (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',
    'django_crontab',
    'bootstrapform',
    'jumpserver',
    'juser',
    'jasset',
    'jperm',
    'jlog',
    'myauth',
    )
    四、修改jumpserver urls.py
    urlpatterns = patterns('jumpserver.views',
        # Examples:
        url(r'^$', 'index', name='index'),
        # url(r'^api/user/$', 'api_user'),
        url(r'^skin_config/$', 'skin_config', name='skin_config'),
        url(r'^admin/login', 'admin_login', name='admin_login'),
        url(r'^admin/logout', 'admin_logout', name='admin_logout'),
        url(r'^exec_cmd/$', 'exec_cmd', name='exec_cmd'),
        url(r'^file/upload/$', 'upload', name='file_upload'),
        url(r'^file/download/$', 'download', name='file_download'),
        url(r'^setting', 'setting', name='setting'),
        url(r'^terminal/$', 'web_terminal', name='terminal'),
        url(r'^juser/', include('juser.urls')),
        url(r'^jasset/', include('jasset.urls')),
        url(r'^jlog/', include('jlog.urls')),
        url(r'^jperm/', include('jperm.urls')),
        url(r'', include('myauth.urls')),    
    )
    五、修改原来登录模块只允许admin从本地登录
    1、jumpserverview.py
    def admin_login(request):
        """登录界面"""
        error = ''
        if request.user.is_authenticated():
            return HttpResponseRedirect(reverse('index'))
        if request.method == 'GET':
            return render_to_response('login.html')
        else:
            username = request.POST.get('username')
            password = request.POST.get('password')
            if username == 'admin' and password:
                user = authenticate(username=username, password=password)
    2、修改jumpserverurls.py(见第四部分)
     
    3、修改setting中的认证后台配置
    # Define Authentic use myauth
    AUTHENTICATION_BACKENDS = (
    'myauth.myauth_backend.MyAuthBackend', 'django.contrib.auth.backends.ModelBackend',
    )
    六、认证模块代码中邮件内容去掉web登录密码
    1、更改juseruser_api.py 的user_add_mail 函数,邮件内容去掉web登录密码
    mail_msg = u"""
        Hi, %s
            您的用户名: %s
            您的权限: %s
            您的ssh密钥文件密码: %s
            密钥下载地址: %s/juser/key/down/?uuid=%s
            说明: 请登陆跳板机后台下载密钥, 然后使用密钥登陆跳板机!
        """ % (user.name, user.username, user_role.get(user.role, u'普通用户'),
               kwargs.get('ssh_key_pwd'), URL, user.uuid)
        send_mail(mail_title, mail_msg, MAIL_FROM, [user.email], fail_silently=False)

    七、修改原来用户管理模块的功能

     1、删除用户管理>用户列表(user_list.html)页面的添加和删除用户功能

     2、删除nav_li_profile.html中的修改信息功能

     3、编辑功能去掉密码修改 

    1)、删除页面密码输入文本框
    2)、juser/user_api.py  db_update_user 去掉更新密码功能 if user 部分保留代码  
    if user:
    user_get = user[0]
    user.update(**kwargs)
    3)、juser/views.py user_edit函数删掉画框部分

    八、认证后台编写

     

  • 相关阅读:
    LeetCode 965. Univalued Binary Tree
    LeetCode 961. N-Repeated Element in Size 2N Array
    LeetCode 832. Flipping an Image
    语法设计——基于LL(1)文法的预测分析表法
    简单的词法设计——DFA模拟程序
    LeetCode 905. Sort Array By Parity
    LeetCode 804. Unique Morse Code Words
    【原创】用事实说话,Firefox 的性能是 Chrome 的 2 倍,Edge 的 4 倍,IE11 的 6 倍!
    【新特性速递】新增单标签页模式,界面更加清爽!
    【新特性速递】重构表格列锁定代码,只有一个横向滚动条,更加现代化!
  • 原文地址:https://www.cnblogs.com/mageguoshi/p/5755120.html
Copyright © 2011-2022 走看看