在 Kerberos 環境中為 IBM Lotus Connections 配置單點登入
轉自:http://www.ibm.com/developerworks/cn/lotus/connections-kerberos/index.html
在我們開始討論如何在 IBM Lotus Connection 中配置單點登入之前,需要先回顧一些概念:Kerberos 和 SPNEGO。Kerberos 是一種計算機網路認證協議,由 MIT 設計和開發,MIT 允許在非安全網路上通訊的節點以安全的方式相互證明身份。Kerberos 版本 5 認證協議 是一種 RFC (Request For Comments) 標準。
SPNEGO(簡單和受保護的 GSSAPI 協商機制)是一種 GSSAPI 偽機制,用於協商那些潛在的真正機制。它最明顯的用處在於 Microsoft 的 HTTP Negotiate 認證擴充套件。可協商的子機制包括 NTLM (NT LAN Manager) 和 Kerberos,它們均在 Microsoft Active Directory 中。在該活動目錄中可找到更多的資訊。
Lotus Connections 可以利用 WebSphere Application Server SPNEGO TAI(信任關聯攔截器)來提供單點登入(SSO)功能,使使用者登入到 Microsoft Windows 桌面然後自動登入使用 Lotus Connections 特性而無需任何認證。
圖 1 顯示了 WebSphere Application Server SPNEGO 環境中的請求/響應資料流。
您可在 資訊中心 閱讀有關 WebSphere Application Server SPNEGO TAI 的更多資訊。
本文將闡述如何基於圖 2 所示的部署使 Lotus Connections 為使用者提供單點登入(SSO)。
圖 2. Lotus Connections SPNEGO 部署拓撲
Active Directory 和 Kerberos KDC(金鑰分發中心)部署在 Microsoft Windows 2003 Server Enterprise Edition 系統上。Microsoft Windows 客戶端系統是使用者的 Windows 客戶端系統,部署有瀏覽器和其他應用程式。Lotus Connections 2.5 伺服器是將 Active Directory 作為 LDAP 目錄使用的 Lotus Connections 2.5 環境;Lotus Connections 2.5 伺服器可以是一個多節點叢集或一個單節點環境。在本文中,我們將 Lotus Connections 2.5 伺服器部署在 Microsoft Windows 系統上。
Active Directory 和 Kerberos KDC 主機上的先決任務
在繼續後面的工作之前,系統管理員需要在 Active Directory 和 Kerberos KDC 主機上完成若干先決任務。
在 Microsoft Windows 2003 上安裝 Active Directory
參考 http://technet.microsoft.com/en-us/library/aa998088.aspx 瞭解如何在 Windows 2003 Server Enterprise Edition 上安裝 Active Directory 。在您成功安裝 Active Directory 之後,確保 Kerberos 金鑰分發中心繫統服務在 Services 列表上得到正確配置。雙擊 Kerberos Key Distribution Center 服務選擇 Kerberos Key Distribution Center 屬性,如圖 3 所示。確保 Startup 型別欄位為 Automatic (這是預設選項)。
圖 3. Kerberos Key Distribution Center 屬性
KDC 服務允許使用者使用 Kerberos V5 認證協議登入到網路上。如果該服務停止,使用者就無法登入到域並訪問服務。在不支援 KDC 的系統(非域控制器)上,KDC 服務啟動型別被禁用。
您可以閱讀有關 Microsoft Windows KDC 服務 的更多資訊。
您可以瞭解如何修改 Microsoft Windows Server 2003 中的 Kerberos 協議登錄檔項和 KDC 配置金鑰。我們在該配置中使用預設值。
確保您在 Windows 2003 系統中安裝了 DNS 伺服器,詳情可檢視 整個流程 的第 9 步。在 DNS Registration Diagnostics 頁面上,遵循以下步驟:
- 在計算機上單擊 Install 並配置 DNS 伺服器。
- 設定這臺計算機使該 DNS 伺服器作為其首選 DNS 伺服器使用。
- 單擊 Next。
- DNS 服務在這個 Microsoft Windows 2003 Server 上執行。雙擊 DNS Server 服務選擇圖 4 所示的 DNS Server 屬性。確保 Startup 型別欄位為 Automatic (這是預設設定)。
託管 Active Directory 的 Microsoft Windows Server 2003 被用作域控制器。
如果時間同步在您的企業內部網中不是問題,您可以略過這部分。
Kerberos 要求所用主機的時間是同時的。票據有一個時間可用段,如果主機時鐘與 Kerberos 伺服器時鐘不同步,則認證失敗。
我們經常將域控制器作為 時間伺服器 使用,並在有關的 Lotus Connections 伺服器主機上執行 Windows Schedule 任務 以完成與域控制器的時間同步。圖 5 顯示了每分鐘呼叫一次 TimeSyn.bat 樣例的示例任務。
圖 5. 用作時間同步的 Windows Scheduled Tasks
在我們的示例中,使用者需要在 C:\ 中建立一個名為 TimeSyn.bat 的批檔案。如果 example.yourdomain.com 是域控制器,則 NTP 時間伺服器 TimeSyn.bat 的程式碼如清單 1 所示。
w32tm /config /manualpeerlist:acme.yourdomain.com.com,0x8 /syncfromflags:MANUAL net stop w32time net start w32time w32tm /resync |
在 Windows 2003 Server Enterprise Edition 上 安裝 Microsoft Windows 支援工具。
您需要使用該工具在域控制器上執行 ktpass 命令,以為服務帳戶設定 SPN 並生成 keytab 檔案。
您可以詳細瞭解 Kerberos 協議如何在 Microsoft Windows Server 2003 中運作。
配置 Lotus Connections 伺服器使其支援 Kerberos 環境。完成先決任務之後,就可以開始配置 Lotus Connections 了。
配置 Lotus Connections 使其將 Active Directory 作為使用者庫使用
參考 Lotus Connections 資訊中心,瞭解如何配置安全性以將 Active Directory 作為使用者庫使用,並瞭解如何填充 Profiles 資料庫。
建立一個服務帳戶以在 Active Directory 中保留 SPN
在 Kerberos 環境中 Lotus Connections 需要一個 SPN(服務主體名稱)來識別 Lotus Connections 伺服器。在 Active Directory 中需要一個服務帳戶以保留該 SPN。
要建立服務帳戶,登入到域控制器,開啟 Manage Your Server - Domain Controller (Active Directory) - Manage users and computers in Active Directory,然後單擊按鈕。
在 Account 頁面上,確保選中 User cannot change password and Password never expires 選項,如圖 6 所示。
在域控制器上執行 ktpass 命令以為服務帳戶設定 SPN,並生成 keytab 檔案:
ktpass –princ
-mapOp set –pass
其中
一個 Kerberos 主體名稱分為三個部分:主名稱、例項和領域。典型的 Kerberos 主體名稱格式是 primary/instance@REALM。如果 Lotus Connections 宿主在 SVTLCSPNEGO.cn.example.com 上且域名為 CN.EXAMPLE.COM,則 SPN 為 HTTP/SVTLCSPNEGO.cn.example.com@CN.EXAMPLE.COM。
是您想要儲存 keytab 檔案的位置。 是服務帳戶名稱。 是服務帳戶名稱的密碼。
假定第 1 步中建立的使用者帳戶是 lcserver01 且服務帳戶密碼是 Password1。您想將 keytab 檔案儲存為 C:\SVTLCSPNEGO.keytab,因此命令類似於以下程式碼:
ktpass -princ HTTP/SVTLCSPNEGO.cn.ibm.com@CN.IBM.COM -out
c:\SVTLCSPNEGO.keytab -mapuser lcserver01 -mapOp set -pass Passw0rd1
命令輸出如清單 2 所示。
Targeting domain controller: SVTLCSPNEGO.cn.ibm.com Using legacy password setting method Successfully mapped HTTP/SVTLCSPNEGO.cn.ibm.com to lcserver01. WARNING: pType and account type do not match. This might cause problems. Key created. Output keytab to c:\SVTLCSPNEGO.keytab: Keytab version: 0x502 keysize 68 HTTP/SVTLCSPNEGO.cn.ibm.com@CN.IBM.COM ptype 0 (KRB5_NT_UNKNOWN) vno 4 ety pe 0x17 (RC4-HMAC) keylength 16 (0x5858d47a41e40b40f294b3100bea611f) |
在一個 Lotus Connections 叢集中,您只需要選擇 IBM HTTP 伺服器名稱或虛擬主機名(訪問 IBM HTTP 伺服器的使用者或要體驗 Lotus Connections 特性的虛擬主機)作為 Kerberos 服務主體名稱中的例項名。沒有必要為 Lotus Connections 叢集中的所有節點生成 keytab 檔案。
在 WebSphere Application Server 中配置 SPNEGO TAI
可通過以下步驟在 WebSphere Application Server 管理控制檯中配置 SPNEGO TAI:
- 導航到 Security - Secure administration, applications, and infrastructure,並展開 Web Security。單擊 Trust association。
- 選擇 Enable trust association 選項啟用 TAI。
- 選擇 Interceptors - com.ibm.ws.security.spnego.TrustAssociationInterceptorImpl - Custom properties。
- 新增清單 3 所示的自定義屬性。
清單 3. SPNEGO TAI 自定義屬性
com.ibm.ws.security.spnego.SPN1.hostName=< hostname> com.ibm.ws.security.spnego.SPN1.NTLMTokenReceivedPage=
com.ibm.ws.security.spnego.SPN1.spnegoNotSupportedPage= com.ibm.ws.security.spnego.SPN1.filter=request-url!= /seedlist/authverify;request-url!=/seedlist/ server;request-url!=/seedlist/myserver;request-url!=noSPNEGO com.ibm.ws.security.spnego.SPN1.filterClass =com.ibm.ws.security.spnego.HTTPHeaderFilter
其中:
是用於訪問 Lotus Connections 的伺服器名稱(例如,IBM HTTP 伺服器名稱或虛擬主機名)。 是在本地檔案系統上建立 SPNEGO TAI 重定向頁面的地方,例如 file:///Z:/share/TAIRedirect.html。
您應手動建立該 HTML 檔案。其內容是清單 4 所示的程式碼。
清單 4. SPNEGO TAI 重定向頁面 TAIRedirect.html
|
- 單擊 OK 儲存更改。
圖 7 是一幅顯示真實部署的螢幕截圖。
圖 7. SPNEGO TAI 自定義屬性的 WebSphere 管理控制檯螢幕截圖
清單 5 是一個示例 JACL 程式碼,它可以從 wsadmin 介面安裝 WebSphere SPNEGO TAI。將檔案命名為 ConfigTA.jacl 然後像這樣執行它:
wsadmin -f ConfigTA.jacl
記住要用您的實際配置變數替換 com.ibm.ws.security.spnego.SPN1.hostName 值。
清單 5. WebSphere SPNEGO TAI 安裝所用的 ConfigTA.jacl
################################################### proc saveConfig {} { global AdminConfig $AdminConfig save } proc configTA {} { global AdminConfig set trustAssocConfigId [$AdminConfig list TrustAssociation] set trust_attrib {} set matchFound 0 set trust_assocEnabled y set trust_interceptorClassName com.ibm.ws.security.spnego. TrustAssociationInterceptorImpl if {$trust_assocEnabled != {}} { if {[regexp $trust_assocEnabled y]} { lappend trust_attrib [list enabled "true"] } else { lappend trust_attrib [list enabled "false"] } $AdminConfig modify $trustAssocConfigId $trust_attrib } if {$trust_interceptorClassName != {}} { set listOfTAI [$AdminConfig list TAInterceptor] foreach tai $listOfTAI { set className [$AdminConfig showAttribute $tai interceptorClassName] if {[string compare $className $trust_interceptorClassName] == 0} { set matchFound 1 ### break } } } if {$matchFound == 1} { set interceptorConfigId $tai ################################################### set trust_propertyName com.ibm.ws.security.spnego.SPN1.hostName #replace with your IHS host set trust_propertyValue < !! please replace with your IHS host !!> set trust_propertyRequired false set options_attrib {} lappend options_attrib [list name $trust_propertyName] lappend options_attrib [list value $trust_propertyValue] lappend options_attrib [list required $trust_propertyRequired] $AdminConfig modify $interceptorConfigId [list [list trustProperties [list $options_attrib]]] set trustAttrs [$AdminConfig showall $interceptorConfigId] puts stdout "trustAttrs=$trustAttrs" ################################################### set trust_propertyName com.ibm.ws.security.spnego. SPN1.filterClass set trust_propertyValue com.ibm.ws.security.spnego. HTTPHeaderFilter set trust_propertyRequired false set options_attrib {} lappend options_attrib [list name $trust_propertyName] lappend options_attrib [list value $trust_propertyValue] lappend options_attrib [list required $trust_propertyRequired] $AdminConfig modify $interceptorConfigId [list [list trustProperties [list $options_attrib]]] set trustAttrs [$AdminConfig showall $interceptorConfigId] puts stdout "trustAttrs=$trustAttrs" ################################################### set trust_propertyName com.ibm.ws.security.spnego.SPN1.filter set trust_propertyValue "request-url!=/seedlist/authverify;request-url!= /seedlist/server;request-url!=/seedlist/myserver;request-url!=noSPNEGO" set trust_propertyRequired false set options_attrib {} lappend options_attrib [list name $trust_propertyName] lappend options_attrib [list value $trust_propertyValue] lappend options_attrib [list required $trust_propertyRequired] $AdminConfig modify $interceptorConfigId [list [list trustProperties [list $options_attrib]]] set trustAttrs [$AdminConfig showall $interceptorConfigId] puts stdout "trustAttrs=$trustAttrs" ################################################### set trust_propertyName com.ibm.ws.security.spnego. SPN1.spnegoNotSupportedPage set trust_propertyValue file:///z:/TAIRedirect.html set trust_propertyRequired false set options_attrib {} lappend options_attrib [list name $trust_propertyName] lappend options_attrib [list value $trust_propertyValue] lappend options_attrib [list required $trust_propertyRequired] $AdminConfig modify $interceptorConfigId [list [list trustProperties [list $options_attrib]]] set trustAttrs [$AdminConfig showall $interceptorConfigId] puts stdout "trustAttrs=$trustAttrs" ################################################### set trust_propertyName com.ibm.ws.security.spnego. SPN1.NTLMTokenReceivedPage set trust_propertyValue file:///z:/TAIRedirect.html set trust_propertyRequired false set options_attrib {} lappend options_attrib [list name $trust_propertyName] lappend options_attrib [list value $trust_propertyValue] lappend options_attrib [list required $trust_propertyRequired] $AdminConfig modify $interceptorConfigId [list [list trustProperties [list $options_attrib]]] set trustAttrs [$AdminConfig showall $interceptorConfigId] puts stdout "trustAttrs=$trustAttrs" ################################################### } } ############################################################# # Main procedure ############################################################# puts stdout "Run like this: wsadmin -f ConfigTA.jacl" puts ">configTA" configTA saveConfig |
在 WebSphere Application Server 中使用 SPNEGO TAI 之前,您需要建立 Kerberos 配置檔案。首先,複製 keytab 檔案到安裝有 Lotus Connections 的伺服器上。然後執行清單 6 中所示的命令,用 wsadmin 命令列工具執行 createKrbConfigFile 指令碼。
清單 6. 建立 Kerberos 配置檔案的 wsadmin 命令
$AdminTask createKrbConfigFile { -krbPath |
其中:
是 WebSphere Application Server 位置路徑,而不是 Lotus Connections 的位置。 是 Kerberos 領域,必須全部以大寫字母顯示。 是金鑰分發中心主機的名稱。 是 DNS 伺服器名稱。 是在域控制器上生成的 keytab 檔案的位置。
要啟用 SPNEGO TAI,登入到 WebSphere Application Server 管理控制檯,然後導航到 Servers - Application servers。選擇伺服器名稱(一般為 server1),擴充套件 Java and Process Management,然後選擇 Process Definition - Java Virtual Machine - Custom Properties。
新增兩個自定義屬性:
com.ibm.ws.security.spnego.isEnabled = true
java.security.krb5.conf =
如果您在多個伺服器例項中安裝 Lotus Connections,您需要對所有伺服器例項重複這個步驟。
清單 7 是能從 wsadmin 介面完成任務的示例 Jython 程式碼。將檔案命名為 configspnegojvm.py 並像這樣執行它:
wsadmin -lang jython -user wasadmin -password wasadmin -f configspnegojvm.py
Your_Cell_Name Your_Node_Name Your_ServerInstance_Name.
清單 7. 啟用 JVM SPNEGO 自定義屬性所用的 configspnegojvm.py
def configspnegojvm(cellName, nodeName, serverName): global AdminConfig krb5conf = "C:/IBM/WebSphere/AppServer/java/jre/lib/security/krb5.conf" javasrv = AdminConfig.getid("/Cell:" + cellName + "/Node:" + nodeName + "/Server:" + serverName + "/") # Checking for existence of server print "Checking for existence of server " + serverName if len(javasrv) == 0: print "Error -- server not found for name " + serverName + " :: /Cell:" + cellName + "/Node:" + nodeName + "/Server:" + serverName + "/" return else: print "OK. " + javasrv #======================add JVM Custom Properties===================== javaproc = AdminConfig.list('JavaProcessDef', javasrv) prop = AdminConfig.list('Property', javaproc) jvmp = AdminConfig.list('JavaVirtualMachine', javaproc) if (prop.find("com.ibm.ws.security.spnego.isEnabled") >= 0): print "INFO: JVM properties seem already exist:" print prop return AdminConfig.create('Property', jvmp, [['name', 'com.ibm.ws.security. spnego.isEnabled'], ['value', 'true'], ['required', 'false']]) AdminConfig.create('Property', jvmp, [['name', 'java.security.krb5.conf'], ['value', krb5conf], ['required', 'false']]) AdminConfig.save() print "==========Current JVM Custom Properties==========" prop = AdminConfig.list('Property', jvmp) print prop #Main: #./wsadmin -lang jython -user wasadmin -password wasadmin -f configspnegojvm.py Your_Cell_Name Your_Node_Name Your_ServerInstance_Name if (len(sys.argv) != 3): print "This script. requires 3 parameters" print "e.g.:./wsadmin -lang jython -user wasadmin -password wasadmin -f configspnegojvm.py Your_Cell_Name Your_Node_Name Your_ServerInstance_Name" else: cellName = sys.argv[0] nodeName = sys.argv[1] serverName = sys.argv[2] print "cellName: " + cellName print "nodeName: " + nodeName print "serverName: " + serverName print configspnegojvm(cellName, nodeName, serverName) |
新增以下部分到 proxy-config.tpl 檔案中,為 LtpaToken cookies 配置 Ajax 代理。您可通過 wsadmin 工具完成該任務,首先抽取配置檔案,新增以下內容,然後檢查配置。您需要重啟伺服器例項才能接受更改。參見清單 8。
清單 8. Ajax proxy LtpaToken cookie 的 proxy-config.tpl 設定
|
在名為 httpd.conf 的 IBM HTTP Server 配置檔案中設定 URL 重寫規則,以登出到未受保護的 Web 頁面,這樣就不用再次進行 SPNEGO 認證使用者就可自動登入。步驟如下:
- 在 IBM HTTP Server 上開啟 httpd.conf 檔案,取消以下程式碼行的註釋(刪除 #):
#LoadModule rewrite_module modules/mod_rewrite.so - 然後新增清單 9 所示的程式碼。
RewriteEngine On RewriteCond %{REQUEST_URI} /(.*)/ibm_security_logout(.*) RewriteCond %{QUERY_STRING} !=logoutExitPage= |
其中:
一定要為 HTTP 和 HTTPS 配置 URL 重寫規則。
在 Kerberos 環境中使用 Lotus Connections 之前,使用者需要配置其客戶端。
首先,使用者客戶端系統加入域。在圖 8 所示的 TCP/IP Properties 視窗中,客戶端系統的 DNS 伺服器值被設定為域控制器地址。
圖 8. 客戶端系統上的 TCP/IP Properties
接下來,跟蹤連結 http://support.microsoft.com/kb/295017 加入域。客戶端成功加入域之後,域控制器的管理員可在 Active Directory Users and Computers 檢視中看到新加入成員,如圖 9 所示。
其次,使用者需要配置其客戶端瀏覽器以使用 SPNEGO。
如果您在使用 Microsoft Internet Explorer,那麼請按以下步驟操作:
- 在 Internet Explorer 視窗,選擇 Tools - Internet Options - Security。
- 選擇本地內聯網圖示,單擊 Sites。
- 在出現的視窗中,單擊 Advanced。在 Add this Web site to the zone 欄位中,輸入主機名的 Web 地址,這樣就能在 Web sites 欄位中的 Web 站點列表上啟用單點登入(SSO)。
- 單擊 Close,然後單擊 OK 完成配置步驟並關閉 Local intranet 視窗。
圖 10. 本地內聯網設定
- 在視窗中的 Security 級別部分,單擊 Custom Level。在彈出的 Security Settings 視窗中,滾動到 User Authentication - Logon 並選擇 Automatic logon only in Intranet zone 選項。單擊 OK 關閉 Security Settings 視窗。參見圖 11。
圖 11. 本地內聯網區域的安全設定
- 在 Internet Options 視窗中,單擊 Advanced 選項卡並滾動到 Security 設定。確保選中 Enable Integrated Windows Authentication (requires restart) 選項。參見圖 12。
圖 12. Internet Options 設定
- 單擊 OK。重啟 Internet Explorer 瀏覽器啟用該配置。
如果您在使用 Mozilla Firefox 瀏覽器,那麼可按以下步驟操作:
- 開啟 Firefox。
- 在 adress 欄位中輸入 about:config。
- 在 Filter 欄位中輸入 network.n。
- 雙擊 .negotiate-auth.trusted-uris。該首選項列出允許同瀏覽器參與 SPNEGO 認證的站點。輸入受信任的域或 URL 列表,用逗號隔開。
注意:您必須如圖 13 所示設定 network.negotiate-auth.trusted-uris 的值。
圖 13. Mozilla Firefox 瀏覽器設定
- 如果部署的 SPNEGO 解決方案使用信任委託的高階 Kerberos 特性,那麼雙擊 network.negotiate-auth.delegation-uris。該首選項列出可通過瀏覽器參與伺服器使用者認證的站點。輸入受信任的域或 URL 列表,用逗號隔開。
- 單擊 OK。顯示的配置已得到更新。
- 重啟 Firefox 瀏覽器啟用該配置。
在 Kerberos 環境中通過單點登入功能訪問 Lotus Connections
前面幾步工作完成後,使用者便可通過單點登入體驗 Lotus Connections 了。他們需要登入到其系統上,使用 Lotus Connections 特性並不難。圖 14 是一幅真實部署螢幕截圖。使用者 Aamir_000_000 登入到他的 Windows 客戶端(已加入由域控制器控制的域),開啟 Firefox 瀏覽器,輸入 Lotus Connections 主頁地址,然後自動登入到 Lotus Connections 。
圖 14. 自動載入的 Lotus Connections 主頁
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14751907/viewspace-628339/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在IBM Lotus Sametime V7.5.1中配置Eclipse環境IBMEclipse
- 在 IBM Lotus Connections 2.5 中定製電子郵件通知IBM
- 部署 IBM Lotus Connections: 維護IBM
- IBM Lotus Connections 2.5 評審指南IBM
- CAS SSO單點登入服務端環境搭建服務端
- CAS SSO單點登入客戶端環境搭建客戶端
- 使用新的 IBM Lotus Connections 2.5 遷移工具IBM
- ElasticSearch(單節點)環境配置Elasticsearch
- 部署 IBM Lotus Connections: 規劃和架構考慮IBM架構
- 3.CAS SSO單點登入客戶端環境搭建客戶端
- IBM Lotus Connections:使用社會計算提高生產力IBM
- CAS單點登入-https配置HTTP
- 在 IBM WebSphere Portal 中整合 IBM Lotus Quickr 協作功能IBMWebUI
- 2.CAS SSO單點登入服務端環境搭建原始碼服務端原始碼
- CAS SSO單點登入服務端環境搭建之框架深度分析服務端框架
- CAS SSO單點登入客戶端環境搭建之框架深度分析客戶端框架
- 請教單點登入的問題(IBM Websphere Portal)IBMWeb
- .關於CAS SSO單點登入服務端環境搭建原始碼分析服務端原始碼
- 關於CAS SSO單點登入客戶端環境搭建原始碼分析客戶端原始碼
- 2.關於CAS SSO單點登入服務端環境搭建原始碼服務端原始碼
- 3.CAS SSO單點登入客戶端環境搭建&原始碼獲取客戶端原始碼
- 在 IBM Lotus Approach 中計算淨工作日IBMAPP
- 在 IBM Lotus Quickr 8.5 for WebSphere Portal 中定製主題IBMUIWeb
- 為Lotus Connections Home page實現和部署Google小部件Go
- 為 Lotus Connections Home page 實現和部署 Google 小部件Go
- 單點登入原理
- 為 Webform Server 開發 IBM Lotus FormsWebORMServerIBM
- 2.關於CAS SSO單點登入服務端環境搭建原始碼分析服務端原始碼
- 2.基於CAS SSO單點登入服務端環境搭建+架構原始碼服務端架構原始碼
- Spring Cloud企業架構之CAS SSO單點登入服務端環境搭建SpringCloud架構服務端
- Spring Cloud 企業架構之CAS SSO單點登入服務端環境搭建SpringCloud架構服務端
- Spring Cloud 企業架構之CAS SSO單點登入服務端環境搭建SpringCloud架構服務端
- Spring Cloud 企業架構之CAS SSO單點登入服務端環境搭建SpringCloud架構服務端
- 2.基於CAS SSO單點登入服務端環境搭建架構原始碼服務端架構原始碼
- Windows單機配置Zookeeper環境Windows
- 從 PDF 表單遷移到 IBM Lotus FormsIBMORM
- linux登入bash shell環境執行環境變數Linux變數
- 初探單點登入 SSO