了解如下内容对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