一、概述
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 sso2、authentication_backend(指定认证后台)
SSO_URL= 'http://192.168.40.133:8080'
DJANGO_AUTH_TOKEN = 'zhoeuhnghuiuewpje9933378p&(po3j43'
# Define Authentic use myauth3、installed_apps增加 myauth
AUTHENTICATION_BACKENDS= (
'myauth.myauth_backend.MyAuthBackend',
)
INSTALLED_APPS= ( 'django.contrib.admin', 'django.cont