OAuth2学习及DotNetOpenAuth部分源码研究.docx
《OAuth2学习及DotNetOpenAuth部分源码研究.docx》由会员分享,可在线阅读,更多相关《OAuth2学习及DotNetOpenAuth部分源码研究.docx(30页珍藏版)》请在第一文库网上搜索。
1、0Auth2学习及DotNetOpenAuth部分源码研究二 .0AUth2中的角色0Auth2有四种角色authorizationSerVer授权服务器:对资源所有者进行认证,认证通过后,向客户端发放AccessToken(访问令牌)。三 .认证过程用户访问客户端的网站,想操作自己存放在资源服务提供方的资源。客户端将用户引导至授权服务提供方的授权页面请求用户授权,在这个过程中将客户端的回调连接发送给授权服务提供方。用户在授权服务提供方的网页上输入用户名与密码,然后授权该客户端访问所请求的资源。授权成功后,授权服务提供方对客户端授予一个授权码,网站跳回至客户端。客户端获得授权码后,再次从授权服
2、务提供方请求获取访问令牌。授权服务提供方根据授权码授予客户端访问令牌。客户端使用获取的访问令牌访问存放在资源服务提供方上的受保护的资源。四 .获取访问令牌方式从上面能够看到,令牌是串起整个认证流程的核心QAUth2有四种获取令牌的方式AuthorizationCode授权码方式:这种是推荐使用的,也是最安全的.本文要紧讲解第一种获取方式.有能有些人有这样的疑问,为什么授权成功后不直接返回访问令牌,则是获取授权码,然后使用授权码去换访问令牌.这个问题的答案在官方的文档里,原因要紧是保障数据安全性.当用户授权成功,浏览器从授权服务器返回客户端时,数据是通过QUeryString传递的.假如直接返回
3、访问令牌,则直接在地址栏可见,有关的日志系统也会记录,这会提高令牌被破解的风险.返回授权码,然后客户端通过直接通信使用授权码换取访问令牌,整个过程对用户是不可见的,这样大大提高了安全性.E-DotNetOpenAuth在OA1Hh2中的应用官方Samp1e内包含有OAIJth的完整示例,其授权服务器使用Mvc编写,客户端与资源服务器使用WebForm编写,数据层使用了EF.为了更加贴进实际使用,减少无关杂音,本人模仿其重写了一个SamP1e,本文的讲解将围绕自行编写的Samp1e展开.Samp1e示例可于文后下载.1.客户端生成客户端代理后,第一件事就是应该访问授权服务器获取授权码.这要紧由W
4、ebServerCIient类的RequestUserAuthorization方法完成.pub1icvoidRequestUserAuthorization(IEnumerab1escope=nu11,UrireturnTo=nu11);在申请授权码时,还会向授权服务器发送申请权限的范围,参数名叫SCoPe.通常都是一个Ur1地址.申请成功,授权服务器返回后,客户端需再次访问授权服务器申请访问令牌.这要紧由WebSerVerC1ient类的PrOCeSSUSerAUthoriZation方法完成成功申请后,会返回一个IAUthOriZationState接口对象淇定义如下stringAcce
5、ssTokenget;set;DateTime?AccessTokenExpirationUtcget;set;DateTime?AccessTokenIssueDateUtcget;set;UriCa11backget;set;stringRefreshTokenget;set;HashSetScopeget;很好懂得,AccessToken为访问令牌,RefreshToken为刷新令牌,AccessTokenIssueDateUtc为访问令牌生成时间,AccessTokenExPirationUtc为访问令牌过期时间,Ca11back为回调的UrIjScope为权限的范围,或者者叫被授权能
6、够访问的地址范围.在Samp1e中为了简化编程对框架作了二次封装,如下前12行为对象初始化,14至J18行将获取的权限对象储存在Session中,属性名为AUthOriZatie)n.客户端使用GetUserAuthorization方法来获取对某地址访问授权.在页面中调用代码如下打开页面,首次调用GetUSerAUthOriZatiOn方法后,首先推断权限对象AU懵OriZatiOn是否为空.不为空说明已获取到权限.为空则执行ProcessUserAuthorization方法获取访问令牌,由于如今没有授权码,则返回的权限对象为空.最后通过Request1JserAuthorization方
7、法向授权服务器申请授权码.第三次执行GetUserAuthorization方法,由于权限对象Authorization已不为空,则直接返回.访问令牌默认是有的时候效的.当过期后,要么走上面三步重新申请一个令牌,只是更好的方法是使用刷新令牌刷新访问令牌.这要紧由WebServerCIient类的RefreshAuthorization方法完成pub1icboo1RefPeshAuthorization(IAuthorizationStateauthorizationTimeSpan?Skip1fusefu11ifeExceeds=nu11);在Samp1e中针对Wcf请求作了二次封装,如下2.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OAuth2 学习 DotNetOpenAuth 部分 源码 研究