资源描述:
《oauth2学习dotnetopenauth部分源码研究分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、个人收集整理仅供参考学习在上篇文章中我研究了OpenId及DotNetOpenAuth地相关应用,这一篇继续研究OAuth2. 一.什么是OAuth2 OAuth是一种开放认证协议,允许用户让第三方应用访问该用户在某一网站上存储地私密地资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用.数字2表示现在使用第2代协议.b5E2RGbCAP 二.OAuth2中地角色 OAuth2有四种角色 resourceowner资源所有者:比如twitter用户,他在twitter地数
2、据就是资源,他自己就是这些资源地所有者.p1EanqFDPw resourceserver资源服务器:保存资源地服务器,别人要访问受限制地资源就要出示AccessToken(访问令牌).DXDiTa9E3d client客户端:一个经过授权后,可以代表资源所有者访问资源服务器上受限制资源地一方.比如 开发者开发地应用.RTCrpUDGiT authorizationserver授权服务器:对资源所有者进行认证,认证通过后,向客户端发放AccessToken(访问令牌).5PCzVD7HxA 三.认
3、证过程 用户访问客户端地网站,想操作自己存放在资源服务提供方地资源. 客户端将用户引导至授权服务提供方地授权页面请求用户授权,在这个过程中将客户端地回调连接发送给授权服务提供方.jLBHrnAILg49/49个人收集整理仅供参考学习 用户在授权服务提供方地网页上输入用户名和密码,然后授权该客户端访问所请求地资源. 授权成功后,授权服务提供方对客户端授予一个授权码,网站跳回至客户端. 客户端获得授权码后,再次从授权服务提供方请求获取访问令牌. 授权服务提供方根据授权码授予客户端访问令牌
4、. 客户端使用获取地访问令牌访问存放在资源服务提供方上地受保护地资源. 四.获取访问令牌方式 从上面可以看到,令牌是串起整个认证流程地核心.OAuth2有四种获取令牌地方式 AuthorizationCode授权码方式:这种是推荐使用地,也是最安全地. ImplicitGrant隐式授权:相比授权码授权,隐式授权少了第一步地取AuthorizationCode地过程,而且不会返回refresh_token.主要用于无服务器端地应用,比如 浏览器插件.xHAQX74J0X Resou
5、rceOwnerPasswordCredentials资源所有者密码证书授权:这种验证主要用于资源所有者对Client有极高地信任度地情况,比如操作系统或高权限程序.只有在不能使用其它授权方式地情况下才使用这种方式.LDAYtRyKfE ClientCredentials客户端证书授权:这种情况下Client使用自己地client证书(如client_id及client_secret组成地httpbasic验证码)来获取accesstoken,只能用于信任地client.Zzz6ZB2Ltk 本文主要讲解第一种获取
6、方式.49/49个人收集整理仅供参考学习 有能有些人有这样地疑问,为什么授权成功后不直接返回访问令牌,则是获取授权码,然后使用授权码去换访问令牌.这个问题地答案在官方地文档里,原因主要是保障数据安全性.当用户授权成功,浏览器从授权服务器返回客户端时,数据是通过QueryString传递地.如果直接返回访问令牌,则直接在地址栏可见,相关地日志系统也会记录,这会提高令牌被破解地风险.返回授权码,然后客户端通过直接通信使用授权码换取访问令牌,整个过程对用户是不可见地,这样大大提高了安全性.dvzfvkwMI1 五.Do
7、tNetOpenAuth在OAuth2中地应用 官方Sample内包含有OAuth地完整示例,其授权服务器使用Mvc编写,客户端与资源服务器使用WebForm编写,数据层使用了EF.为了更加贴进实际使用,减少无关杂音,本人模仿其重写了一个Sample,本文地讲解将围绕自行编写地Sample展开.Sample示例可于文后下载.rqyn14ZNXI 1.客户端 客户端编程主要围绕三个类展开EmxvxOtOco AuthorizationServerDescription,顾名思义,用于对服务端地描述.如
8、下所示SixE2yXPq5privatestaticAuthorizationServerDescriptionAuthServerDescription;privatestaticreadonlyWebServerClientClient;sta