徹底理解 OAuth2 協(xié)議

OAuth2作用
1. 委派信任(主流)平臺(tái)完成登錄驗(yàn)證授權(quán)操作,解決三流平臺(tái)傳統(tǒng)簡(jiǎn)單登錄,不安全的弊端
2. 權(quán)限顆粒度實(shí)現(xiàn),scope
3. 跨站點(diǎn)sso
4. 移動(dòng)端app登錄驗(yàn)證
OAuth 2流程
1 - 跳轉(zhuǎn)到委派授權(quán)服務(wù)器地址
具體(用戶點(diǎn)擊第三方平臺(tái)登錄時(shí)觸發(fā)):
1.1 - 拼接請(qǐng)求授權(quán)相關(guān)參數(shù)到委派授權(quán)登錄驗(yàn)證的服務(wù)器網(wǎng)址
拼接相關(guān)參數(shù):
client_id:客戶端在服務(wù)端注冊(cè)獲取的id,也稱為app id。服務(wù)端根據(jù)此id判定是哪個(gè)客戶端在請(qǐng)求授權(quán)。
(你客戶端需要委派服務(wù)器幫忙登錄驗(yàn)證授權(quán),就要在服務(wù)器注冊(cè),服務(wù)器那邊記錄了你這個(gè)客戶端才能信任你并給你提供服務(wù)端的登錄驗(yàn)證授權(quán)服務(wù)。)
redirect_url:重定向地址,用于服務(wù)端完成登錄驗(yàn)證后跳轉(zhuǎn)回來(lái)
scope:授權(quán)范圍,客戶端請(qǐng)求的授權(quán)范圍
response_type:token的模式
state:可選參數(shù),服務(wù)端隨機(jī)生成的一個(gè)數(shù),用于防止csrf(跨站點(diǎn)請(qǐng)求偽造攻擊),確認(rèn)請(qǐng)求身份非偽造
......
1.2 - 重定向當(dāng)前地址為拼接的委派授權(quán)地址
2 - 獲取授權(quán)碼
具體:
2.1 - 用戶在委派授權(quán)服務(wù)器網(wǎng)址中進(jìn)行登錄驗(yàn)證
2.2 - 委派授權(quán)服務(wù)器對(duì)用戶登錄驗(yàn)證身份后,請(qǐng)求用戶授權(quán)(用戶對(duì)是否授權(quán)...權(quán)限回復(fù))
2.3 - 返回授權(quán)碼authorization
3 - 請(qǐng)求登錄令牌access token
具體:
3.1 - 跳轉(zhuǎn)回客戶端
根據(jù)第一步時(shí)拼接的參數(shù)里記錄的重定向地址,重定向回客戶端地址,并攜帶授權(quán)碼
3.2 - 向授權(quán)服務(wù)器請(qǐng)求登錄令牌access token
客戶端的后臺(tái)服務(wù)器用返回的授權(quán)碼和一些參數(shù)去向委派服務(wù)器兌換access token
一些參數(shù):
authorization code:授權(quán)碼,服務(wù)端返回的授權(quán)碼,用來(lái)給客戶端兌換登錄令牌
client id:客戶端id,判定是哪個(gè)客戶端要兌換登錄令牌
client serect:客戶端密鑰,用于交換登錄令牌,也是客戶端在服務(wù)端注冊(cè)時(shí)獲取。客戶端需保密到后臺(tái),其曾用于加密token,兌換時(shí)通過該密鑰解密
(委派服務(wù)器不直接返回access token而是返回授權(quán)碼再讓客戶端來(lái)請(qǐng)求accesstoken的原因——因?yàn)闉g覽器直接前端通信傳不安全,access token通過后端通信傳遞更安全。)
4 - 客戶端請(qǐng)求訪問資源
具體:
4.1 - 客戶端用上一步獲取到的access token去服務(wù)端的資源服務(wù)器請(qǐng)求獲取用戶相關(guān)資料(即通過服務(wù)端的資源api傳access token獲取用戶同意授權(quán)的相關(guān)資源)
1 - 授權(quán)碼模式
標(biāo)準(zhǔn),安全
客戶端的后臺(tái)與服務(wù)端認(rèn)證服務(wù)器進(jìn)行通信
授權(quán)碼模式固定response_type為code
2 - 簡(jiǎn)化模式
token暴露,不安全,簡(jiǎn)單,用于無(wú)后臺(tái)的web應(yīng)用
瀏覽器訪問授權(quán)服務(wù)器后臺(tái)進(jìn)行登錄驗(yàn)證授權(quán)之后,授權(quán)服務(wù)器直接在重定向地址回傳參數(shù)access token登錄令牌而不是authorization code授權(quán)碼。
3 - 密碼模式
用戶向客戶端提供賬號(hào)密碼,客戶端拿賬號(hào)密碼去向服務(wù)端登錄驗(yàn)證
不安全,需要十分信任客戶端,用于向前兼容。
4 - 客戶端模式
客戶端自己向服務(wù)端認(rèn)證(不需要用戶參與)
直接客戶端密鑰和token去服務(wù)端獲取token。為后臺(tái)api服務(wù)消費(fèi)者設(shè)計(jì)