之前有参照《企业内部登录对接蓝鲸智云统一登陆》http://docs.bk.tencent.com/develop_center/enterprise_login/
来了解蓝鲸社区版的登陆认证体系,尝试着接入企业ldap认证,目前在蓝鲸助手的帮助下已经实现接入,下面是接入教程和代码片段,需要实验的小伙伴可以从附件中下载源码修改相应的内容。
特别说明:蓝鲸登陆体系的ldap认证方式是通过api请求的方法来进行认证的,由于我比较懒不想额外部署api服务所以改为ldap模块验证。
名称申明:
服务器: 指的是蓝鲸系统中open_paas所在的服务器
代码路径:/data/bkce/open_paas/login/bkaccount/
Pip路径:/data/bkce/.envs/login/bin/pip
下面是具体的代码段:
- 在代码路径下的enterprise文件夹下建立ldap.py验证模块:
2. 首先修改配置为公司的ldap接口的地址等信息
然后填写相关的验证函数,其中验证验证信息返回的参数按照实际情况配置,如果不明白可以参考下ldap的教程。格式化返回数据,格式可以看api.py的相关注释。
3. 修改api.py中的get_user_info函数:
修改函数将原本调用api验证方式改为函数验证。
4. 修改backends.py中的authenticate 函数:
这里我将获取用户信息和判断登陆是否有效的方式都统一成get_user_info() 函数了,在将新用户写入到数据库中需要注意中文名字的字符集编码。注册成功后默认设置新用户为普通用户,方便管理后期的权限。
5. 将修改好的代码上传到代码路径的enterprise文件夹下。
修改代码路径下ee_loging/settings_login.py文件:
将bk_login 修改成 enterprise_ldap
6. 安装ldap3模块 pip install ldap3
7. 在控制机上重启login服务,命令如下:
./bkcec stop paas login
./bkcec start paas login
8. 重启完成后验证是否可以登陆,如果有错误请查看日志,日志路径:
/data/bkce/logs/open_pass/
Login_uwsgi.log login.log
# -*- coding: utf-8 -*-
import ldap3
#import json
class selectldap():
# ldap地址
ldap_ip = '192.168.39.22'
# ldap端口
ldap_port = 389
# ldap默认搜索区域
# ldap_dn = 'cn=svn_admin,ou=技术部,ou=总部区域二,ou=上海总部,ou=xinxindai,dc=xxd,dc=com'
ldap_dn = 'dc=xxd,dc=com'
# ldap账号
ldap_admin = 'svn_admin'
# ldap密码
ldap_pwd = 'Abcd!@#1234'
def get_user_info(self,kwargs={}):
# 获取Form clean处理后的数据
host = self.ldap_ip
port = self.ldap_port
user = kwargs.get('username')
password = kwargs.get('password')
# print "user:%s pass:%s" % (user, password)
# 设置当前操作者
# data['operator'] = self.current_user.username
server = ldap3.Server(host, port, get_info=ldap3.ALL)
conn = None
auto_bind = True
try:
if user:
users = 'baina\\%s' % user
conn = ldap3.Connection(server, user=users, password=password, auto_bind=auto_bind,
authentication=ldap3.NTLM)
conn.search(self.ldap_dn, '(&(sAMAccountName=' + user + ')(objectclass=person))',
attributes=['mail', 'cn', 'mobile'])
email = conn.entries[0]['mail']
chname = conn.entries[0]['cn']
mobile = conn.entries[0]['mobile']
conn.unbind()
data = {
'username': "%s" % user,
'password': "%s" % password,
'real_name': "%s" % chname,
'mobile_phone' : "%s" % mobile,
'email': "%s" % email
}
#data = json.dumps(data)
result = {
'result': True,
"code": "00",
'message': "验证用户成功",
'data': data
}
#result = json.dumps(result)
# print result
return result
except Exception as e:
error = u"验证失败或其他错误:%s" % e
result = {
'result': False,
'message': error
}
return result