**:
sso與多平台登入
sso一般用於同一單位的多個站點的登陸狀態保持,技術上一般參考cas協議;多平台登入一般是oauth體系的協議,有多種認證模式但是不具備會話管理和狀態保持。
不過從本質上講,我覺得兩者都是通過可信的第三方進行身份驗證,如果說同一單位的多個子系統共同只圍繞乙個第三方賬戶(可以稱為認證中心)進行多平台登入驗證,那麼在第三方平台登入後再訪問其他**,效果和統一登入是差不多的。此外,oauth2還有個好處就是可以實現跨平台的登入管理,因為他的認證過程不依賴於session和cookie,比如對於移動端裝置,以及在前後端分離後這種登入認證方式也可以起到很大作用。
這篇文章裡我就著結合之前專案中整合過的oauth2來講一講這種登入認證的過程。專案是基於shiro+altu實現,參考方案mkk/oauth2-shiro - 碼雲 - 開源中國 。
oauth2的基本概念
在oauth中至少是有使用者,應用伺服器,認證伺服器這幾個角色在互動。oauth的作用就是讓"客戶端"安全可控地獲取"使用者"的授權,與"應用伺服器"進行互動。
使用者通過瀏覽器訪問乙個應用,比如我要上慕課網學習。
**要求我登入,我選擇使用qq登入,這裡的qq登入就是那個認證伺服器。
這個時候慕課提供的qq登入鏈結會把我帶到qq登入頁面
在qq的登入頁面完成登入後,選擇授權,也就是允許慕課網獲取我的資料。
這個時候我們看到瀏覽器經過幾次跳轉後返回慕課網,這個時候我們已經完成了登入。
重點在於幾次跳轉的過程中,慕課網和qq登入的服務之間還有過幾次互動。
我們選擇了授權的時候qq登入伺服器會根據慕課跳轉到qq時候給出的重定向鏈結返回給慕課網乙個code,這個code代表qq的登入伺服器認可慕課網這個應用伺服器的這個請求是合法的予以放行.
慕課這個時候就會用這個code再次向qq登入服務發起請求服務令牌(token)。
拿到這個令牌之後,接下來慕課需要使用者的一些基本資訊時就可以通過在向qq服務提交的請求頭里帶上這個令牌,令牌驗證通過就可以拿到使用者資源。
這一部分的操作是應用伺服器和驗證伺服器之間的互動,這個過程對使用者是透明的。這個過程中慕課網是不需要知道使用者的賬號密碼也可以完成對使用者身份的認證,這個token就可以用來標識使用者資源。
官方的執行流程圖是這樣的:
上述講的是oauth2中支援的授權碼(code)方式的認證流程,也是其支援的四種認證方式裡最複雜的,其他的三種種包括:
簡化模式(implicit),(在redirect_uri 的hash傳遞token; auth客戶端執行在瀏覽器中,如js,flash)
密碼模式(resource owner password credentials),將使用者名稱,密碼傳過去,直接獲取token;
客戶端模式(client credentials),無使用者,使用者向客戶端註冊,然後客戶端以自己的名義向'服務端'獲取資源;
詳細的oauth2資料參考理解oauth 2.0|阮一峰的網路日誌
分別適用不同場景,複雜度也比授權碼模式要低,所以這裡就只說說授權碼模式的具體過程。
code方式認證例項
假設現在有乙個應用伺服器跑在我本機8000埠,認證伺服器在8090埠。在需要使用者登入時候把使用者帶到以下的乙個url.
我們注意到幾個重要的引數:
可以看到帶回了返回的引數,以及原樣返回的狀態碼。
應用伺服器這時候拿到返回的code去換token,發起如下的乙個請求:
與之前請求類似只是多了乙個code欄位,去驗證客戶端的合法性。
驗證伺服器會在收到code以後去查詢是否有支援這種code的處理器,如果有則發放token。
OAuth 授權過程
oauth認證過稱需要你的應用和google的授權伺服器,終端使用者做一系列互動。基本的互動過稱 1.你的應用從google的授權伺服器獲得乙個未授權的請求token 2.google要求使用者給予你的應用訪問需要的資料。比如你要訪問gmail,google把頁面引導到gmail的登入頁面,提示使用...
OAuth的原理和授權流程
oauth的認證和授權的過程中涉及的三方包括 用 戶 服務商的使用者 第三方 通常是 該 想要訪問使用者儲存在服務商那裡的資訊。比如某個提供 列印服務的 使用者想在那裡列印自己存在服務商那裡的網路相簿。在認證過程之前,第三方需要先向服務商申請第三方服務的唯一標識。oauth認證和授權的過程如下 1 ...
OAuth的認證和授權的過程
oauth的認證和授權的過程中涉及的三方包括 用 戶 服務商的使用者。第三方 通常是 該 想要訪問使用者儲存在服務商那裡的資訊。比如某個提供 列印服務的 使用者想在那裡列印自己存在服務商那裡 的網路相簿。在認證過程之前,第三方需要先向服務商申請第三方服務的唯一標識。oauth認證和授權的過程如下 1...