Domino web 登入與多機 SSO 怎麼運作
使用者在瀏覽器登入 Domino 之後,為什麼接下來一路點、開不同資料庫,都不用再登入一次?因為 Domino 用的是 session-based authentication:登入成功後,伺服器發一個 token、塞進一個 cookie,之後瀏覽器每次請求都帶著它,伺服器就認得「你是誰、還在登入狀態」。而當你有好幾台 Domino,想讓使用者登入一台、其他台都通(SSO),那把 token 背後就需要一份共享密鑰的設定。
重點摘要
- basic vs session:basic authentication 是瀏覽器內建的 HTTP 彈窗,每次請求都把帳密再送一次;session-based authentication 是用登入表單+cookie——登入後伺服器把 token 放進 cookie,之後靠 cookie 認人(所以瀏覽器必須接受 cookie)。
- single vs multi-server:Single Server 的 cookie 只對這一台有效;Multiple Servers(SSO) 讓使用者「log in once」後,就能到同一 DNS domain 裡其他啟用的伺服器而不必再登入。
- Web SSO Configuration 文件:一份 domain-wide 的 Domino Directory 文件,要複寫到所有參與的伺服器,裡面有一把 shared secret key,各伺服器用它來驗證使用者憑證(LTPA token)。
- 會讓 SSO 失敗的硬條件:參與伺服器要在同一 DNS domain、該值要以句點開頭(如
.example.com);URL 要用完整 DNS 名稱(不是 host name 或 IP),因為 cookie 裡的 DNS domain 要和 server URL 相符、且 cookie 不能跨 TCP/IP domain;參與清單只能放 Domino 伺服器(不能用群組/萬用字元);而且所有 SSO 伺服器要用同一種 Internet-access 方式(都用 Internet Site documents、或都用 Server 文件)。 - 一個大雷:在 Server 文件開了 Internet Sites,既有的 SSO 設定會被自動停用——這跟上一篇Internet Site documents 直接相關。
- 跟 WebSphere 共用 LTPA:匯入 WebSphere 的 LTPA key 後,就不能再設 SSO idle timeout(WebSphere 會忽略 idle timeout);LTPA realm 在所有參與伺服器要一致;跨 Domino domain 做 SSO 要把同一把 WebSphere LTPA token 匯進每個 domain。
basic 與 session-based 認證
Domino web 的名稱/密碼認證有兩種做法:
- Basic authentication:官方把它描述成一個「challenge/response 協定」,用來跟使用者要帳號密碼。以 HTTP Basic 的標準行為來說,就是瀏覽器那個內建的認證彈窗,登入後每個請求都把帳密再送一遍;沒有乾淨的「登出」概念,也沒有逾時。
- Session-based authentication:改用一個登入表單。登入成功後,伺服器產生一個 token、透過 cookie 送回瀏覽器(官方:「the authentication token that is generated by the server is sent to the browser in a cookie」),之後瀏覽器靠這個 cookie 維持登入狀態。因為認證狀態在 cookie 裡,瀏覽器一定要接受 cookie,而且可以有逾時、有真正的登出。
在 Web Site 文件(或 Server 文件)的 session authentication 欄位,就是在這幾個模式間選:Disabled / Single Server / Multiple Servers (SSO)(官方:為 Web Site 文件設定 session 認證)。
單機 cookie 與多機 SSO
- Single Server:cookie 只對發它的那一台有效。使用者換到另一台 Domino,還是要重新登入。
- Multiple Servers(SSO):這就是單一登入。官方說它讓 web 使用者「log in once to a Domino or WebSphere server」,之後就能到同一 DNS domain 裡其他啟用的伺服器,不用再登入。
SSO 之所以成立,是因為那個 token 不是某台自己隨便發的——它是用一把各台共享的密鑰簽出來的,所以 B 台收到 A 台發的 token,才驗得過、才認得這個人。
Web SSO Configuration 文件:那把共享密鑰
多機 SSO 的核心是一份 Web SSO Configuration document(官方:建立 Web SSO Configuration):
- 它是 domain-wide 的文件,放在 Domino Directory。
- 要複寫到所有參與的伺服器——每台都要有同一份,才有同一把鑰匙。
- 它「contains a shared secret key used by servers for verifying user credentials」——這把 shared secret key(LTPA token key)就是各台之間互信的根。
- 一個 domain 技術上可以有多份這種文件(每份要取不同名稱),但官方註明這只在**有限情況下(limited circumstances)**才行得通。
會讓 SSO 失敗的硬條件
SSO 設好卻一直要重登,通常是踩到這幾條(官方:多伺服器 SSO):
- DNS domain 要一致、且以句點開頭:參與伺服器要在同一個 DNS domain,設定值要像
.example.com這樣以句點開頭。 - URL 要用完整 DNS 名稱:不能用 host name 或 IP——因為 cookie 裡的 DNS domain 必須跟 server URL 相符,而且 cookie 不能跨 TCP/IP domain 用。
- 參與清單只能放 Domino 伺服器:不能放群組、萬用字元、或 WebSphere 伺服器名。
- 所有 SSO 伺服器要用同一種 Internet-access 方式:全部用 Internet Site documents、或全部用 Server 文件——不能混。
一個大雷:開 Internet Sites 會停用 SSO
這條最容易中、而且症狀很迷惑:在 Server 文件啟用 Internet Sites 時,既有的 SSO 設定會被自動停用(官方:「any existing SSO configuration is automatically disabled」)。
也就是說,如果你照上一篇把伺服器切到 Internet Sites,原本掛在 Server 文件上的 SSO 就不算數了——你得在 Internet Site 那一側(Web Site 文件的 session 認證)重新設定 SSO。切換 Internet Sites 之後「大家又要重新登入了」,十之八九就是這個。
跟 WebSphere 共用 LTPA
想讓 Domino 跟 WebSphere(或跨 Domino domain)共用同一套登入,靠的是 LTPA token,但有幾個限制要先知道:
- WebSphere 不能直接用 Domino 產生的 LTPA token;做法是從 WebSphere 匯出 token、匯入 Domino,共用同一個 LTPA group。
- 一旦匯入 WebSphere 的 LTPA key,就不能再設 SSO idle timeout——因為 WebSphere 本身會忽略 idle timeout,那個選項會消失。
- LTPA realm 在所有參與伺服器必須一致。
- 要跨多個 Domino domain 做 SSO:讓各 domain 共用同一把 key information(具體作法就是把同一把 WebSphere LTPA token 匯進每個 domain)。
小結
- basic vs session:basic=HTTP 彈窗每次帶帳密;session=登入表單+cookie 帶 token(要接受 cookie)。
- single vs multi:Single Server 的 cookie 只對本機;Multiple Servers (SSO) 同一 DNS domain 一次登入到處通。
- Web SSO Configuration:domain-wide、複寫到所有參與伺服器、含 shared secret key(LTPA)驗憑證。
- 硬條件:同一 DNS domain(以句點開頭)、URL 用 FQDN、cookie 不跨 TCP/IP domain、只列 Domino 伺服器、所有 SSO 伺服器同一種 Internet-access 方式。
- 大雷:在 Server 文件開 Internet Sites 會自動停用既有 SSO → 要在 Web Site 那側重設。
- WebSphere/LTPA:匯入 WebSphere key 就不能設 idle timeout;LTPA realm 要一致;跨 domain 匯同一 token。
參考來源
- Multi-server session-based authentication (single sign-on)(SSO 用 cookie 帶 token、DNS domain 要對、Web SSO Configuration 含 shared secret、匯 WebSphere key 無 idle timeout、開 Internet Sites 自動停用 SSO)— HCL Domino(官方)
- Setting up session authentication for Web Site documents(在 Web Site 文件設 session 認證:Disabled / Single Server / Multiple Servers)— HCL Domino(官方)
- Creating a Web SSO configuration document(建立 Web SSO Configuration、參與伺服器、DNS domain、LTPA realm)— HCL Domino(官方)