[精讚] [會員登入]
1962

讓校內的 Windows Server 2016 AD 帳號的密碼與臺中市雲端校務系統的密碼同步

臺中市的校務雲端系統釋出 rest 服務,可以直接利用 Call API 方式把帳號的密碼改掉, 方便校內帳號改密碼時可

分享此文連結 //n.sfs.tw/12846

分享連結 讓校內的 Windows Server 2016 AD 帳號的密碼與臺中市雲端校務系統的密碼同步@杜子的網管筆記
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 14:06:00 最後編修
2018-10-23 23:37:27 By 杜子
 

臺中市的校務雲端系統釋出 rest 服務,可以直接利用 Call API 方式把帳號的密碼改掉, 方便校內帳號改密碼時可以與之同步, 我覺得這個蠻重要的, 否則學校老師又要多記一組帳號密碼, 基本上,本校所有系統都是跑 LDAP 帳號密碼,學校老師已經習慣一組帳號在校內通行無阻。

 

廢話不多說, 底下是實作過程。不過, 有個基本原則, 就是在校內的帳號代碼, 必須和雲端校務系統是一樣的才行。

原理說明

前一篇文章說明了如何讓 AD 中的  IIS 支援 PHP , 原因是希望可以

「利用 PHP 程式連線 AD 的 LDAP , 然後使用者在 WEB  界面輸入他要改的密碼,
接著, 程式把 LDAP 密碼改好後, 呼叫雲端校務系統的 API , 把同名帳號的密碼一併更改.」

以上, 是最理想的結果, 在實務上, 我花了好幾天的時間, 發現做不起來, 理由是: AD  不予許未加密的連線變更使用者密碼,
所以, 我必須想辦法讓 PHP 與 AD  進行 LDAPS 連線, 也就是跑 port 636 , 但實在太複雜了 ( 或許是自己太無知, 不會設定)
總之, 弄了好久, 只達成可以 ldap_connect , 但卻無法 bind 使用者, 所以最後宣告放棄。

現在的做法是:

1. 寫一支PHP程式,利用LDAP Bind 方式驗證使用者的LDAP帳密,帳密對了才進行外部呼叫

2. 在 AD 這邊準備一支 ASP.NET 程式讓 PHP程式呼叫,變更使用者在 AD 的密碼

3. AD密碼變更成功則呼叫雲端校務系統API改校務系統的密碼

 

準備工作

1. 校務雲端主機上必須先設定 API , 如下圖操作

接下來, 名稱自訂, 但是類型要選「校內伺服器」

設完之後, 會得到一筆資料, 如下圖, 按下查看, 可以看到這個 API 的 id 和 password , 稍後會用到

 

2. 校內的 Windows Server 2016 要確認 IIS 是可以執行  .aspx 程式的 , 相關設定, 在此不贅述了.

3. 準備一部可執行 PHP 的 Server , 要安裝 Curl 的 extension 套件。這個可直接裝在 Window AD 上,讓 IIS 能執行 PHP 即可, 要讓 Windows AD 的 IIS 能支援 PHP , 請參考前篇作品 https://n.sfs.tw/content/index/12843

 

實作方法

1. 先下載我寫好的程式 passwd.zip 解開後應該會有兩支程式,

2. 把 rest_change_passwd.aspx 放在 IIS 的置放網頁的任一目錄, 然後確認你可以用網頁瀏覽這支程式.
( IIS 正常的話, 網頁根目錄是位於 C:\inetpub\wwwroot )

如上圖, 我是放在 C:\inetpub\wwwroot\passwd 裡, 直接瀏覽, 正常的話會顯示 -1

3. 找一台可執行  PHP 的 Server , 把 sync_password.php 這支程式擺進去, 要確認網頁可瀏覽。

 因為上次研究  LDAP 已讓 IIS可跑 PHP 了, 所以我是直接把這支 PHP 也和 rest_change_passwd.aspx 放在一起。 

4. 用文字編輯器開啟 sync_password.php , 修改裡面的一些預設變數的設定值. 如下圖, 通常是只要改這 5 個地方就可以了.

簡單說明一下好了

/* 校內 Windows AD 主機的資訊 */
//LDAP server 的 IP
$LDAP_IP="163.17.xx.xx";    <-- 這裡就是改成你的 AD 的 IP
//LDAP server 的 PORT
$LDAP_port=389;  <-- 這裡通常不用改
//Windows AD LDAP 帳號的後綴字
$Base_suffix="fnjh.tc.edu.tw";  <-- 這裡就是指你的 AD 的網域啦! 我學校的是 fnjh.tc.edu.tw
//Windows AD 上的對應 ASP 程式 URL
$rest_chpasswd_url="http://163.17.43.18/passwd/rest_change_passwd.aspx"; <-- 這裡就是剛剛測試會出現 -1 的那個網址

/* 雲端校務主機的 API 資訊 */
// 更改為學校的 API ID
$client_id = 'b5fb78c7d9c0487fd25f97xxxxxxxxxxxxxx';   <-- 這裡是雲端校務主機上申請的 API 的 id, 去 https://school.tc.edu.tw/
// 更改為學校的 API 密碼
$client_secret = 'a46105cc9b492e63079xxxxxxxxxxxxxx';   <-- 這裡是雲端校務主機上申請的 API 的 密碼

5. 設定完畢, 請直接用瀏覽器瀏覽 sync_password.php 這支程式。

 

後續討論

請特別注意 Windows AD 的群組原則中關於密碼的部份, 密碼規則設得太複雜, 可能會讓使用者改密碼過程非常不順。

我還遇過一個問題,使用者來問題「為什麼"後來"改密碼都會失敗?」

注意「後來」這個用詞,意思就是他改了,發現改錯了,然後就沒辦法改了。

後來我才發現,是因為有「密碼最短使用期限」的這個規則,要改為 0 天。

 

END

你可能感興趣的文章

Win 10 更新後網路芳鄰失效解決方式 Windows 10 裝好後在1709 前網路芳鄰在區域網路都很正常, 不論是打 \IP 或是 \電腦名 都可以互聯。

飛碟 UPS 市電斷電時自動關機 買了一張飛碟 UPS 的 SNMP 網卡, 原本是希望學校的兩部 VMware ESXi 在停電時能自動關機, 沒想到,

讓校內的 Windows Server 2016 AD 帳號的密碼與臺中市雲端校務系統的密碼同步 臺中市的校務雲端系統釋出 rest 服務,可以直接利用 Call API 方式把帳號的密碼改掉, 方便校內帳號改密碼時可

雙網卡 DRBL伺服器架設心得 學校有三間電腦教室,加上一般教室、專科教室、導師辦公室5間、專任辦公室3間, 全部電腦加起來超過 200臺。 為了有效管

網路喚醒與遠端關機 在管理電腦教室時,常會遇到需要將電腦全部關機或全部開機的情況, 在這裡給自己做個筆記,以免忘了. 先講網路喚醒好了 1.

Windows Active Directory 啟動 LDAPS 連線 重架了 Windows Server 2016 也安裝了 Windows AD 服務, 當網域伺服器架好, 預設的 38

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文