码迷,mamicode.com
首页 > 其他好文 > 详细

重新开发Jumpserver用户认证模块,调用独立认证接口(一)

时间:2016-08-10 00:41:19      阅读:1884      评论:0      收藏:0      [点我收藏+]

标签:

一、概述

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用户认证模块二次开发

二、修改juser\models 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 = ‘XhieHIUxgey&nnhyaUXERmiUIXtr^oqxt‘
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、jumpserver\view.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、修改jumpserver\urls.py(见第四部分)
 
3、修改setting中的认证后台配置
# Define Authentic use myauth
AUTHENTICATION_BACKENDS = (
‘myauth.myauth_backend.MyAuthBackend‘, ‘django.contrib.auth.backends.ModelBackend‘,
)
六、认证模块代码中邮件内容去掉web登录密码
1、更改juser\user_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)

七、认证后台编写

 技术分享

 

重新开发Jumpserver用户认证模块,调用独立认证接口(一)

标签:

原文地址:http://www.cnblogs.com/mageguoshi/p/5755120.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!