聊一聊微信登錄與QQ登錄的底層實(shí)現(xiàn)
QQ與微信是我們?nèi)粘I钪凶畛S玫能浖渌谌骄W(wǎng)站我們也能通過(guò)QQ與微信進(jìn)行快捷登錄,那么它們的底層原理是怎么樣的,又采用了什么技術(shù)呢,一起來(lái)看看吧。
OAuth2.0簡(jiǎn)介
我們打開(kāi)微信登錄與QQ登錄的開(kāi)發(fā)文檔,就能清楚看到,它們都使用了同一個(gè)東西叫做OAuth2.0,那么OAuth2.0是什么東東呢?(?_??)

OAuth2.0是一種授權(quán)協(xié)議,用戶授權(quán)第三方網(wǎng)站,允許他們?cè)L問(wèn)用戶存儲(chǔ)在服務(wù)器上的信息,而不需要將用戶名和密碼提供給第三方網(wǎng)站,并可以控制第三方網(wǎng)站能訪問(wèn)的數(shù)據(jù)范圍。
OAuth2.0的角色
1.Resource Owner
可以是個(gè)人,也可是一個(gè)程序。它們是存儲(chǔ)在資源服務(wù)器上數(shù)據(jù)的擁有者。
2.Client
客戶端程序,它需要訪問(wèn)被存儲(chǔ)在資源服務(wù)器上的數(shù)據(jù),
3.Authorization Server
認(rèn)證服務(wù)器,它能夠給Client進(jìn)行授權(quán),使Client訪問(wèn)資源服務(wù)器上的數(shù)據(jù)
4.Resource Server
資源服務(wù)器,它存儲(chǔ)著客戶端想要的資源

OAuth2.0的四種授權(quán)方式
1.授權(quán)碼模式(Authorization Code)
該模式需要兩次訪問(wèn)認(rèn)證服務(wù)器
第一次:用戶進(jìn)行授權(quán)后,客戶端程序從認(rèn)證服務(wù)器,拿到Authorization Code
第二次:客戶端程序攜帶Authorization Code從認(rèn)證服務(wù)器兌換成accessToken,后續(xù)通過(guò)該accessToken進(jìn)行數(shù)據(jù)訪問(wèn),Authorization Code兌換成AccessToken后馬上失效。
后續(xù)accesstoken過(guò)期后,通過(guò)refreshToken來(lái)獲取新的accesstoken,不需要用戶再參與。一般accesstoken的生命周期是分鐘到小時(shí),而refreshToken的生命周期是天、周甚至月。
這是最安全的一種模式,獲取accessToken需要授權(quán)碼與secret。secret是認(rèn)證服務(wù)器與應(yīng)用服務(wù)器共享的,沒(méi)有其他人會(huì)知道。微信登錄、支付寶登錄等都是基于這種模式。參照上面的微信登錄流程圖。
2.隱形授權(quán)模式(Implicit)
該模式比上面的授權(quán)碼模式,少了一個(gè)授權(quán)碼階段。用戶進(jìn)行授權(quán)后,會(huì)直接返回accesstoken。

3.密碼模式(Resource Owner Credentials Grant Type)
該模式就是通常的輸入用戶名與密碼獲取token的一種模式
4.客戶端模式(Client Credentials Grant Type)
該模式通常用于后端內(nèi)部微服務(wù)之間的調(diào)用,不需要用戶的授權(quán),不是用來(lái)進(jìn)行用戶校驗(yàn)使用。