开放平台_OAuth2.0
為什么出現(xiàn)oauth2.0
?
1 oauth1.0對(duì)手機(jī)客戶端,移動(dòng)設(shè)備等非server第三方的支持不好。其實(shí)oauth1.0也是可以支持手機(jī)客戶端,移動(dòng)設(shè)備等,也有相應(yīng)的流程。但是oauth1.0是將多種流程合并成了一種,而事實(shí)證明,這種合并的流程體驗(yàn)性非常差
2 oauth1.0的三步認(rèn)證過(guò)程比較繁瑣和復(fù)雜,對(duì)第三方開(kāi)發(fā)者增加了極大的開(kāi)發(fā)難度
3 oauth1.0的加密需求過(guò)于復(fù)雜,第三方開(kāi)發(fā)者使用oauth之前需要花費(fèi)精力先實(shí)現(xiàn)oauth1.0的加密算法
4 oauth1.0的拓展性不夠好
5 oauth1.0生成的access_token要求是永久有效的,這導(dǎo)致的問(wèn)題是網(wǎng)站的安全性和破壞網(wǎng)站的架構(gòu)
?
因此出現(xiàn)了oauth2.0
?
oauth2.0針對(duì)1.0的各種問(wèn)題提供了解決方法:
1 oauth2.0提出了多種流程,各個(gè)客戶端按照實(shí)際情況選擇不同的流程來(lái)獲取access_token。這樣就解決了對(duì)移動(dòng)設(shè)備等第三方的支持,也解決了拓展性的問(wèn)題
2 oauth2.0刪除了繁瑣的加密算法。利用了https傳輸對(duì)認(rèn)證的安全性進(jìn)行了保證
3 oauth2.0的認(rèn)證流程一般只有2步,對(duì)開(kāi)發(fā)者來(lái)說(shuō),減輕了負(fù)擔(dān)
4 oauth2.0提出了access_token的更新方案,獲取access_token的同時(shí)也獲取refresh_token, access_token是有過(guò)期時(shí)間的,refresh_token的過(guò)期時(shí)間較長(zhǎng),這樣能隨時(shí)使用refresh_token對(duì)access_token進(jìn)行更新
oauth2.0的現(xiàn)狀
?
oauth2.0截止到2011/8/31 為止已經(jīng)發(fā)布更新了20個(gè)版本,下面是oauth2.0的ietf標(biāo)準(zhǔn)文檔:
http://tools.ietf.org/html/draft-ietf-oauth-v2-20
?
oauth2.0得到了越來(lái)越多大公司的支持,比如microsoft,yahoo等,也在實(shí)際使用過(guò)程中不斷得到優(yōu)化和完善,oauth2.0已經(jīng)成為了業(yè)界通用和使用的標(biāo)準(zhǔn)。
?
oauth2.0的實(shí)現(xiàn)
?
oauth2.0有許多種流程,分別適應(yīng)不同的第三方應(yīng)用,并且這些流程數(shù)目還在不斷增加和完善中,一個(gè)網(wǎng)站可以實(shí)現(xiàn)一種或多種流程
?
比如最典型的6中流程有 :
?
User-Agent Flow 客戶端運(yùn)行于用戶代理內(nèi)(典型如web瀏覽器)。
Web Server Flow 客戶端是web服務(wù)器程序的一部分,通過(guò)http request接入,這是OAuth 1.0提供的流程的簡(jiǎn)化版本。
Device Flow 適用于客戶端在受限設(shè)備上執(zhí)行操作,但是終端用戶單獨(dú)接入另一臺(tái)電腦或者設(shè)備的瀏覽器
Username and Password Flow 這個(gè)流程的應(yīng)用場(chǎng)景是,用戶信任客戶端處理身份憑據(jù),但是仍然不希望客戶端儲(chǔ)存他們的用戶名和密碼,這個(gè)流程僅在用戶高度信任客戶端時(shí)才適用。
Client Credentials Flow 客戶端適用它的身份憑據(jù)去獲取access token,這個(gè)流程支持2-legged OAuth的場(chǎng)景。
Assertion Flow 客戶端用assertion去換取access token,比如SAML assertion。
?
?
以開(kāi)心網(wǎng)為例(開(kāi)心網(wǎng)是實(shí)現(xiàn)了oauth2.0的第10個(gè)版本)
?
開(kāi)心網(wǎng)實(shí)現(xiàn)了
Web Server Flow
User-Agent Flow
Username and Password Flow
三種方式
?
http://wiki.open.kaixin001.com/index.php?id=OAuth2.0%E6%96%87%E6%A1%A3
?
oauth2.0的客戶端實(shí)現(xiàn)是非常方便的,開(kāi)心網(wǎng)的說(shuō)明文檔也已經(jīng)非常全了,這里就不多說(shuō)了
?
下面說(shuō)一下各個(gè)流程的步驟:
?
Web Server Flow:
web ServerFlow是把oauth1.0的三個(gè)步驟縮略為兩個(gè)步驟
?
首先這個(gè)是適合有server的第三方使用的。
1客戶端http請(qǐng)求authorize
2服務(wù)端接收到authorize請(qǐng)求,返回用戶登陸框頁(yè)面
3用戶在客戶端登陸
4服務(wù)器端將瀏覽器定位到callbackurl,并同時(shí)傳遞Authorization Code
5客戶端使用https發(fā)送access_token
6服務(wù)器端收到access_token請(qǐng)求,驗(yàn)證Authorization Code---生成access_token, refresh_token,和過(guò)期時(shí)間--access_token和refresh_token和過(guò)期時(shí)間入庫(kù)
7 返回access_token和refresh_token,過(guò)期時(shí)間
8 用戶使用HTTPS+ access_token請(qǐng)求開(kāi)放平臺(tái)接口
?
User-Agent:
適合所有無(wú)server端配合的客戶端
1客戶端http請(qǐng)求authorize
2服務(wù)端接收到authorize請(qǐng)求,返回用戶登陸框頁(yè)面
3用戶在客戶端登陸
4服務(wù)器端將瀏覽器定位到callbackurl,并同時(shí)傳遞access_token和過(guò)期時(shí)間
?
這里面的access_token可以考慮放在緩存中而不是放在數(shù)據(jù)庫(kù)中,一旦過(guò)期時(shí)間到就可以作廢了
?
Username and Password Flow
適合所有情況
1 客戶端https請(qǐng)求access_token(使用https是由于參數(shù)中帶著開(kāi)心網(wǎng)的用戶名和密碼信息)2 服務(wù)器端收到access_token請(qǐng)求---生成access_token, refresh_token,和過(guò)期時(shí)間--access_token和refresh_token和過(guò)期時(shí)間入庫(kù)
3 json返回access_token, refresh_token,和過(guò)期時(shí)間
?
特別說(shuō)明:
oauth2.0客戶端得到access_token之后是使用https來(lái)調(diào)用請(qǐng)求的,這樣做的目的主要是放重放和數(shù)據(jù)泄露?
?
參考文檔:
http://djb4ke.iteye.com/blog/683153
http://oauth.net/2/
http://hueniverse.com/2010/05/introducing-oauth-2-0/
http://wiki.open.kaixin001.com/index.php?id=OAuth2.0%E6%96%87%E6%A1%A3?
?
作者:軒脈刃(yjf512)?
出處:(http://www.cnblogs.com/yjf512/)?
版權(quán)聲明:本文的版權(quán)歸作者與博客園共有。歡迎轉(zhuǎn)載閱讀,轉(zhuǎn)載時(shí)須注明本文的詳細(xì)鏈接。?
總結(jié)
以上是生活随笔為你收集整理的开放平台_OAuth2.0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu 中安装 Oracle 10
- 下一篇: OpenBoard的板级支持包(BSP)