瞭解如下內容對ASP.NET 5中的驗證中間件應用有很大幫助!html
OAUTH2是目前不少大型網站都使用的對外提供開放資源接口的應用標準,比入taobao\alipay\騰訊\豆瓣等。它和目前的另一種OPENID標準是不一樣的兩個概念,OPENID是提供用戶驗證的,而OAUTH是提供受權的,是OPENID的一個升級版本,由兩個機構負責維護的。OPENID的最新標準OpenID Connect【(Identity, Authentication) + OAuth 2.0 = OpenID Connect】,ASP.NET 5也提供了這種新標準的支持,他在OAUTH2的基礎上做了升級,在OAUTH2驗證完後多了一個ID_TOKEN,能夠得到更多用戶信息,同時是以json格式作交互,更適合RESTful風格的app,進而適合任何不一樣的客戶端程序。git
理解OAUTH其實很簡單,最重要是弄清楚幾個角色名詞和它的受權步驟便可,以咱們經常使用的在第三方網站使用QQ帳戶登錄爲例:github
①資源持有者(User用戶或者其餘app,比如你在QQ上的帳戶)在客戶端(第三方網站)登錄 --->
②資源持有者使用用戶名密碼登陸後,驗證服務器(驗證客戶端的Id和用戶名密碼),讓資源持有者受權客戶端統一容許訪問的資源範圍,例如你的註冊資料(authorization grant)等 --->③上一步贊成受權和受權範圍後,客戶端向驗證服務器申請資源訪問受權令牌access token(這個動做通常在客戶端後臺執行,因此有時候看不到)--->
④客戶端經驗證服務器驗證經過發放資源訪問受權令牌 --->
⑤客戶端收到資源訪問令牌後向資源服務器(其實就是受權訪問能訪問的資料,好比獲取用戶資料的Action,可是要判斷下客戶端能訪問不能訪問了)要資源
上邊的步驟中的粗體就是須要了解的四個名詞,大概步驟就是以上這個樣子。json
OAUTH2中有好幾種驗證的流程模型,在ASP.NET4.5>中默認的驗證模型是密碼流程驗證模式,這種模式比較簡單,複雜縝密的其實相似上邊的步驟說明,屬於受權碼流程模式,感興趣的本身看下文檔。密碼流程驗證模式以下圖:服務器
密碼流程驗證模式有個弊端,就是用戶必須把用戶名密碼提供給客戶端,客戶端不能保存密碼。這種模式適用客戶端是一個項目的程序或者屬於你本身一個公司本身開發的程序,客戶端必須高度信任。(固然以上驗證和受權服務器能夠分開也能夠一塊兒)app
OPENID CONNECT的流程相似以上步驟(參考這裏)網站
+--------+ +--------+ | | | | | |---------(1) AuthN Request-------->| | | | | | | | +--------+ | | | | | | | | | | | End- |<--(2) AuthN & AuthZ-->| | | | | User | | | | RP | | | | OP | | | +--------+ | | | | | | | |<--------(3) AuthN Response--------| | | | | | | |---------(4) UserInfo Request----->| | | | | | | |<--------(5) UserInfo Response-----| | | | | | +--------+ +--------+
(1)PR(客戶端)發送請求到OP(OpenId提供者,e.g 驗證服務器)
(2)OP驗證最終用戶並得到受權
(3)OP相應給客戶端一個id taoken,一般就是access token
(4)RP攜帶access token請求到用戶信息端(受權資源)
(5)用戶信息端返回最終用戶的用戶聲明信息
看起來和OAUTH很是類似,它缺點就是太新了,還不多有應用,Google很早已經應用了該標準。Asp.net5已經有人實現了OPENID CONNECT 的服務器端中間件,還有很是不錯的例子,能夠參考看下https://github.com/aspnet-security/AspNet.Security.OpenIdConnect.Serverspa