欢迎来到第一文库网! | 帮助中心 第一文库网-每个人都是第一
第一文库网
全部分类
  • 研究报告>
  • 学术论文>
  • 全科教育>
  • 应用文档>
  • 行业资料>
  • 企业管理>
  • 技术资料>
  • 生活休闲>
  • ImageVerifierCode 换一换
    首页 第一文库网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    OAuth2学习及DotNetOpenAuth部分源码研究.docx

    • 资源ID:653427       资源大小:82.67KB        全文页数:30页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    扫码关注公众号登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    OAuth2学习及DotNetOpenAuth部分源码研究.docx

    0Auth2学习及DotNetOpenAuth部分源码研究二 .0AUth2中的角色0Auth2有四种角色authorizationSerVer授权服务器:对资源所有者进行认证,认证通过后,向客户端发放AccessToken(访问令牌)。三 .认证过程用户访问客户端的网站,想操作自己存放在资源服务提供方的资源。客户端将用户引导至授权服务提供方的授权页面请求用户授权,在这个过程中将客户端的回调连接发送给授权服务提供方。用户在授权服务提供方的网页上输入用户名与密码,然后授权该客户端访问所请求的资源。授权成功后,授权服务提供方对客户端授予一个授权码,网站跳回至客户端。客户端获得授权码后,再次从授权服务提供方请求获取访问令牌。授权服务提供方根据授权码授予客户端访问令牌。客户端使用获取的访问令牌访问存放在资源服务提供方上的受保护的资源。四 .获取访问令牌方式从上面能够看到,令牌是串起整个认证流程的核心QAUth2有四种获取令牌的方式AuthorizationCode授权码方式:这种是推荐使用的,也是最安全的.本文要紧讲解第一种获取方式.有能有些人有这样的疑问,为什么授权成功后不直接返回访问令牌,则是获取授权码,然后使用授权码去换访问令牌.这个问题的答案在官方的文档里,原因要紧是保障数据安全性.当用户授权成功,浏览器从授权服务器返回客户端时,数据是通过QUeryString传递的.假如直接返回访问令牌,则直接在地址栏可见,有关的日志系统也会记录,这会提高令牌被破解的风险.返回授权码,然后客户端通过直接通信使用授权码换取访问令牌,整个过程对用户是不可见的,这样大大提高了安全性.E-DotNetOpenAuth在OA1Hh2中的应用官方Samp1e内包含有OAIJth的完整示例,其授权服务器使用Mvc编写,客户端与资源服务器使用WebForm编写,数据层使用了EF.为了更加贴进实际使用,减少无关杂音,本人模仿其重写了一个SamP1e,本文的讲解将围绕自行编写的Samp1e展开.Samp1e示例可于文后下载.1.客户端生成客户端代理后,第一件事就是应该访问授权服务器获取授权码.这要紧由WebServerCIient类的RequestUserAuthorization方法完成.pub1icvoidRequestUserAuthorization(IEnumerab1e<string>scope=nu11,UrireturnTo=nu11);在申请授权码时,还会向授权服务器发送申请权限的范围,参数名叫SCoPe.通常都是一个Ur1地址.申请成功,授权服务器返回后,客户端需再次访问授权服务器申请访问令牌.这要紧由WebSerVerC1ient类的PrOCeSSUSerAUthoriZation方法完成成功申请后,会返回一个IAUthOriZationState接口对象淇定义如下stringAccessTokenget;set;DateTime?AccessTokenExpirationUtcget;set;DateTime?AccessTokenIssueDateUtcget;set;UriCa11backget;set;stringRefreshTokenget;set;HashSet<string>Scopeget;很好懂得,AccessToken为访问令牌,RefreshToken为刷新令牌,AccessTokenIssueDateUtc为访问令牌生成时间,AccessTokenExPirationUtc为访问令牌过期时间,Ca11back为回调的UrIjScope为权限的范围,或者者叫被授权能够访问的地址范围.在Samp1e中为了简化编程对框架作了二次封装,如下前12行为对象初始化,14至J18行将获取的权限对象储存在Session中,属性名为AUthOriZatie)n.客户端使用GetUserAuthorization方法来获取对某地址访问授权.在页面中调用代码如下打开页面,首次调用GetUSerAUthOriZatiOn方法后,首先推断权限对象AU懵OriZatiOn是否为空.不为空说明已获取到权限.为空则执行ProcessUserAuthorization方法获取访问令牌,由于如今没有授权码,则返回的权限对象为空.最后通过Request1JserAuthorization方法向授权服务器申请授权码.第三次执行GetUserAuthorization方法,由于权限对象Authorization已不为空,则直接返回.访问令牌默认是有的时候效的.当过期后,要么走上面三步重新申请一个令牌,只是更好的方法是使用刷新令牌刷新访问令牌.这要紧由WebServerCIient类的RefreshAuthorization方法完成pub1icboo1RefPeshAuthorization(IAuthorizationStateauthorizationTimeSpan?Skip1fusefu11ifeExceeds=nu11);在Samp1e中针对Wcf请求作了二次封装,如下2.授权服务端服务端要紧围绕下列对象编程AuthorizationServer类,代表授权服务类.要紧的功能都由它提供.IAuthorizationServerHost接口是编写验证逻辑的地方,由C)AUth2AuthorizationServerICryptoKeyStore是访问密码的接口,INonceStore是访问随机数的地方,这两个接口由DatabaseKeyNonceStore类实现JC1ientDeSeriPtiOn是描述客户端的接口,由C1ient实现.在本Samp1e中Qpen1d与OAUth2是配合使用的.用户需要先去OPen1d进行登录,然后去OAUth2进行授权.从这个意义上讲QAUth2受OPen1d的统一管理,是其一个客户端.AccountControIIer是一个典型的OPenId客户端编程.上篇文章已有讲解,故不赘述.当客户端申请授权码时,首先执行OAUthCOntrOIIer类的Authorize方法,如下,有删节A1JthOriZatiOnSerVer类的ReadAUthOriZatic)nRequest方法会获取用户请求并返回一个EndUSerAUthOriZatiOnReqUeSt对象,此对象定义如下pub1icUriCa11backget;set;pub1icstringC1ientIdentifierget;set;pub1icstringC1ientStateget;set;pub1icvirtua1EnduserAuthorizationResponseTypeResponseTypeget;pub1icHashSet<string>Scopeget;此方法是查找数据库中有无此客户端记录且密码不为空,假如不为空且处于获取授权码阶段,则会调用了ISAU懵OriZatiOnVaIid方法privateboo1IsAuthorizationVa1id(HashSet<string>PequestedScopes,stringC1ientIdentifierjDateTimeissUedUtc,stringusername)issuedUtc+=TimeSpan.FromSeconds(1);database.AddParameter(nQC1ientIdentifier,c1ientidentifier);database.AddParameter(00CreatedOnUtc,issuedUtc);database.AddParameter(ExpirationDateUtc,DateTime.UtcNow);database.AddParameter(OpenIDC1aimedIdentifier,username);StringBui1dersb=newStringBui1der();sb.Append("se1ectscopefromuseru);sb.Append(joinC1ientAuthorizationcaonu.userid=ca.useridn);sb.Append(njoinC1ientconc.c1ientid=ca.C1ientid,);sb.Append(wherec.C1ientIdentifier=C1IentIdentifier);sb.Append(,andCreatedOnUtc<=QCreatedOnUtc'*);sb.Append(nand(ExpirationDateUtcisnu11orExpirationDateUtc>=EXpirationDateUtc),);sb.Append(andu.OpenIDC1aimedIdentifier=0OpenIDC1aimedIdentifier,);DataTab1edt=database.ExecuteDataSet(sb.ToString().Tab1esO;if(dt.Rows.Count=O)returnfa1se;vargrantedScopes=newHashSet<string>(OAuthUti1ities.ScopeStringComparer);foreach(DataRowdrindt.Rows)grantedScopes.UnionWith(OAuthUti1ities.Sp1itScopes(drscope.ToString();returnrequestedScopes.IsSubsetOf(grantedScopes);能够看到,此方法查找指定用户在指定客户端上是否有对目标范围的授权,且没有过期.也就是说,假如客服端的密码不能为空,且当前用户在此客户端上对目标范围还有未过期的授权,则自动发放授权码.回到最初的Authorize方法.假如能够自动发放授权码,则调用AuthorizationServer类的PrepareApproveAuthorizationRequest方法生成一个授权码,并通过AuthorizationServer类Channe1属性的PrepareResponse方法最终返回给客户端.假如不能自动发放,则浏览器会跳转到一个确认页面,如下图所示We1come:http:/1oca1host:5250user.asp×Bob1ogOffAuthorize是否授权Web4访问以下地址http:/tempuri.org/IGetData/Name1engthYesINo:点击后执行OAUtheontro11er类的AuthorizeResponse方法,有删节.pub1icActionResu1tAuthorizeResponse(boo1isApproved)varpendingRequest=this.authorizationserver.ReadAuthorizationRequest();IDirectedprotoco1Messageresponse;if(isApproved)database.AddParameter(nSC1ientIdentifiernzpendingRequest.C1ientidentifier);intC1ientId=Convert.ToInt32(database.ExecuteSca1ar("se1ectc1ient1dfromc1ientwhereC1ientIdentifier=0C1ientIdentifier);database.AddParameter(OpenIDC1aimed

    注意事项

    本文(OAuth2学习及DotNetOpenAuth部分源码研究.docx)为本站会员(lao****ou)主动上传,第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第一文库网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 001doc.com网站版权所有   

    经营许可证编号:宁ICP备2022001085号

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



    收起
    展开