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

使用API Key验证WCF Data Service

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

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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
发短信API
由于需要进行短信发送,选择了百度的API,现贡献一下源码。 /// <summary> /// 百度接口签名帮助类 /// </summary> public class BaiduApiHelper { #region 构造函数 /// <summary> /// 构造函数 /// </summary> /// <param name="accessKeyId">百度AccessKe
谭广健
2019/09/30
10.1K0
发短信API
创建一个自托管(Self-Host)的WCF Service
若确保上述self-host server能运行,需要用管理员权限开一个powershell,运行:
用户10555056
2023/05/25
5720
使用WCF进行跨平台开发之一(WCF的实现、控制台托管与.net平台的调用)1.创建项目结构2.契约的设计3.实现服务4.控制台托管服务5.在.net平台中调用WCF
     WCF是Windows Communication Foundation的缩写,是微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,是WinFx的三个重要开发类库之一,其它两个是WPF和WF。在本系列文章 (我现在计划的应该是三篇,一篇WCF的开发和部署,另外是在.net平台上调用它,第二篇是PHP调用,第三篇是JAVA调用)。      在本次的跨平台集成通信开发示例中,使用到的各种技术,咱且走且看,一边开发一边讲解。 1.创建项目结构 使用VS2010一个名为Intergat
小白哥哥
2018/03/07
2.1K0
使用WCF进行跨平台开发之一(WCF的实现、控制台托管与.net平台的调用)1.创建项目结构2.契约的设计3.实现服务4.控制台托管服务5.在.net平台中调用WCF
我的WCF之旅(13):创建基于MSMQ的Responsive Service
一、One-way MEP V.S. Responsible Service 我们知道MSMQ天生就具有异步的特性,它只能以One-way的MEP(Message Exchange Pattern)进
蒋金楠
2018/02/07
8640
我的WCF之旅(13):创建基于MSMQ的Responsive Service
WCF技术剖析之十七:消息(Message)详解(下篇)
《WCF技术剖析(卷1)》自出版近20天以来,得到了园子里的朋友和广大WCF爱好者的一致好评,并被卓越网计算机书店作为首页推荐,在这里对大家的支持表示感谢。同时我将一直坚持这个博文系列,与大家分享我对WCF一些感悟和学习经验。在《消息(Message)详解》系列的上篇和中篇,先后对消息版本、详细创建、状态机和基于消息的基本操作(读取、写入、拷贝、关闭)进行了深入剖析,接下来我们来谈谈消息的另一个重要组成部分:消息报头(Message Header)。 按照SOAP1.1或者SOAP1.2规范,一个SOAP消
蒋金楠
2018/01/16
1.3K0
WCF技术剖析之十七:消息(Message)详解(下篇)
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
8000
我的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的双向通讯
不同的.Net版本客户端软件调用Java Web Service区别
最近的系统中需要.Net开发的离线端软件通过Web Service技术和Java开发的在线系统进行数据交互。
程序你好
2018/08/09
1.7K0
How to Add an API to your Web Service
Introduction APIs are a great way to extend your application, build a community, excite your users and get in on the Mashup Mania spreading across the web. While there’s plenty out there wanting in on the action, there’s a lot of questions about how to act
张善友
2018/01/29
8580
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
6100
WCF入门(10)
公司是做乙方的,工资还凑合,主要是项目基本都已完成,进去就是干维护,体会不到那种从头彻尾的成就感。项目中具体用了EF+Ado.net+WCF+WPF+(VB.net啊,坑啊,完全不知道是这个东西),整个解决方案有47个项目,是一个国际化的电话保险销售系统中的一部分。感觉自己是去体验生活的。这个项目也就是自己学习WCF的原因。
_淡定_
2018/08/24
3870
WCF入门(10)
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.2K0
WCF后续之旅(10): 通过WCF Extension实现以对象池的方式创建Service Instance
我们知道WCF有3种典型的对service instance进行实例化的方式,他们分别与WCF的三种InstanceContextMode相匹配,他们分别是PerCall,PerSession和Single。PerCall为每次service invocation创建一个新的service instance; 而PerSession则让一个service instance处理来自通过各Session(一般是同一个proxy对象)的调用请求;而Single则是用同一个service instance来处理所有
蒋金楠
2018/01/16
7980
WCF后续之旅(10): 通过WCF Extension实现以对象池的方式创建Service Instance
WCF后续之旅(13): 创建一个简单的WCF SOAP Message拦截、转发工具[上篇]
WCF是.NET平台下实现SOA的一种手段,SOA的一个重要的特征就基于Message的通信方式。从Messaging的角度讲,WCF可以看成是对Message进行发送、传递、接收、基础的工具。对于一个消息交换的过程,很多人只会关注message的最初的发送端和最终的接收端。实际上在很多情况下,在两者之间还存在很多的中间结点(Intermediary),这些中间结点在可能在实际的应用中发挥中重要的作用。比如,我们可以创建路由器(Router)进行消息的转发,甚至是Load Balance;可以创建一个消息拦截器(Interceptor)获取request或者response message,并进行Audit、Logging和Instrumentation。今天我们就我们的目光转向这些充当着中间人角色的Intermediary上面来。
蒋金楠
2022/05/09
6760
WCF后续之旅(13): 创建一个简单的WCF SOAP Message拦截、转发工具[上篇]
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
9670
WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
WCF后续之旅(5): 通过WCF Extension实现Localization
在上一篇文章中, 我列出了WCF一系列的可扩展对象和元素,并简单介绍了他们各自的功能、适合的场景和具体解决的问题。从本篇开始我将通过一个个具体的例子来介绍如何利用这些扩展点对WCF进行扩展,从而解决一些我们在实现的项目开发中可能出现的问题。
蒋金楠
2022/05/09
3530
WCF后续之旅(5): 通过WCF Extension实现Localization
『JSA宏神助攻之五』使用搭建本地web服务让JSA宏连接本地文件读写
在JSA宏中,没有办法对本地的文件进行读写,虽然仿效VBA实现了一个FreeFile的函数来处理读写,但也仅限于文本文件的读写。
Excel催化剂
2024/06/27
4040
『JSA宏神助攻之五』使用搭建本地web服务让JSA宏连接本地文件读写
基于sliverlight + wcf的web 文字版IM 示例
演示地址: http://task.24city.com/default.html 预览界面: 一、布局 采用Grid布局,5行2列 第一行:为登录/注册信息区 第二行:左列为聊天记录区,右列为"最近
菩提树下的杨过
2018/03/02
1.2K0
基于sliverlight + wcf的web 文字版IM 示例
实践重于理论——创建一个监控程序探测WCF的并发处理机制
由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的(参考《并发的本质》《并发中的同步》),所以在不同的实例上下文模式下,会表现出不同的并发行为。接下来,我们从具体的实例上下文模式的角度来剖析WCF的并发处理机制,如果对WCF实例上下文模式和实例上下文提供机制不了解的话,请参阅《WCF技术剖析(卷1)》第9章。 为了使读者对采用不同实例上下文对并发的影响有一个深刻的认识,会创建一个简单的WCF应用,并在此基础上添加监控功能,主要监控各种事件的执行时间,比如客户端服务调用的开始和结
蒋金楠
2018/01/16
6780
实践重于理论——创建一个监控程序探测WCF的并发处理机制
Java实现AWS S3 V4 Authorization自定义验证
最近在开发文件存储服务,需要符合s3的协议标准,可以直接接入aws-sdk,本文针对sdk发出请求的鉴权信息进行重新组合再签名验证有效性,sdk版本如下
code2roc
2023/07/19
7780
推荐阅读
相关推荐
发短信API
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档