OAuth受權登陸

1、寫在前面

平常生活中,咱們常常看到到一個網站時,須要登陸的時候,都提供了第三方的登陸,也就是說你可使用你的微信,QQ,微博等帳號進行受權登陸。那麼這個認證登陸的東西究竟是什麼呢?數據庫

技術文章--《也說OAuth受權登陸》

微信受權登陸頁面安全

或者說你實現這樣的受權登陸,該怎麼作呢?我以爲思路: 首先是登陸的網站時,去在第三方登陸後,第三方回調登陸網站的接口,而後網站這邊拿到第三方的已經登陸狀態,就能夠在網站自己登陸了。就至關於微博微信就是你的登陸用戶名和密碼的校驗。服務器

2、OAuth受權登陸

解決上面的問題,就能用到OAUTH協議。微信

1)【是什麼】:app


OAUTH協議爲用戶資源的受權提供了一個安全的、開放而又簡易的標準。與以往的受權方式不一樣之處是OAUTH的受權不會使第三方觸及到用戶的賬號信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就能夠申請得到該用戶資源的受權,所以OAUTH是安全的。oAuth是Open Authorization的簡寫。如今OAuth已經到2.0版本了。二者不兼容。OAuth2.0是OAuth協議的下一版本,但不向後兼容OAuth 1.0即徹底廢止了OAuth1.0。如今SNS網站對兩個協議的支持狀況以下:網站

技術文章--《也說OAuth受權登陸》

各網站對OAuth版本支持狀況ui

2)【使用場景】3d


== 若是一個用戶須要兩項服務:一項服務是圖片在線存儲服務A,另外一個是圖片在線打印服務B。blog

因爲服務A與服務B是由兩家不一樣的服務提供商提供的,因此用戶在這兩家服務提供商的網站上各自注冊了兩個用戶,假設這兩個用戶名各不相同,密碼也各不相同。當用戶要使用服務B打印存儲在服務A上的圖片時,用戶該如何處理?法一:用戶可能先將待打印的圖片從服務A上下載下來並上傳到服務B上打印,這種方式安全但處理比較繁瑣,效率低下;法二:用戶將在服務A上註冊的用戶名與密碼提供給服務B,服務B使用用戶的賬號再去服務A處下載待打印的圖片,這種方式效率是提升了,可是安全性大大下降了,服務B可使用用戶的用戶名與密碼去服務A上查看甚至篡改用戶的資源。token

==用OAUTH實現背景一節中的典型案例:當服務B(打印服務)要訪問用戶的服務A(圖片服務)時,經過OAUTH機制,服務B向服務A請求未經用戶受權的Request Token後,服務A將引導用戶在服務A的網站上登陸,並詢問用戶是否將圖片服務受權給服務B。用戶贊成後,服務B就能夠訪問用戶在服務A上的圖片服務。整個過程服務B沒有觸及到用戶在服務A的賬號信息。

3)【認證步驟】


==【OAuth 1.0a】

OAuth1認證基本步驟:

獲取未受權的Request Token(temporary credentials)

請求用戶受權Request Token

使用受權後的Request Token換取Access Token(token credentials)

使用 Access Token 訪問或修改受保護資源

技術文章--《也說OAuth受權登陸》

OAuth1.0流程

==【OAuth 2.0 】

   OAuth2.0和OAuth1.0的區別仍是在於簡化了認證過程,不須要從未受權的Request Token轉化到受權Request Token,而是利用app key經過用戶受權生成access token可是,與1.0的不一樣之處是access token有自身的有效期,且不一樣平臺、不一樣級別的程序有着不一樣的有效期,在程序開發中必定記得判斷access token是否過時,對於過時以後的處理方法主要是利用access token和refresh token從新生成access token或者從新利用app key向服務器發送請求生成access token。因爲這個問題,與OAuth1.0基本一致不同,各個平臺OAuth2.0作了不同的選擇。

  OAuth2.0服務支持如下獲取Access Token的方式:

  a. Authorization Code:Web Server Flow,適用於全部有Server端配合的應用。

  b. Implicit Grant:User-Agent Flow,適用於全部無Server端配合的應用。

  由於demo是無服務器的程式,因此咱們採用Implicit Grant:User-Agent Flow的獲取方式。

技術文章--《也說OAuth受權登陸》

OAuth2.0步驟

4)【國內主要OAuth受權平臺】


==【概述】 國內主要有3種受權登陸形式,分別是微信、QQ和新浪微博。3種平臺受權登陸的流程大同小異,都是須要在其對應的開放網站上註冊應用且產生appid及appsecert(或相似的其它叫法),並利用上述參數按照ahth2方式受權登陸。受權登陸成功後獲取到你的應用相對於受權平臺的惟一標識(微信、QQ叫openid,新浪微博叫uid)。

技術文章--《也說OAuth受權登陸》

受權流程圖

==【微信】:目前,微信的第三方受權登陸是由微信開放平臺來承載的。根據其最新的文檔,用戶經過微信受權登陸同時用戶受權了獲取userinfo時,則受權成功後會出現unionid字段,即微信開放平臺會同時返回用戶的openid和unionid(移動應用微信登陸開發指南)。開發者只須要將openid和unionid都保存到數據庫便可。

==【QQ】:QQ受權登陸平臺要想保存unionid可能要稍微麻煩一點。須要聯繫QQ客服申請獲取unionid的全限。詳見常見問題 - 文檔資料--QQ互聯的問題1。按照其要求發送郵件申請unionid的訪問權限便可。正常狀況下QQ客服會很快開通權限並回復開發者的申請郵件,並在郵件中比較詳細的說明調用接口獲取unionid的方式。

技術文章--《也說OAuth受權登陸》

微博的受權頁面

==【 新浪微博】:新浪比較好,新浪微博的移動App和網頁版的惟一標識都是統一的uid,無需作額外的操做。

3、寫在最後

OAuth協議頗有用處,有機會仍是本身使用下,這樣才能加深理解和記憶。

相關文章
相關標籤/搜索