SSO 單點登錄和 OAuth2.0 的區(qū)別
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
一、概述 SSO是Single Sign On的縮寫,OAuth是Open Authority的縮寫,這兩者都是使用令牌的方式來代替用戶密碼訪問應用。流程上來說他們非常相似,但概念上又十分不同。SSO大家應該比較熟悉,它將登錄認證和業(yè)務系統(tǒng)分離,使用獨立的登錄中心,實現(xiàn)了在登錄中心登錄后,所有相關的業(yè)務系統(tǒng)都能免登錄訪問資源。 OAuth2.0原理可能比較陌生,但平時用的卻很多,比如訪問某網(wǎng)站想留言又不想注冊時使用了微信授權。以上兩者,你在業(yè)務系統(tǒng)中都沒有賬號和密碼,賬號密碼是存放在登錄中心或微信服務器中的,這就是所謂的使用令牌代替賬號密碼訪問應用。 二、SSO 兩者有很多相似之處,下面我們來解釋一下這個過程。先來講解SSO,通過SSO對比OAuth2.0,才比較好理解OAuth2.0的原理。SSO的實現(xiàn)有很多框架,比如CAS框架,以下是CAS框架的官方流程圖。特別注意:SSO是一種思想,而CAS只是實現(xiàn)這種思想的一種框架而已。
上面的流程大概為:
最常見的例子是,我們打開淘寶APP,首頁就會有天貓、聚劃算等服務的鏈接,當你點擊以后就直接跳過去了,并沒有讓你再登錄一次。 三、OAuth2.0 OAuth2.0有多種模式,這里講的是OAuth2.0授權碼模式,OAuth2.0的流程跟SSO差不多,在OAuth2中,有授權服務器、資源服務器、客戶端這樣幾個角色,當我們用它來實現(xiàn)SSO的時候是不需要資源服務器這個角色的,有授權服務器和客戶端就夠了。
簡介一下OAuth2.0的四種模式: 1、授權碼(authorization-code) 授權碼(authorization code)方式,指的是第三方應用先申請一個授權碼,然后再用該碼獲取令牌。這種方式是最常用的流程,安全性也最高,它適用于那些有后端的 Web 應用。授權碼通過前端傳送,令牌則是儲存在后端,而且所有與資源服務器的通信都在后端完成。這樣的前后端分離,可以避免令牌泄漏。 2、隱藏式(implicit) 有些 Web 應用是純前端應用,沒有后端。這時就不能用上面的方式了,必須將令牌儲存在前端。RFC 6749 就規(guī)定了第二種方式,允許直接向前端頒發(fā)令牌。這種方式?jīng)]有授權碼這個中間步驟,所以稱為(授權碼)“隱藏式”(implicit) 3、密碼式(password) 如果你高度信任某個應用,RFC 6749 也允許用戶把用戶名和密碼,直接告訴該應用。該應用就使用你的密碼,申請令牌,這種方式稱為"密碼式"(password)。 4、客戶端憑證(client credentials) 最后一種方式是憑證式(client credentials),適用于沒有前端的命令行應用,即在命令行下請求令牌。 簡單流程 四、說一下幾個名詞的區(qū)別 首先,SSO 是一種思想,或者說是一種解決方案,是抽象的,我們要做的就是按照它的這種思想去實現(xiàn)它。 其次,OAuth2 是用來允許用戶授權第三方應用訪問他在另一個服務器上的資源的一種協(xié)議,它不是用來做單點登錄的,但我們可以利用它來實現(xiàn)單點登錄。在本例實現(xiàn)SSO的過程中,受保護的資源就是用戶的信息(包括,用戶的基本信息,以及用戶所具有的權限),而我們想要訪問這這一資源就需要用戶登錄并授權,OAuth2服務端負責令牌的發(fā)放等操作,這令牌的生成我們采用JWT,也就是說JWT是用來承載用戶的Access_Token的。 最后,Spring Security、Shiro 是用于安全訪問的,用來做訪問權限控制,都是一個用Java寫的框架。 該文章在 2023/9/27 15:36:52 編輯過 |
關鍵字查詢
相關文章
正在查詢... |