重新開發Jumpserver使用者認證模組,調用獨立認證介面(一)

來源:互聯網
上載者:User

標籤:

一、概述

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)
三、修改setting1、增加認證介面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使用者認證模組,調用獨立認證介面(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.