Gitlab和AD賬號整合,賬號登入時報錯:Invalid credentials
背景:
公司搭建了Gitlab,然後和AD賬號進行整合,採用AD賬號進行認證。
問題:
其他整合的系統使用AD賬號都無認證錯誤的問題,只有Gitlab認證時,提示報錯:Invalid credentials
解決辦法:
通過參考這個帖子參考帖,知道問題出在了gitlab.rb配置檔案上,貼出公司此檔案中的關鍵程式碼
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP'
host: '192.168.0.6'
port: 389
uid: 'cn'
method: 'plain'
bind_dn: 'cn=Young,cn=users,dc=Wyoungers,dc=com'
password: '123456'
active_directory: true
allow_username_or_email_login: false
block_auto_created_users: false
base: 'dc=Wyoungers,dc=com'
user_filter: ''
# attributes:
# username: ['uid', 'userid', 'sAMAccountName']
# email: ['mail', 'email', 'userPrincipalName']
# name: 'cn'
# first_name: 'givenName'
# last_name: 'sn'
# ## EE only
# group_base: ''
# admin_group: ''
# sync_ssh_keys: false
EOS
檢查了一下這個配置檔案和裡邊用的AD資訊都正常,沒有什麼問題,為什麼登入時,就是會報錯呢,無意之間測試了一個英文賬戶(cn和SamaccountName)都是英文字母的,發現他能認證成功,這時候我就覺得這個整合沒有問題,應該是哪裡的麼有配置正確。
通過在AD中檢視一箇中文賬戶和英文賬戶的卻別,發現兩者區別在於cn這個屬性上,英文賬戶的cn屬性和SamaccountName屬性是一模一樣的,但是中文的兩個不一樣,中文的cn是中文顯示名,SamaccountName是登入賬號。
於是用了一箇中文名字去認證登入,發現通過了,能夠正常通過。再返回去檢視gitlab.rb配置檔案,這時注意到 “uid: ‘cn’”這個配置,此命令式說呼叫AD中CN屬性值作為Gitlab登入賬戶,當AD中都是英文賬戶時,這個命令是沒有問題的,但是當存在中文賬戶時,需要改為uid:‘SamAccountName’,這樣賬戶就改為了AD一樣的登入賬號。
結果:
到此我們已經解決了問題,進行分析發現,我們有時候不能直接照搬Gitlab的原始碼,還需要進行修改,以適應新的變化。
歡迎大家關注我的部落格,及時獲取最新的IT資訊。