最近頻頻聽到新名詞 - ADFS,腦中卻沒什麼概念,甚為惶恐,趕緊研究做點 Lab 壓壓驚。

AD FS 是 Active Directory Federation Service 的縮寫,用白話解釋,傳統印象中,原本只能企業內部限定 Windows 使用的 AD,透過 AD FS 可拓展到公司外部實現身分認證、權限控管、單一登入(Single Sign On, SSO),讓員工、客戶、供應商使用 AD 帳號存取企業的對外服務,甚至一些第三方 SaaS 服務 (Teams、Office 365、Salesforce)。

由於 AD FS 是走 HTTPS 協定並支援 OAuth 標準,原本受限封閉內網使用的 AD 帳號一下子變得開放,可拿來登入 Internet 網站、管控 WebAPI 存取、手機 App 登入、甚至 IoT 裝置。這篇筆記打算在實驗環境把它裝起來,後面幾篇會寫幾行程式,試試跨平台整合 AD 帳號登入。

AD FS 的安裝細節有點繁瑣,術語名詞又多,只看官方文件的部署指南要完成有點吃力,我參考了不少文件、YouTube 影片(像是這支,體驗傳說中被 YouTube 上有口音的印度小哥拯救),及 Pluralsight 的教學課程,才摸出頭緒。這個過程,絕對值得寫成筆記。

安裝 AD FS 的第一個關卡是要搞定憑證。在建好 DC 主機、建立 AD 網域,備好另一台 AD FS 主機並加入網域後,在 DC 安裝 CA 服務,開啟 CA 管理介面,在 Certificate Templates 資料夾按右鍵選 Manage,然後在 Certificate Templates Console 找到 Web Server,以其為範本 Duplicate Template 複製修改出 ADFS 用的範本:

在 General 頁籤,設定名稱為 ADFS Template:

勾選「Allow private key to be exported」:

權限部分要讓 Domain Comupters 具有 Enroll 權限:

設定好儲存後,用右鍵選單 New / Certificate Template to Issue 將剛才建立的 ADFS Template 加入 Certificate Templates 資料夾:

到這裡 CA 準備好了。

接著我們連到 AD FS 主機產生 adfs.<domain-name> 憑證。

關於 AD FS 的 DNS 名稱,由於後面會用到子網域名稱(如 certauth.adfs.<domain-name>),故 adfs.<domain-name> 要保留對外使用,AD FS 主機我們命名為 adfs1.<domain-name> 與之區隔,實驗環境只有單一主機,故在 DNS 加入一筆 A 記錄將 adfs 對映到 adfs1 的 IP:

DNS 設好後,登入 AD FS 主機(記得要先加入網域),執行 certlm.msc 開啟 Local Computer 的憑證管理介面,在 Personal / Certificates 右鍵 All Tasks / Request New Certificate 向 CA 申請憑證:

憑證註冊介面:

ADFS Template 需要填寫 Common Name、DNS 等資料:

建立 Common Name = adfs.<domain-name> 跟三筆 DNS adfs.<domain-name>enterpriseregistration.<domain-name>certauth.adfs.<domain-name>

取個 Friendly Name:

程式會連上 CA 取得憑證並存入 Local Computer 憑證儲存區:

再來,我們希望 AD FS 服務用 Group Managed Service Account (gMSA,無密碼帳號,由作業系統自動管理密碼,解決惱人的密碼定期變更問題,很適合用於服務或排程,這個未來有機會再專門寫一篇為大家講解) 執行,準備工作是要登入 DC 建立 Key Distribution Service 的 Root Key。

# 預設 10 小時後啟用(考量AD複寫時間),測試環境將時間設定 10 小時前以便馬上使用
Add-KdsRootKey -EffectiveTime ((Get-Date).AddHours(-10))

終於,前置作業完成,可以安裝 AD FS 了。Add Roles and Feature Wizards 新增完 AD FS 會提示需要設定:

選擇這是 Web Farm 的第一台:

提供具有管理者權限的網域帳號進行設定:

選取剛才裝好的 SSL 憑證:

執行身分選擇新建一個 gMSA 帳號:

資料庫選擇 Windows Internal Database 即可(漏抓圖),多台 AD FS 主機時可存在 SQL Server。執行前會再次確認所有設定:

由於我們剛建完 Root Key 不到 10-小時就要用 gMSA,隨時改了生效時間,但因建立時間太短會有警告(可忽略):

如果沒意外,AD FS 就裝好了。

要檢測 AD FS 是否正常,最簡單的方法是使用 IdP Initiated Signon Page 測試,它預設未啟用,需使用以下 PowerShell 指令啟用:

Set-AdfsProperties -EnableIdPInitiatedSignonPage $true

使用瀏覽器連上 https://adfs.<domain-name>,沒意外的話,你會看到登入畫面,按 Sign In 出現帳號密碼,試試若能 AD 帳號登入,成功!

Notes of AD FS installation.


Comments

Be the first to post a comment

Post a comment