首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用API Key验证WCF Data Service

使用API Key验证WCF Data Service

作者头像
张善友
发布于 2018-01-19 08:35:42
发布于 2018-01-19 08:35:42
8990
举报
文章被收录于专栏:张善友的专栏张善友的专栏

Ron Jacobs 有篇文章介绍如何在WCF Rest Service中使用API Key验证:http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx ,在WCF Data Service中怎么做呢?本文将介绍如何在WCF Data Service中使用API Key进行验证,主要代码来自于Ron Jacobs的这篇文章.

API Key作为一个参数在URL中传递, 在Rob Jacobs的WCFWebHttpLibrary.APIKeyAuthorization的方法string GetAPIKey(OperationContext operationContext)的代码如下:

代码语言:js
AI代码解释
复制
   1: public string GetAPIKey(OperationContext operationContext)
   2: {
   3:   // Get the request message
   4:   var request = operationContext.RequestContext.RequestMessage;
   5:   // Get the HTTP Request
   6:   var requestProp =(HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
   7:   // Get the query string
   8:   NameValueCollection queryParams =
   9:       HttpUtility.ParseQueryString(requestProp.QueryString);
  10:  
  11:   // Return the API key (if present, null if not)
  12:   string apiKey = queryParams[APIKEY];
  13:   // Is the API Key available in the querystring?
  14:   if (apiKey == null)
  15:   {
  16:     // Is the API Key available in the header?
  17:     apiKey = requestProp.Headers[APIKEY];
  18:   }
  19:   return apiKey;
  20: }

WCF Data Service的OnStartProcessingRequest 方法在处理每个请求之前调用。对于批处理请求,将会为顶级批处理请求调用一次,然后为批处理中的每个操作调用一次。 我们在这个方法里可以实施自定义验证的相关逻辑:

代码语言:js
AI代码解释
复制
   1: protected override void OnStartProcessingRequest(ProcessRequestArgs args)
   2: {
   3:    var queryParams = HttpUtility.ParseQueryString(args.OperationContext.AbsoluteRequestUri.Query);
   4:    string apiKey = queryParams[APIKEY];
   5:    if (apiKey == null)
   6:    {
   7:         apiKey = args.OperationContext.RequestHeaders[APIKEY];
   8:    }
   9:    if (CheckValidAPIKey(apiKey)) 
  10:    {
  11:       base.OnStartProcessingRequest(args);
  12:    }
  13:    else
  14:    {
  15:        throw new System.Web.Services.Protocols.SoapException();
  16:    }
  17:  
  18: }
  19:  

客户端调用的时候,可以在SendingRequest事件添加到请求的Header里头:

代码语言:js
AI代码解释
复制
   1: class Program
   2: {
   3:         static void Main(string[] args)
   4:         {
   5:             Uri serviceUri = new Uri("http://localhost/ProfilesDataService");
   6:  
   7:             ServiceReference.YUPEntities service = new ServiceReference.YUPEntities(serviceUri);
   8:             service.SendingRequest += new EventHandler<System.Data.Services.Client.SendingRequestEventArgs>
   9:  
  10: (service_SendingRequest);
  11:  
  12:             var items = service.Execute<UserProfile>(new Uri(http://localhost/ProfilesDataService/GetUserProfile?username='testvip')).ToList();
  13:             foreach (UserProfile profile in items)
  14:             {
  15:                 Console.WriteLine(profile.Title);
  16:             }
  17:         }
  18:  
  19:         static void service_SendingRequest(object sender,System.Data.Services.Client.SendingRequestEventArgs e)
  20:         {
  21:             // when using api in the header...
  22:             e.Request.Headers.Add("APIkey", "918704ec-4811-45b6-a169-16bae3df69a8");
  23:  
  24:         }
  25:  
  26: }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-03-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
我的WCF之旅(13):创建基于MSMQ的Responsive Service
一、One-way MEP V.S. Responsible Service 我们知道MSMQ天生就具有异步的特性,它只能以One-way的MEP(Message Exchange Pattern)进
蒋金楠
2018/02/07
8230
我的WCF之旅(13):创建基于MSMQ的Responsive Service
HTTP Basic Authentication验证WCF Data Service
WCF Data Service是OData协议,也是RESTFul Service的一种,上篇文章已经介绍了HTTP Basic Authentication for RESTFul Service,也介绍了服务端如何设置。现在我们来一下客户端怎么样调用。 按照OData and Authentication – Part 6 – Custom Basic Authentication的介绍的方法调用: 1: Entities ctx = new Entities(new Uri("http://
张善友
2018/01/19
5820
基于sliverlight + wcf的web 文字版IM 示例
演示地址: http://task.24city.com/default.html 预览界面: 一、布局 采用Grid布局,5行2列 第一行:为登录/注册信息区 第二行:左列为聊天记录区,右列为"最近
菩提树下的杨过
2018/03/02
1.2K0
基于sliverlight + wcf的web 文字版IM 示例
发短信API
由于需要进行短信发送,选择了百度的API,现贡献一下源码。 /// <summary> /// 百度接口签名帮助类 /// </summary> public class BaiduApiHelper { #region 构造函数 /// <summary> /// 构造函数 /// </summary> /// <param name="accessKeyId">百度AccessKe
谭广健
2019/09/30
9.6K0
发短信API
WCF后续之旅(3): WCF Service Mode Layer 的中枢—Dispatcher
在本系列的第一部分、第二部分中,我们对WCF的channel layer进行了深入的讨论。我们接下来继续讨论WCF的service mode layer。本篇文章着重介绍service 端的ServiceMode。写作此篇文章旨在达到以下两个目的: 希望读者对ServiceMode有一个大致的了解,结合前面介绍的channel layer的相关知识,帮助读者了解WCF的整个实现机制和执行的流程。 介绍ServiceMode涉及到的绝大部分extension point,让读者在具体的项目开发中能够根据实
蒋金楠
2018/01/16
7660
WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
在上一篇文章中,我们讨论了如何通过CallContextInitializer实现Localization的例子,具体的做法是将client端的culture通过SOAP header传到service端,然后通过自定义的CallContextInitializer设置当前方法执行的线程culture。在client端,当前culture信息是通过OperationContext.Current.OutgoingMessageHeaders手工至于SOAP Header中的。实际上,我们可以通过基于WCF的
蒋金楠
2018/01/16
9350
WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
不同的.Net版本客户端软件调用Java Web Service区别
最近的系统中需要.Net开发的离线端软件通过Web Service技术和Java开发的在线系统进行数据交互。
程序你好
2018/08/09
1.6K0
WCF后续之旅(5): 通过WCF Extension实现Localization
在上一篇文章中, 我列出了WCF一系列的可扩展对象和元素,并简单介绍了他们各自的功能、适合的场景和具体解决的问题。从本篇开始我将通过一个个具体的例子来介绍如何利用这些扩展点对WCF进行扩展,从而解决一些我们在实现的项目开发中可能出现的问题。
蒋金楠
2022/05/09
3330
WCF后续之旅(5): 通过WCF Extension实现Localization
创建一个自托管(Self-Host)的WCF Service
若确保上述self-host server能运行,需要用管理员权限开一个powershell,运行:
用户10555056
2023/05/25
5290
WCF 学习总结2 -- 配置WCF
前面一篇文章《WCF 学习总结1 -- 简单实例》一股脑儿展示了几种WCF部署方式,其中配置文件(App.config/Web.config)都是IDE自动生成,省去了我们不少功夫。现在回过头来看看IDE提供的Wcf Service Library项目模板中的默认服务端配置文件——App.config里面究竟有什么秘密。 服务端的配置文件主要是对services、bindings、behaviors的配置。在默认的App.config中,使用的是WCF Framework定义好的wsHttpBinding默
hbbliyong
2018/03/05
1.2K0
WCF 学习总结2 -- 配置WCF
快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式。记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winform时,使用过Remoting,再之后做B/S架构时,就会经常使用.NET平台下的Web Service,直到使用上WCF。看上去有了一些WCF的使用经验,实则不然,比如对安全、分布式事务、可靠会话等主题仍然接触甚少,因而决定重新回顾学习一下相关知识,尤其是对WCF框架的理解(已于2015年开源,可下载源码,h
用户1216676
2018/01/24
1.3K0
快速入门系列--WCF--01基础概念
我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯
在一个基于面向服务的分布式环境中,借助一个标准的、平台无关的Communication Infrastructure,各个Service通过SOAP Message实现相互之间的交互。这个交互的过程实际上就是Message Exchange的过程。WCF支持不同形式的Message Exchange,我们把这称之为Message Exchange Pattern(MEP), 常见的MEP包括: Request/Reply,Request/Forget(One-way)和Duplex。通过采用Duplex M
蒋金楠
2018/01/16
1K0
我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯
Java实现AWS S3 V4 Authorization自定义验证
最近在开发文件存储服务,需要符合s3的协议标准,可以直接接入aws-sdk,本文针对sdk发出请求的鉴权信息进行重新组合再签名验证有效性,sdk版本如下
code2roc
2023/07/19
6910
WCF Data Service QuickStart
开放数据协议(OData)是一个查询和更新数据的Web协议。OData是基于诸如HTTP和AtomPub的国际标准创建的,它提供了一个跨平台的数据通信的方案。OData应用了web技术如HTTP、Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务和存储的信息访问。SharePoint 2010, SQL Server 2008 R2, PowerPivot, Windows Azure Table Storage, 和第三方的产品像 IBM’s WebSphere eXtreme Sc
张善友
2018/01/30
1.1K0
WCF Data Service QuickStart
实践重于理论——创建一个监控程序探测WCF的并发处理机制
由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的(参考《并发的本质》《并发中的同步》),所以在不同的实例上下文模式下,会表现出不同的并发行为。接下来,我们从具体的实例上下文模式的角度来剖析WCF的并发处理机制,如果对WCF实例上下文模式和实例上下文提供机制不了解的话,请参阅《WCF技术剖析(卷1)》第9章。 为了使读者对采用不同实例上下文对并发的影响有一个深刻的认识,会创建一个简单的WCF应用,并在此基础上添加监控功能,主要监控各种事件的执行时间,比如客户端服务调用的开始和结
蒋金楠
2018/01/16
6530
实践重于理论——创建一个监控程序探测WCF的并发处理机制
WCF技术剖析之十七:消息(Message)详解(下篇)
《WCF技术剖析(卷1)》自出版近20天以来,得到了园子里的朋友和广大WCF爱好者的一致好评,并被卓越网计算机书店作为首页推荐,在这里对大家的支持表示感谢。同时我将一直坚持这个博文系列,与大家分享我对WCF一些感悟和学习经验。在《消息(Message)详解》系列的上篇和中篇,先后对消息版本、详细创建、状态机和基于消息的基本操作(读取、写入、拷贝、关闭)进行了深入剖析,接下来我们来谈谈消息的另一个重要组成部分:消息报头(Message Header)。 按照SOAP1.1或者SOAP1.2规范,一个SOAP消
蒋金楠
2018/01/16
1.3K0
WCF技术剖析之十七:消息(Message)详解(下篇)
silverlight动态读取txt文件/解析json数据/调用wcf示例
终于开始正式学习silverlight,虽然有点晚,但总算开始了,今天看了一下sdk,主要是想看下silverlight中如何动态调用数据,对于数据库的访问,sdk中的官方示例多用的是Ado.Net数据服务,方便到是方便,就是感觉Ado.Net数据服务返回的xml太啰嗦了,一点也不精简,数据通讯量太大(N多无用的标签导致客户端与服务端之间传输数据增加了不少),于是想到能否直接用wcf返回json格式, 何况sdk中提到silverlight中System.Json已经完成了对json的解析 经实验,用We
菩提树下的杨过
2018/01/23
1.6K0
silverlight动态读取txt文件/解析json数据/调用wcf示例
WCF后续之旅(1): WCF是如何通过Binding进行通信的
《我的WCF之旅》系列自开篇以来,得到了园子里很多朋友的厚爱,并荣登了博客园2007年度系列博文Top 10。由于工作原因,沉寂了几个月,今天开始WCF新的旅程。如果说《我的WCF之旅》主要是对WCF基本原理概括性介绍,而对于这个新的系列,我将和大家分享我对WCF的一些实现机制、设计原理的理解,以及我在实际的项目开发中的一些实践经验(比如在后续的一些文章中,我将介绍通过WCF Extension实现一些在真正的分布式项目开发中很有现实意义的功能)。 Windows Communication Foundat
蒋金楠
2018/01/16
1K0
WCF后续之旅(1): WCF是如何通过Binding进行通信的
ExtJs学习笔记(20)-利用ExtJs的Ajax与服务端WCF交互
ExtJs是一套非常不错的javascript UI库(第一次接触ExtJs的,可到官方网站http://www.extjs.com/deploy/dev/examples/samples.html看下示例。相信不少人会心动的),不仅组件丰富,效果漂亮,而且ExtJs集成的Ajax功能可以方便的与.Net的WCF进行交互. 这里我们将演示ExtJs的FormPanel从WCF加载数据,以及如何提交数据到WCF服务端 1.首先来定义一个用于传输信息的Class(实际开发中,可以是Linq to Sq
菩提树下的杨过
2018/01/24
1.1K0
[WCF权限控制]利用WCF自定义授权模式提供当前Principal[实例篇]
在《原理篇》中我们谈到:如果采用自定义安全主体权限模式,我们可以通过自定义AuthorizationPolicy或者ServiceAuthorizationManager实现对基于当前认证用于相关的安全主体的提供,进而达到授权的目的。为了让大家对此有个更加深刻的认识,在这篇文章中我们会提供一个具体的例子。[源代码从这里下载] 目录: 一、创建自定义AuthorizationPolicy 二、创建自定义ServiceAuthorizationManager 三、通过自
蒋金楠
2018/02/07
8480
[WCF权限控制]利用WCF自定义授权模式提供当前Principal[实例篇]
推荐阅读
相关推荐
我的WCF之旅(13):创建基于MSMQ的Responsive Service
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档