搭建基於OAuth2和SSO的開放平台
原創文章,轉載或摘錄請說明文章來源:http://heartlifes.com
開放平台介紹
什么是開放平台
開放平台在百科中的定義:
開放平台(Open Platform) 在軟件行業和網絡中,開放平台是指軟件系統通過公開其應用程序編程接口(API)或函數(function)來使外部的程序可以增加該軟件系統的功能或使用該軟件系統的資源,而不需要更改該軟件系統的源代碼。
通俗或者說應景點的說法,開放平台,就是互聯網企業,將其內部的資源(一般是數據),比如用戶數據,平台業務數據,以技術的手段(一般是RESTFul接口API),開放給受控的第三方合作伙伴,活公司內部的其它一些產品,形成一個安全受控的資源暴露平台。
為什么要搭建開放平台
搭建開放平台的意義,一般在於:
1.搭建基於API的生態體系
2.利用開放平台,搭建基於計費的API數據平台
3.為APP端提供統一接口管控平台,類似於網關的概念
4.為第三方合作伙伴的業務對接提供授信可控的技術對接平台
開放平台體系結構圖
開放平台核心模塊
一個典型的開放平台,至少包含以下幾個核心模塊:
1.平台門戶
平台門戶負責向第三方展示用於進行業務及技術集成的管理界面,至少包含以下幾個功能:
1.服務商入住(第三方合作伙伴入住)
2.應用配置(第三方應用管理)
3.權限申請(一般包括接口權限和字段權限)
4.運維中心(開放平台當前服務器、接口狀態,服務商接口告警等)
5.幫助中心(入住流程說明,快速接入說明,API文檔等)
2.鑒權服務
鑒權服務負責整個平台的安全性
1.接口調用鑒權(第三方合作伙伴是否有權限調用某接口)
2.用戶授權管理(用戶對某個第三方應用獲取改用戶信息的權限管理)
3.用戶鑒權(平台用戶的鑒權)
4.應用鑒權(第三方合作伙伴的應用是否有權調用該平台)
3.開放接口
開放接口用於將平台數據暴露給合作伙伴
1.平台用戶接口(用於獲取公司APP生態鏈中的用戶信息)
2.平台數據接口(平台中的一些開放數據)
3.其它業務接口(平台開放的一些業務數據)
4.運營系統
運營系統是整個平台的后台業務管理系統,負責對第三方合作伙伴提出的各種申請進行審核操作,對當前應用的操作進行審計工作,對當前業務健康度進行監控等
1.服務商管理(對第三方合作伙伴的資質進行審核、操作)
2.應用管理(對第三方應用進行審核、上下線管理)
3.權限管理(對合作伙伴申請的資源進行審核、操作)
4.統計分析(監控平台當前運行狀態,統計平台業務數據)
OAuth2介紹
什么是OAuth2
百科:OAUTH協議為用戶資源的授權提供了一個安全的、開放而又簡易的標准。與以往的授權方式不同之處是OAUTH的授權不會使第三方觸及到用戶的帳號信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權,因此OAUTH是安全的。oAuth是Open Authorization的簡寫。
簡單來說:OAuth2協議,定義了一套用戶、第三方服務和存儲着用戶數據的平台之間的交互規則,可以使得用戶無需將自己的用戶名和密碼暴露給第三方,即可使第三方應用獲取用戶在該平台上的數據,最常見的場景便是現在互聯網上的各種使用XXX賬號登錄。
OAuth2協議中角色介紹
OAuth2協議中,共有四個參與方(角色):
1.resource owner:資源擁有者
即用戶
2.resource server:資源服務器
即存儲用戶數據的服務器,一般對外都以RESTFul API的形式暴露用戶數據,client使用access token訪問resource server申請被保護起來的用戶數據
3.client:客戶端
即第三方應用
4.authorization server:授權服務器
用來鑒權第三方應用合法性,並對用戶登錄、是否授權第三方應用獲取數據進行響應,並根據用戶操作,想第三應用頒發用戶token或者告知授權失敗
OAuth2常用協議介紹
OAUTH2標准業務協議,如下圖所示
A.第三方應用向用戶請求授權,希望獲取用戶數據
B.用戶同意授權
C.第三方應用拿着用戶授權,向平台索要用戶access token
D.平台校驗第三應用合法性及用戶授權真實性后,向平台發放用戶access token
E.第三方應用拿着用戶access token向平台索要用戶數據
F.平台在校驗用戶access token真實性后,返回用戶數據
OAuth2使用場景介紹
目前,OAuth2協議使用最多的場景還是用以給第三方應用獲取用戶信息,業務流程如下圖所示
1.在瀏覽器中,用戶點擊第三方應用按鈕,由第三方應用發起請求,向平台發起授權請求。
2.平台在接收到第三方應用請求后,瀏覽器跳轉用戶登錄界面,請求用戶進行登錄。
3.用戶在平台登錄界面輸入用戶名、密碼進行登錄
4.平台判斷用戶合法性,校驗失敗,在瀏覽器中提示錯誤原因
5.平台判斷用戶是否需要對該第三方應用進行授權。(不需要授權的情況有兩種:a.平台信任該第三方應用,如公司內部應用,無需用戶進行授權,默認給予用戶數據。b.該用戶之前已經給該應用授予過權限,並且仍在有效期內)
6.如需授權,平台跳轉瀏覽器界面至授權界面,告知用戶將授予哪個第三方哪些數據權限
7.用戶授權后,將用戶授權碼回調給第三方url
8.第三方在獲取用戶授權碼后,帶着用戶授權碼訪問平台鑒權接口,請求用戶token
9.平台在收到第三方請求后,校驗授權碼真實性,並返回用戶token
10.第三方使用用戶token向平台請求用戶接口
11.平台接口判斷用戶token真實性,並向第三方返回用戶數據
OAuth2核心功能說明
1.應用注冊
應用注冊后,OAuth2會下發應用app_id和app_secret,用以標記該應用的唯一性,並且這兩個參數將貫穿整個OAuth協議,用以對應用合法性進行校驗。同時,應用需要提供redirect_uri,用以和平台進行異步交互,獲取用戶令牌及錯誤信息。
2.授權/鑒權中心
a.對用戶的應戶名、密碼進行鑒權
b.對第三方應用的app_id,app_secret進行鑒權
c.展示授權界面,並對用戶對第三方應用的授權操作進行響應
d.對用戶授權碼及用戶token的真實性進行鑒權
3.token管理
a.創建token、刷新token
b.查詢token詳細數據
c.校驗token時效性
OAuth2體系結構
開放平台集成OAuth2體系
1.平台門戶:
門戶應用入住界面,需要集成OAuth2應用創建接口,錄入第三方回調地址,並回顯app_id和app_secret參數
2.鑒權服務:
鑒權服務需集成OAuth2的authorize及token接口,用以提供用戶授權及code/token鑒權功能
3.開放接口:
開放接口需集成OAuth2的resource server角色,對用戶數據進行安全管理,對第三方應用發起的請求做出響應,並對token進行真實性校驗
4.運營系統:
運營系統需提供對當前OAuth2應用的管理功能,用戶授權列表管理,用戶token管理等OAuth2協議相關管理功能。
SSO介紹
什么是SSO
百科:SSO英文全稱Single Sign On,單點登錄。SSO是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登錄映射到其他應用中用於同一個用戶的登錄的機制。它是目前比較流行的企業業務整合的解決方案之一。
簡單來說,SSO出現的目的在於解決同一產品體系中,多應用共享用戶session的需求。SSO通過將用戶登錄信息映射到瀏覽器cookie中,解決其它應用免登獲取用戶session的問題。
為什么需要SSO
開放平台業務本身不需要SSO,但是如果平台的普通用戶也可以在申請后成為一個應用開發者,那么就需要將平台加入到公司的整體賬號體系中去,另外,對於企業級場景來說,一般都會有SSO系統,充當統一的賬號校驗入口。
CAS協議中概念介紹
SSO單點登錄只是一個方案,而目前市面上最流行的單端登錄系統是由耶魯大學開發的CAS系統,而由其實現的CAS協議,也成為目前SSO協議中的既定協議,下文中的單點登錄協議及結構,均為CAS中的體現結構
CAS協議中有以下幾個概念:
1.CAS Client:需要集成單點登錄的應用,稱為單點登錄客戶端
2.CAS Server:單點登錄服務器,用戶登錄鑒權、憑證下發及校驗等操作
3.TGT:ticker granting ticket,用戶憑證票據,用以標記用戶憑證,用戶在單點登錄系統中登錄一次后,再其有效期內,TGT即代表用戶憑證,用戶在其它client中無需再進行二次登錄操作,即可共享單點登錄系統中的已登錄用戶信息
4.ST:service ticket,服務票據,服務可以理解為客戶端應用的一個業務模塊,體現為客戶端回調url,CAS用以進行服務權限校驗,即CAS可以對接入的客戶端進行管控
5.TGC:ticket granting cookie,存儲用戶票據的cookie,即用戶登錄憑證最終映射的cookies
CAS核心協議介紹
1.用戶在瀏覽器中訪問應用
2.應用發現需要索要用戶信息,跳轉至SSO服務器
3.SSO服務器向用戶展示登錄界面,用戶進行登錄操作,SSO服務器進行用戶校驗后,映射出TGC
4.SSO服務器向回調應用服務url,返回ST
5.應用去SSO服務器校驗ST權限及合法性
6.SSO服務器校驗成功后,返回用戶信息
CAS基本流程介紹
以下為基本的CAS協議流程,圖一為初次登錄時的流程,圖二為已進行過一次登錄后的流程
代碼及示例
spring提供了整套的開源包,用以搭建OAUTH2+SSO的體系:
1.spring-oauth2:用以實現OAuth2協議,提供了上述所有四個角色提供的功能
2.spring-cas:用以實現和cas的集成,將OAuth2的登錄、登出功能委托給CAS處理,並提供了統一的回調機制及憑證校驗機制
3.CAS,耶魯大學官方提供的SSO開源實現,本文的單點登錄協議即按照CAS進行的說明
本文還提供了基於GO語言實現的簡單OAuth2+SSO功能,詳見github:
https://github.com/janwenjohn/go-oauth2-sso