整合 Windows 身份驗證概述
整合 Windows 驗證 (IWA) 是一種當 IIS 和使用者登入相同網域時自動向 IIS 提供使用者驗證資訊的機制。當您使用 ASP.NET C# 建立網站時,您可以獲得使用者驗證確定和經過驗證的使用者資訊。
這允許使用者存取 IIS 託管(或連結)的 Web 應用程序,而無需額外的登入操作,並支援與其他應用程式伺服器的 SSO 整合。
*如果您未參與相同網域或未經驗證的使用者存取 IIS 頁面,則會顯示登入撥號盤,如果您未正確進行驗證,則會出現 HTTP 錯誤 401.1 – 未經授權。

SSO(單一登入)流程
Chat&Messenger On-Premise 的 Ultimate 計劃允許透過整合 Windows 驗證進行 SSO。 SSO流程如下。
- 用戶端首先造訪整合Windows認證頁面/cam-iissso
- /cam-iissso 頁面使用 ASP.NET 來確定它是否經過身份驗證並連結到 CAMServer。
- CAMServer 執行 LDAP 搜尋以確認其是常規 AD 用戶,產生 ssoToken(30 位元組或以上的唯一隨機值)和用於存取 CAMServer 的 URL,並要求重定向。
- 造訪 CAMServer 並使用 ssoToken 進行身份驗證。如果身份驗證成功,將指派用於 API 存取的會話 ID。

實現 SSO 的要求
將 Windows Server 加入網域
請將執行 CAMServer/IIS 的 Windows Server 加入 Active Directory 網域。
若要檢查現有 Windows Server 所加入的網域,請進入“伺服器管理員”→按一下左側功能表上的“本機伺服器”→按一下“電腦名稱”,並參考網域列。
此外,IIS 應該與 CAMServer 位於同一台伺服器上並在連接埠 80 上運作。如果在 CAMServer 前面放置一個 LoadBalancer,則 CAMServer 將在連接埠 8080 上運行,因此 IIS 也可以使用連接埠 443。
安裝IIS
從伺服器角色安裝 IIS。
安裝IIS時,在角色服務選擇選項中勾選以下內容。
- Windows 驗證
- ISAPI 篩選器
- 單獨安裝 ISAPI 擴充

ISAPI過濾器:支援IIS中載入擴充模組。需要載入 AspNetCoreModuleV2。
ISAPI 擴充:將 ISAPI 擴充功能新增至 IIS。 AspNetCoreModuleV2 操作所需。啟動 IIS 管理器 (iisreset)
安裝 ASP.NET Core 託管捆綁包
ASP.NET Core 託管捆綁包 請安裝。
安裝後,重新啟動 IIS 並確保處理程序映射中存在 AspNetCoreModuleV2。



新增應用程式 (cam-iissso)
將 cam-iissso 應用程式新增至預設網站。
- 別名: cam-iissso
- 物理路徑: \sys\cam-iissso-net8.0
另外,向 IIS_IUSRS 群組授予 cam-iissso-net8.0 資料夾的檢視存取權限(讀取和執行、列出資料夾內容、讀取)。


啟用 Windows 驗證
右鍵單擊“Windows 身份驗證”並選擇“啟用”。

設定互聯網選項
將IIS提供的站點加入內網區域
選擇“Internet 選項”,按一下“安全性”選項卡,選擇“本機 Intranet” 按一下“網站”按鈕,選擇“進階設定”,然後新增網站 URL
檢查自動登入
按一下“自訂等級”,然後在“使用者驗證”→“登入”下,請確保選擇“在內網路區域自動登入”。


LDAP 設定
使用 IIS 執行單一登入時,LDAP 設定(LDAPUrl、LDAPBaseDN、執行代理程式驗證的 AD 使用者)是必需的。

透過 FQDN(完全限定域名)存取並註冊 SPN
如果您使用主機名稱(NetBIOS 名稱)存取 IIS Windows 整合式驗證頁面,則沒有必要這樣做,但如果您使用 FQDN(完全限定域名,例如 sso.example.com)存取它,則必須註冊 SPN。
SPN(服務主體名稱)是在 Kerberos 驗證中唯一標識 Active Directory 上特定服務的名稱。如果您使用 FQDN 存取服務,註冊 SPN 將使用戶端能夠成功為您正在存取的服務請求 Kerberos 票證。
例如 https://sso.example.com
在訪問的時候,客戶端(瀏覽器)向Active Directory請求一張票,說「我想要連接到名為HTTP/sso.example.com的服務」。 Active Directory 決定 SPN 與哪個帳戶相關聯,並發出相應的服務票證。如果 SPN 未正確註冊,Kerberos 驗證將會失敗,從而顯示驗證對話方塊。
SPN 註冊在託管 IIS 的電腦帳戶上完成。例如,廣告
對於使用主機名稱運行的 IIS,請按如下方式註冊 SPN:
setspn -S HTTP/sso.example.com ad$
註冊後,可以使用以下命令進行檢查:
setspn-L ad$
此結果 HTTP/sso.example.com
如果顯示,則表示 SPN 註冊成功。
HTTP代理連線環境下不可用
請注意,SSO 不能在 HTTP 代理連線環境中使用。
LoadBalancer + SSL 環境中的配置
如果您在 LoadBalancer + SSL 環境中使用 IIS 整合 Windows 驗證,請參閱以下部落格文章。
