二次開發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用戶認證模塊二次開發

二、修改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 = '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、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)

七、修改原來用戶管理模塊的功能

 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函數刪掉畫框部分

 

八、認證后台編寫

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM