`
t225com
  • 浏览: 657783 次
文章分类
社区版块
存档分类
最新评论

OAuth 学习(2) —— 自定义OAuth服务端(WCF REST数据访问控制)

 
阅读更多

上篇了解了如何调用 OAuth 授权来获取数据,本篇介绍如何开放OAuth授权,并控制服务端数据访问。
先看一下图:



这两天事太多,文章整理的断断续续委屈

OK,步入正题,这里还是要借力:DevDefined.OAuth 框架。它提供了客户端访问,服务端管理Token的基础功能。

1.OAuthChannel
定义了服务端用户模型,OAuth的拦截器,OAuthWebServiceHostFactory(继承于WebServiceHostFactory,用于添加拦截器),以及 RequestToken 和 AccessToken 保持在内存里的容器及存取类 (InMemoryTokenRepository,InMemoryTokenStore)

OAuthWebServiceHostFactory 添加拦截器,使用了 WebServiceHost2(Microsoft.ServiceModel.Web.dll 里,是 Microsoft 发布的WCF REST Starter Kit的一部分)
WebServiceHost2 重写了 ServiceHost 里OnOpening 方法添加拦截器。WebServiceHost2的源代码猛击这里
OAuthWebServiceHostFactory:


拦截器(OAuthInterceptor.cs)将请求的 OAuth (Request Header中) 转换成OAuthChannel.Models.AccessToken



2. OAuth WCF Rest Service
首先创建一个 WCF Rest Service:

定义一个基础数据模型,供Sample访问:
Contacts 中的数据只有属于 Owner 的“用户”才可以访问,因此 OAuthService 中实现如下:
上面的 name 从 Thread.CurrentPrincipal.Identity.Name 而来,即访问当前服务的客户端ID。这个ID是由OAuth服务的拦截器(Interceptor)实现由 AccessToken(String) 转换成服务端用户模型。

在 web.config 中,利用 WCF 对 ASP.NET 的兼容机制,使用 Form 认证:定义了两个用户:john 和 jane

并修改 Global.asax 的 WebServiceHostFactory,改为OAuthWebServiceHostFactory
作为一个基本的OAuth授权服务,我们还需要提供:
1. 获取 RequestToken 的服务
2. 获取 AccessToken 的服务
RequestToken.ashx :返回 RequestToken

AccessToken.ashx :交换 RequestToken 返回 AccessToken


当然我们还需要提供用户登录和授权的页面:Login.aspx 和 UserAuthorize.aspx Form登录就不累述了, UserAuthorize.aspx 中实现授权的方法如下:
3. 应用
Default.aspx 发起请求获取RequestToken,授权成功后回调 Callback.ashxCallback.ashx



  


  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics