在上篇文章中我研究了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