【詳細】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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章