Restful风格wcf调用4——权限认证
写在前面
在前面的三篇文章,已经介绍了restful风格wcf,如何实现增删改查以及文件的上传下载操作。本篇文章将介绍一下,调用restful的权限认证的内容。在调用的接口,为了安全,总会需要对请求进行权限认证的。以防一些非法的操作。
系列文章
一个例子
在REST WCF中,我们可以利用 HttpHeader 来完成这一目标。
首先我们添加一个校验身份的一个方法。
/// <summary>
/// 校验是否有权限访问
/// </summary>
/// <returns></returns>
private bool CheckIsCheckAuthorization()
{
//获得当前web操作上下文
WebOperationContext woc = WebOperationContext.Current;
//获得当前请求头中的Authorization
var auth = woc.IncomingRequest.Headers[System.Net.HttpRequestHeader.Authorization];
//如果auth为空,或者不等于admin/123,则响应405 MethodNotAllowed
if (string.IsNullOrEmpty(auth) || auth != "admin/123")
{
woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.MethodNotAllowed;
return false;
}
return true; }
然后,在每个接口中,加上权限认证的语句。
/// <summary>
/// 获得所有的用户信息
/// </summary>
/// <returns>json或者xml</returns>
public List<UserInfo> QueryList()
{
if (CheckIsCheckAuthorization())
{
return new List<UserInfo>()
{
new UserInfo() { ID = , Name = "wofly", Age = , Birthday = DateTime.Now, Gender = true },
new UserInfo() { ID = , Name = "san zhang", Age = , Birthday = DateTime.Now, Gender = true },
new UserInfo() { ID = , Name = "wukong sun", Age = , Birthday = DateTime.Now, Gender = false },
new UserInfo() { ID = , Name = "zi ma", Age = , Birthday = DateTime.Now, Gender = true }
};
}
else
{
return null;
}
}
在浏览器中浏览,http://localhost:21074/userInfo/api/users
我们现在使用postman模拟请求,进行验证,如图所示:
这样,就对可以控制对接口的访问,只有有权限的用户才可以访问。但是,问题来了,有那么多的方法,每个方法都要加上那么一句权限的认证,看起来相当的繁琐。这里介绍一种高大上的方式。通过在WebServiceHostFactory中的拦截请求上下文中Authorization可以做到。
public class SecureWebServiceHostFactory : System.ServiceModel.Activation.WebServiceHostFactory
{
public override System.ServiceModel.ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
{
var host= base.CreateServiceHost(constructorString, baseAddresses);
//在这里,拦截验证
host.Authorization.ServiceAuthorizationManager = new MyServiceAuthorizationManager();
return host;
}
protected override System.ServiceModel.ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
var host = base.CreateServiceHost(serviceType, baseAddresses);
//在这里,拦截验证
host.Authorization.ServiceAuthorizationManager = new MyServiceAuthorizationManager();
return host;
}
}
/// <summary>
/// 自定义验证方式
/// </summary>
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
var woc = System.ServiceModel.Web.WebOperationContext.Current;
var auth = woc.IncomingRequest.Headers[HttpRequestHeader.Authorization];
if (string.IsNullOrEmpty(auth) || auth != "admin/123")
{
woc.OutgoingResponse.StatusCode = HttpStatusCode.MethodNotAllowed;
return false;
}
return true;
}
}
然后,在注册路由的时候,做一下修改:
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
//注册路由
System.Web.Routing.RouteTable.Routes.Add(
new System.ServiceModel.Activation.ServiceRoute(
"userInfo",
new SecureWebServiceHostFactory(), typeof(UserService)
));
//注册路由
System.Web.Routing.RouteTable.Routes.Add(new System.ServiceModel.Activation.ServiceRoute(
"imageService", new System.ServiceModel.Activation.WebServiceHostFactory(), typeof(ImageService)));
}
}
上面代码中,红色的部分,就是自定义的认证的类。
现在我们使用postman模拟请求,进行一下验证,


总结
好了,关于restful风格wcf的使用方式,就介绍到这里,希望对你有所帮助。
参考文章:
http://blog.csdn.net/fangxing80/article/details/6263780
Restful风格wcf调用4——权限认证的更多相关文章
- Restful风格wcf调用
文章:Restful风格wcf调用 作者相当于把wcf服务改造成rest风格. Restful风格wcf调用2——增删改查 这篇文章在第一篇的基础上,进行了优化. Restful风格wcf调用3——S ...
- Restful风格wcf调用2——增删改查
写在前面 上篇文章介绍如何将wcf项目,修改成restful风格的接口,并在上面提供了查询的功能,上篇文章中也感谢园友在评论中的提的建议,自己也思考了下,确实是那个道理.在urltemplate中,定 ...
- Restful风格wcf调用3——Stream
写在前面 上篇文章介绍了restful接口的增删改查,本篇文章将介绍,如何通过数据流进行文件的上传及下载操作. 系列文章 Restful风格wcf调用 Restful风格wcf调用2——增删改查 一个 ...
- spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法
spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...
- 以WCF安全认证方式调用通用权限管理系统获取基础信息资料
在B/S开发中,涉及到获取系统基础资料的问题,因为是在不同平台下的开发,采用了WCF方式获取. 下面是一个调用通用权限管理系统(吉日嘎拉)基础信息资料的一个demo供参考 调用原理图: web.con ...
- 构建RESTful风格的WCF服务
构建RESTful风格的WCF服务 RESTful Wcf是一种基于Http协议的服务架构风格. 相较 WCF.WebService 使用 SOAP.WSDL.WS-* 而言,几乎所有的语言和网络平台 ...
- restful风格的API
在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...
- 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】05、Shiro集成
1.POM文件中加入Shiro和fastJSON依赖 <dependency> <groupId>org.apache.shiro</groupId> <ar ...
- shiro太复杂?快来试试这个轻量级权限认证框架!
前言 在java的世界里,有很多优秀的权限认证框架,如Apache Shiro.Spring Security 等等.这些框架背景强大,历史悠久,其生态也比较齐全. 但同时这些框架也并非十分完美,在前 ...
随机推荐
- VULKAN学习笔记-inter教学四篇
--交换链相关函数:实例层vkCreateWin32SurfaceKHRvkDestroySurfaceKHRvkGetPhysicalDeviceSurfaceSurportKHRvkGetPhys ...
- Apache Hive 执行HQL语句报错 ( 10G )
# 故障描述: hive > , ) as uuid, count(distinct(request_body["uuid"])) as count from log_bft ...
- 磁盘IO过高时的处理办法
针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参考,如果磁盘IO确实比较大 ...
- 基元线程同步构造之waithandle中 waitone使用
在使用基元线程同步构造中waithandle中waitone方法的讲解: 调用waithandle的waitone方法阻止当前线程(提前是其状态为Nonsignaled,即红灯),直到当前的 Wait ...
- Scrapy简单入门及实例讲解-转载
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以 ...
- logging的使用
[logging的使用] import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logg ...
- IIS中的MIME类型设置
https://www.cnblogs.com/David-Young/p/5323949.html
- 增加路由ip
C:\Windows\system32>route add ip地址 -P 操作完成!
- clipboard.js复制文字
A-固定内容: <script type="text/javascript" src="script/clipboard.min.js"></ ...
- C++ 静态数据成员和静态成员函数
一 静态数据成员: 1.静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中,因为这样做会引起重复定义这样的错误.即使加上#ifndef ...