OAuth2學習及DotNetOpenAuth部分源碼研究 OAuth2學習及DotNetOpenAuth部分源碼研究

OAuth2學習及DotNetOpenAuth部分源碼研究

 

在上篇文章中我研究了OpenId及DotNetOpenAuth的相關應用,這一篇繼續研究OAuth2.html

      一.什麼是OAuth2編程

      OAuth是一種開放認證協議,容許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯繫人列表),而無需將用戶名和密碼提供給第三方應用.數字2表示如今使用第2代協議.瀏覽器

 

      二.OAuth2中的角色安全

      OAuth2有四種角色服務器

      resource owner資源全部者:好比twitter用戶,他在twitter的數據就是資源,他本身就是這些資源的全部者。post

      resource server資源服務器:保存資源的服務器,別人要訪問受限制的資源就要出示 Access Token(訪問令牌)。學習

      client客戶端:一個通過受權後,能夠表明資源全部者訪問資源服務器上受限制資源的一方。好比 開發者開發的應用。網站

      authorization server受權服務器:對 資源全部者進行認證,認證經過後,向 客戶端發放 Access Token(訪問令牌)。url

 

      三.認證過程操作系統

      用戶訪問客戶端的網站,想操做本身存放在資源服務提供方的資源。

      客戶端將用戶引導至受權服務提供方的受權頁面請求用戶受權,在這個過程當中將客戶端的回調鏈接發送給受權服務提供方。

      用戶在受權服務提供方的網頁上輸入用戶名和密碼,而後受權該客戶端訪問所請求的資源。

      受權成功後,受權服務提供方對客戶端授予一個受權碼,網站跳回至客戶端。

      客戶端得到受權碼後,再次從受權服務提供方請求獲取訪問令牌 。

      受權服務提供方根據受權碼授予客戶端訪問令牌。

      客戶端使用獲取的訪問令牌訪問存放在資源服務提供方上的受保護的資源。

 

      四.獲取訪問令牌方式

      從上面能夠看到,令牌是串起整個認證流程的核心.OAuth2有四種獲取令牌的方式

      Authorization Code受權碼方式:這種是推薦使用的,也是最安全的.

      Implicit Grant隱式受權:相比受權碼受權,隱式受權少了第一步的取Authorization Code的過程,並且不會返回 refresh_token。主要用於無服務器端的應用,好比 瀏覽器插件。

      Resource Owner Password Credentials資源全部者密碼證書受權:這種驗證主要用於資源全部者對Client有極高的信任度的狀況,好比操做系統或高權限程序。只有在不能使用其它受權方式的狀況下才使用這種方式。

      Client Credentials客戶端證書受權:這種狀況下 Client使用本身的 client證書(如 client_id及client_secret組成的 http basic驗證碼)來獲取 access token,只能用於信任的client。

      本文主要講解第一種獲取方式.

      有能有些人有這樣的疑問,爲何受權成功後不直接返回訪問令牌,則是獲取受權碼,而後使用受權碼去換訪問令牌.這個問題的答案在官方的文檔裏,緣由主要是保障數據安全性.當用戶受權成功,瀏覽器從受權服務器返回客戶端時,數據是經過QueryString傳遞的.若是直接返回訪問令牌,則直接在地址欄可見,相關的日誌系統也會記錄,這會提升令牌被破解的風險.返回受權碼,而後客戶端經過直接通訊使用受權碼換取訪問令牌,整個過程對用戶是不可見的,這樣大大提升了安全性.

 

      五.DotNetOpenAuth在OAuth2中的應用

      官方Sample內包含有OAuth的完整示例,其受權服務器使用Mvc編寫,客戶端與資源服務器使用WebForm編寫,數據層使用了EF.爲了更加貼進實際使用,減小無關雜音,本人模仿其重寫了一個Sample,本文的講解將圍繞自行編寫的Sample展開.Sample示例可於文後下載.

      1.客戶端

      客戶端編程主要圍繞三個類展開

      AuthorizationServerDescription,顧名思義,用於對服務端的描述.以下所示

 

http://www.cnblogs.com/ljzforever/archive/2013/04/01/2985456.html

相關文章
相關標籤/搜索