OAuth認證明現機制及單點登陸原理

OAuth認證

OAuth認證是爲了作到第三方應用在未獲取到用戶敏感信息(如:帳號密碼、用戶PIN等)的狀況下,能讓用戶受權予他來訪問開放平臺(主要訪問平臺中的資源服務器Resource Server)中的資源接口。
其流程主要是:html

  1. 用戶首先要保持登陸,即已認證經過的狀態瀏覽器

  2. 第三方應用請求用戶受權(我理解是彈出一個顯示的操做界面讓用戶確認給第三方受權)服務器

  3. 用戶受權成功以後會向Authorization Server(認證服務器)請求「受權碼」(指authorization_code而不是最終的access_token),請求中還會攜帶redirect_uri(跳轉至第三方應用的連接)session

  4. 得到「受權碼」以後用戶所在的瀏覽器網頁將跳轉到redirect_uri(即第三方應用)加密

  5. 第三方應用攜帶「受權碼」和應用認證信息(client_id & client_secret)到Authorization Server換取access_tokenurl

  6. 第三方應用就能夠在訪問開放平臺時帶上access_tokencode

SSO單點登陸

單點登陸是指用戶在某個應用系統上登陸以後,進入其子應用或相關應用系統能夠免去登陸步驟,從而實現一次登陸,處處操做。此次項目我所負責的正好是單點登陸功能模塊,因此來更新下實際項目中SSO的實現流程,咱們要實現的效果是,如今有業務服務器a.comb.com,還有SSO服務器sso.com,在a.com上完成登陸操做以後訪問b.com時是已登陸狀態。htm

  1. 用戶首次訪問a.com/user時,到a.com服務器獲取不到sessiontoken

  2. 給用戶彈出一個SSO的登陸頁面sso.com/login.html,這個頁面會帶上兩個參數,分別是開發者平臺映射值key(即某個業務服務器在SSO所映射的key)和回調地址redirect(即登陸成功以後跳轉到的url,通常是所發起業務服務器開放的路由)接口

  3. 用戶輸入帳號密碼以後到SSO服務器上進行身份校驗,若校驗成功則給用戶生成一個ticket,並將該ticket值及用戶基本信息一塊兒建立SSO服務器session

  4. 選擇某種加密方式對該請求的session進行加密以後生成一個token值,而後在回調地址redirect裏帶上token參數並跳轉回去a.com服務器

  5. a.comtoken參數進行解析後拿到用戶基本信息和ticket值,相應地初始化本地session並將ticket值也記錄下來

  6. 用戶再次訪問a.com/user或其餘頁面的時候,到a.com上獲取session併到sso.com上校驗ticket值得有效性,兩個操做都成功以後才返回用戶信息;若校驗ticket值失敗,則從新要求用戶進行登陸操做,即從步驟1開始

  7. 如今用戶在a.com上的登陸和訪問流程已完成,那這時用戶訪問b.com/user,到b.com上獲取不到session,則會重定向到sso.com/session,由於以前a.com已在sso.com上登陸過,故請求sso.com/session的時候SSO服務器能將session中用戶信息和ticket值返回給b.com

  8. b.com獲取到用戶信息和ticket值以後和a.com作相同的事情便可,這樣就完成了單點登陸的整個流程

單點登出則是指用戶只要在a.com服務器上進行登出操做,則在其餘業務服務器如b.com上也應處於未登陸狀態,單點登陸流程的步驟6中提到每次用戶訪問業務服務器路由檢驗用戶當前狀態時不單單查找本地有沒有session,還要到SSO服務器上校驗ticket值的有效性,因此只要有一個業務服務器登出時令ticket失效便可。

  1. 如今用戶是登陸狀態,他從a.com進行了退出操做,則天然a.com已將其session清除

  2. a.com服務器同時還要攜帶ticket值發請求到sso.com將對應的記錄清除

  3. 當訪問某個b.com某個頁面時,雖然在b.com服務器上獲取到session,此外還須要到SSO服務器上校驗一遍ticket值,而發現ticket值校驗失敗,則會提示用戶當前處於未登陸狀態

  4. 這樣至關於b.com也已是退出登陸,完成了單點登出的整個流程

相關文章
相關標籤/搜索