Single Sign-on   SSO是老生常談的話題了,但部分同學對SSO可能掌握的也是云里霧里,一知半解。本次手撕公司的SSO原理,試圖以一種簡單,流暢的形式為你提供有用的SSO原理。   按照本人一貫行文風格,我們先說什么是SSO,為什么要提出SSO? SSO: 在多個系統中,只需要登陸一次,就可以訪問其他相互信任的應用系統, 這個技術的提出解決了: 企業運行了多個服務,而賬號需要集中統一管理 終端用戶登陸一次,即可使用一個賬戶享受所有不同域名下服務。  SSO 與CAS(Central Authentication System)這個概念密切相關,賬戶集中由某個服務管理,SSO服務只負責登陸認證。    登陸認證與【服務端在瀏覽器上寫入的認證Cookie】密切相關, Cookie 有一系列重要屬性:Domain,Path, Expiration,HttpOnly 決定了該Cookie 在客戶端的作用域、作用范圍、有效時間、有效操作方式 原理   用戶首次訪問 website1 ① 用戶訪問website1 系統,website1系統需要認證, 用戶當前沒有登陸 ② website1給客戶端返回302重定向響應, 客戶端重定向到SSO服務頁 # 交互過程確實是臨時跳轉,下面傳參false, 返回302臨時重定向響應   context.Response.Redirect(ssoURL, false);        用戶并沒有登陸SSO系統,所以SSO系統會返回登陸界面 ③ 用戶在SSO登陸界面輸出賬戶/密碼 ④ 登陸成功,SSO會在客戶端寫入一個 cookie for sso并產生一個301重定向響應,客戶端將重定向到原website1地址,該請求附帶了SSO給與這次認證成功的 ticket       http://www.website1.com?ticket=XXXX-OOOO-XXXX-OOOO ⑤ website1收到以上重定向請求,解析QueryString中的ticket, 向SSO做一次ticket驗證; 驗證通過向客戶端寫入本站的 cookie for website ⑥ 上面第5步,瀏覽器地址會顯示:http://www.website1.com?ticket=XXXX-OOOO-XXXX-OOOO, 在本站驗證通過之后,最好再做一個重定向,返回業務首頁:www.website1.com, 本步驟不是SSO登陸的標準流程。   之后用戶訪問website2 ① 用戶訪問website2, 用戶在website2并沒得到認證;跳轉回 SSO ② SSO服務檢測到該 用戶在SSO域下存在Cookie for sso, 認定該用戶已經登陸,故跳轉回website2, 如上也會攜帶認證ticket ③ 如上,website2收到 website2.com?ticket=XXXX-OOOO-XXXX-OOOO請求, 會做一次SSO驗證; 驗證成功,寫入本站cookie for website2   重難點解釋 ① SSO認證成功,寫入的cookie for sso, 是登陸到其他系統的關鍵 ② website1收到SSO認證成功的重定向請求,解析出 ticket=XXXX-OOOO-XXXX-OOOO, 為什么還要做一次SSO驗證?     因為website1收到的來自SSO的重定向請求地址,有可能是偽造, 所以在website1中需要去SSO驗證一次。 ③ 標準的CAS登陸流程有兩次302客戶端重定向, 分別由原站點website1和SSO啟動。   理論上 整個流程由服務端重定向也是可以的 ?? 看官若發現有漏洞,可在評論區回復。  ④ 退出SSO登陸, 要做兩件事情:      - 向SSO發起api請求,請求SSO刪除用戶在SSO域下的認證cookie for sso      - 移除本站的cookie for website1 ⑤ 每個website,至少需要如下sso配置      "SsoOptions": { "BaseAddress": "http://sso-cas.sso.com",     // 基地址 "LoginPath": "/login", // sso登陸地址 "LogoutPath": "/api/logout", // 退出sso登陸的api地址 "ValidateTGTPath": "/api/validate", // 驗證ticket的api地址 "UserInfoPath": "/api/v2/userinfo" // 從sso拿到登陸用戶信息的api地址 },   That' all,這是自己對SSO登陸的一些理解, 本圖文希望以流暢的思路記錄SSO流程, 各位看官不要吃快餐,知其然更知其所以然很關鍵。 
轉載自://www.cnblogs.com/JulianHuang/p/11811239.html
欧美黄色网