1.什么是OAuth2OAuth(開放授權(quán))是一個開放標(biāo)準(zhǔn),允許用戶授權(quán)第三方移動應(yīng)用訪問他們存儲在另外的服務(wù)提供者上的信息,而不需要將用戶名和密碼提供給第三方移動應(yīng)用或分享他們數(shù)據(jù)的所有內(nèi)容,OAuth2.0是OAuth協(xié)議的延續(xù)版本,但不向后兼容OAuth 1.0即完全廢止了OAuth1.0。 2.應(yīng)用場景第三方應(yīng)用授權(quán)登錄:在APP或者網(wǎng)頁接入一些第三方應(yīng)用時,時長會需要用戶登錄另一個合作平臺,比如QQ,微博,微信的授權(quán)登錄。 image
原生app授權(quán):app登錄請求后臺接口,為了安全認(rèn)證,所有請求都帶token信息,如果登錄驗證、請求后臺數(shù)據(jù)。 前后端分離單頁面應(yīng)用(spa):前后端分離框架,前端請求后臺數(shù)據(jù),需要進(jìn)行oauth2安全認(rèn)證,比如使用vue、react后者h(yuǎn)5開發(fā)的app。 3名詞說明
4運行流程OAuth 2.0的運行流程如下圖,摘自RFC 6749。 OAuth運行流程
5授權(quán)模式
5.1授權(quán)碼模式授權(quán)碼模式(authorization code)是功能最完整、流程最嚴(yán)密的授權(quán)模式。 (1)用戶訪問客戶端,后者將前者導(dǎo)向認(rèn)證服務(wù)器,假設(shè)用戶給予授權(quán),認(rèn)證服務(wù)器將用戶導(dǎo)向客戶端事先指定的"重定向URI"(redirection URI),同時附上一個授權(quán)碼。 (2)客戶端收到授權(quán)碼,附上早先的"重定向URI",向認(rèn)證服務(wù)器申請令牌:GET /oauth/token?response_type=code&client_id=test&redirect_uri=重定向頁面鏈接。請求成功返回code授權(quán)碼,一般有效時間是10分鐘。 (3)認(rèn)證服務(wù)器核對了授權(quán)碼和重定向URI,確認(rèn)無誤后,向客戶端發(fā)送訪問令牌(access token)和更新令牌(refresh token)。POST /oauth/token?response_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=重定向頁面鏈接。 5.2簡化模式簡化模式(implicit grant type)不通過第三方應(yīng)用程序的服務(wù)器,直接在瀏覽器中向認(rèn)證服務(wù)器申請令牌,跳過了"授權(quán)碼"這個步驟,因此得名。所有步驟在瀏覽器中完成,令牌對訪問者是可見的,且客戶端不需要認(rèn)證。 image.png
流程步驟:
請求URL:
5.3用戶名密碼模式密碼模式(Resource Owner Password Credentials Grant)中,用戶向客戶端提供自己的用戶名和密碼。客戶端使用這些信息,向"服務(wù)商提供商"索要授權(quán)。在這種模式中,用戶必須把自己的密碼給客戶端,但是客戶端不得儲存密碼。這通常用在用戶對客戶端高度信任的情況下。一般不支持refresh token。 image.png
步驟說明:
<article class="hentry"> 5.4客戶端模式(Client Credentials Grant)指客戶端以自己的名義,而不是以用戶的名義,向"服務(wù)提供商"進(jìn)行認(rèn)證。嚴(yán)格地說,客戶端模式并不屬于OAuth框架所要解決的問題。在這種模式中,用戶直接向客戶端注冊,客戶端以自己的名義要求"服務(wù)提供商"提供服務(wù),其實不存在授權(quán)問題。 客戶端模式
它的步驟如下: A步驟中,客戶端發(fā)出的HTTP請求,包含以下參數(shù):
|
|