【详细】Python蓝鲸登陆接入企业ldap教程

之前有参照《企业内部登录对接蓝鲸智云统一登陆》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

下面是具体的代码段:

  1. 在代码路径下的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

 

发布了51 篇原创文章 · 获赞 97 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/m0_37218227/article/details/103466535