# VMware SSO Solutions: 客製化單一登入使用VDI https://sapphirelin.github.io/20210630-VMware-SSO-Solutions-%E5%AF%A6%E4%BD%9C%E5%AE%A2%E8%A3%BD%E5%8C%96%E5%96%AE%E4%B8%80%E7%99%BB%E5%85%A5-VDI/ 隨著重視資安的趨勢,越來越多客戶接受使用 VMware 的 VDI 及 UEM 解決方案。這時候整合企業原先既有的登入方式(或習慣)就能讓企業員工有更好的使用體驗,IT管理人員也能減少被問問題的麻煩,專心投入生產力目標,串接一次,適用一生。 加上現在使用的軟體跟系統真的是越來越多,密碼可能有上百組,如果能夠只用一個方式、一組帳號密碼,又安全又簡單的登入,對個人、對企業都絕對大歡迎。所以除了大規模應用的OTP簡訊認證,現在也開始流行 Passwordless 的2FA、MFA、Biometric、FIDO 等等的 Single-Sign-on (單一登入) 解決方式。 而現在最常運用到 SSO 身份識別跟授權的傳輸協定就是—— SAML ! SAML 是基於 xml 的開源標準來進行身份驗證跟授權的傳輸協定,有三種角色: 1. idp: 身份驗證商 Identity Provider 2. principal: 也就是我們的使用者 User 3. sp: 服務提供商 Service Provider 簡單來說就是 idp & sp 會透過透過 SAML 格式來交換包含憑證的參數,互相認識對方,也認定對方,User 就能享受到 SSO 好處。上述提到的各種 MFA, FIDO 國際協定也經常運用 SAML ,VMware 現在產品與產品間的身份認證,也都是用 SAML 來進行傳輸。而 EUC 系列產品 Horizon(VDI) 與 Workspace ONE 等,也都允許自行利用 SAML 串接,並且可以同時擔綱 idp 或 sp 的角色。 最近遇到很多客戶狀況是,他們可能原本就有既有的身份認證系統(像是Okta, Azure MFA, ISV's OTP),想直接用在單一登入VMware 終端設備場景,例如直接登入後給我指定虛擬桌面、或是登入後允許我進受到VPN 控管的 Tunnel apps等。 本文將依上述情境應用 SAML ,實作 SSO 串接: ## / 環境準備 / 僅需兩樣: 1. 一台 WS1 Access 跟 administrator 帳號 (SaaS/On-prem都行) 2. 一個有 Java 1.6+ 跟 Maven 環境 VMware 用於客製化 SSO 解決方案的元件為 Workspace ONE Access (WS1 Access),前身叫做vIDM (VMware Identity Manager)。此元件在許多產品都有附贈,遇過很多情況都只是當初導入時沒有順便裝起來而已。安裝資源的要求也超級輕,詳細可參考官方文件: https://docs.vmware.com/tw/VMware-Workspace-ONE-Access/20.10/workspace_one_access_install/GUID-E81B6B1B-A3D1-40D0-806A-3D31502C53A5.html 在這個例子下 WS1 Access 的角色是 sp。 簡易的範例程式碼為 java based 用 maven 包的,是部門的人自己寫出來滴,歡迎大家拿來玩: https://github.com/vmware/vidm-saml-toolkit/tree/master/Sample_AuthServer 紀錄一下這次的環境: openjdk 11.0.11 / Apache Maven 3.6.0 ## / 設定 Workspace ONE Access / ### Step 1:進入後台 首先就是登入到 WS1 Access 的管理後台,照順序選 "Identity Manager" --> "Identity Providers" --> "Add Identity Provider" --> "Create Third Party IDP". ![Pic 1: VMware workspace one sso](https://i.imgur.com/EX8lYFY.png) (這邊是 20.10 版本的畫面,不同版本只會有按鈕的些許差異而已,功能都有的) ### Step 2:新增IdP #### 2-1 先幫這個idp 取名字,如果你串第三方產品就可以寫那個產品的名稱: ![](https://i.imgur.com/Wp35bqL.png) #### 2-2 貼上idp 都提供進行交換的SAML metadata,第三方產品都會寫好相關的xml,自行開發的可以參考下範例程式碼,放在 webapp 資料夾下的 idp.xml: ![](https://i.imgur.com/1uogCtF.png) #### 2-3 全部貼上去後按下"Process IdP Metadata",下面就會直接帶出對應的參數了,簡單方便。這次的登入介面簡單的利用WS1 Access 內建的userName / Password 來用,下面都先不調整。 ![](https://i.imgur.com/DOhimWU.png) #### 2-4 針對要授權使用這個IdP的網路,我環境只有ALL,勾起來。 下面的話命名Auth Methods 為myAuth,憑證部分此code 使用的是X509,選起來按新增。 ![](https://i.imgur.com/WSXnmBl.png) #### 2-5 這頁的最後一步,這邊就是 WS1 產出的 SP Metadata ,用來給 idp 進行交換,拿到這個 xml 的連結後,按"Add" 完成建立IdP。 ![](https://i.imgur.com/HTrzAHY.png) ### Step 3:設定 Policiy #### 3-1 換到 "Identity Manager" --> "Policies" --> "Edit Default Policy" 我的環境比較簡單,實際應用的話就選擇需要利用額外IdP登入的那則 Policy 就好。 ![](https://i.imgur.com/tGxpeAP.png) > 這邊可以看到 WS1 Access 最強功能--以 policy based 來去規範說用什麼認證方式才能登入到什麼樣的網段、使用什麼樣的應用程式,例如一般利用瀏覽器走FIDO啦、Win 10 的話要插 smart card啦、不允許使用 Android 設備登入啦,或是限制在上班時間8小時或是可以一個禮拜居家辦公後才 expired等等,對資安嚴謹的公司來說只要在這個 portal 上面設定規則,就能依照業務上的使用情境來去做登入的控管。串接登入習觀資料到Intelligence 的AI上面,依照既有習慣偵測不安全登入行為,也是靠著這些rule 來拒絕,保持萬無一失的登入的。 #### 3-2 接著選擇 "Configuration" --> "ADD POLICY RULE" ![](https://i.imgur.com/NTkmY4Z.png) #### 3-3 如果是既有規則基本上 range & device type 不用動,這邊允許全部,注意最下面的認證方式要選我們2-4新增的驗證規則,接著按"SAVE" ![](https://i.imgur.com/DGalLiy.png) #### 3-4 回到Configuration後,注意把我們新的驗證模式拉到最前面,讓他的變成第一個驗證的權重,設定就完成囉!串完啦~ 。:.゚ヽ(*´∀`)ノ゚.:。 ![](https://i.imgur.com/4SgaWYy.png) ## / demo / 影片: > 上傳中,請稍候 (*ˇωˇ*人) > 截個圖讓我記得是哪個檔案: > ![](https://i.imgur.com/Nns7cjO.png) 懶人歡迎直接參考我的指令完成展示: ``` $ git clone https://github.com/vmware/vidm-saml-toolkit.git $ cd vidm-saml-toolkit $ mvn clean install $ cd Sample_AuthServer $ mvn compile exec:java ``` ## / 結語 / 原本的登入方式就是WS1的介面: ![](https://i.imgur.com/oFokNUE.png) 現在就可以客製成你想要的登入模樣啦! ![](https://i.imgur.com/RqOofGK.png) --- 以上就是本次的分享,Tschüss! (ノ>ω<)ノ ###### tags:`blog posted` `work hack` `VMware` `EUC` `WorkspaceONE` `VDI` `SAML`