內部網路帳號密碼權限控制實作
前言
當網站寫好後,依照公司內部組織分層負責,權限分為編輯、讀取、拒絕,每個分頁通常都會有指派的人員進行編輯,相關人員進行讀取,不相干人等禁止進入(同時也是為了避免資訊外流),故在進入網站之前,會要求用戶提供帳號密碼,這時候公司內部如果有AD(Active Directory)管理帳號密碼會非常方便。
舉例:工程審查系統,可編輯者為設計股,可讀取者為工事股。
操作流程
- 網站入口要求提供帳號密碼
- 根據該帳號密碼到AD確認名稱、組織資訊
- 根據組織資訊開啟相對應的頁面
程式碼解釋
環境參數
變數名稱 | 說明 | 中文解釋 |
---|---|---|
AD_SERVER_NAME | Active Directory server name | AD 伺服器名稱 |
AD_DOMAIN | Active Directory domain | AD 網域名稱 |
AD_ADMIN_USER | AD administrator username | AD 管理員帳號 |
AD_ADMIN_PASSWORD | AD administrator password | AD 管理員密碼 |
BASE_DN | Base Distinguished Name | 查詢的起點 |
登入驗證
1 | def check_ad_credentials(username, password): |
取得用戶資訊
1 | def get_user_info_one(s_type, s_data): |
取得各個層次的資訊
1 | def parse_dn(dn): |
白名單及權限給予
1 | def white_list(ou_list): |
入口邏輯
1 | st.subheader("請輸入EIP帳號密碼") |
實際畫面


錯誤紀錄
- 在
check_ad_credentials
中的conn = Connection(server, user=user_upn, password=password, authentication='SIMPLE', auto_bind=True)
如果用conn = Connection(server, user=user_upn, password=password, authentication='NTLM', auto_bind=True)
會報錯。- NTLM是比較加強的驗證格式,簡單的可以用SIMPLE就好。