标签:
一、概述
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)
# myauth use sso2、authentication_backend(指定认证后台)
SSO_URL= ‘http://192.168.40.133:8080‘
DJANGO_AUTH_TOKEN = ‘XhieHIUxgey&nnhyaUXERmiUIXtr^oqxt‘
# Define Authentic use myauth3、installed_apps增加 myauth
AUTHENTICATION_BACKENDS= (
‘myauth.myauth_backend.MyAuthBackend‘,
)
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‘, )
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‘)), )
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)
# Define Authentic use myauth六、认证模块代码中邮件内容去掉web登录密码
AUTHENTICATION_BACKENDS = (
‘myauth.myauth_backend.MyAuthBackend‘, ‘django.contrib.auth.backends.ModelBackend‘,
)
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