写在前面

在前面的三篇文章,已经介绍了restful风格wcf,如何实现增删改查以及文件的上传下载操作。本篇文章将介绍一下,调用restful的权限认证的内容。在调用的接口,为了安全,总会需要对请求进行权限认证的。以防一些非法的操作。

系列文章

Restful风格wcf调用

Restful风格wcf调用2——增删改查

Restful风格wcf调用3——Stream

一个例子

在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——权限认证的更多相关文章

  1. Restful风格wcf调用

    文章:Restful风格wcf调用 作者相当于把wcf服务改造成rest风格. Restful风格wcf调用2——增删改查 这篇文章在第一篇的基础上,进行了优化. Restful风格wcf调用3——S ...

  2. Restful风格wcf调用2——增删改查

    写在前面 上篇文章介绍如何将wcf项目,修改成restful风格的接口,并在上面提供了查询的功能,上篇文章中也感谢园友在评论中的提的建议,自己也思考了下,确实是那个道理.在urltemplate中,定 ...

  3. Restful风格wcf调用3——Stream

    写在前面 上篇文章介绍了restful接口的增删改查,本篇文章将介绍,如何通过数据流进行文件的上传及下载操作. 系列文章 Restful风格wcf调用 Restful风格wcf调用2——增删改查 一个 ...

  4. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  5. 以WCF安全认证方式调用通用权限管理系统获取基础信息资料

    在B/S开发中,涉及到获取系统基础资料的问题,因为是在不同平台下的开发,采用了WCF方式获取. 下面是一个调用通用权限管理系统(吉日嘎拉)基础信息资料的一个demo供参考 调用原理图: web.con ...

  6. 构建RESTful风格的WCF服务

    构建RESTful风格的WCF服务 RESTful Wcf是一种基于Http协议的服务架构风格. 相较 WCF.WebService 使用 SOAP.WSDL.WS-* 而言,几乎所有的语言和网络平台 ...

  7. restful风格的API

    在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...

  8. 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】05、Shiro集成

    1.POM文件中加入Shiro和fastJSON依赖 <dependency> <groupId>org.apache.shiro</groupId> <ar ...

  9. shiro太复杂?快来试试这个轻量级权限认证框架!

    前言 在java的世界里,有很多优秀的权限认证框架,如Apache Shiro.Spring Security 等等.这些框架背景强大,历史悠久,其生态也比较齐全. 但同时这些框架也并非十分完美,在前 ...

随机推荐

  1. Supervisor 进程管理工具

    简介: Supervisor 进程管理工具 一.安装 shell > yum -y install python-pip shell > pip install supervisor # ...

  2. Openning SharePoint - 80 website gives HTTP 404 Error, The webpage cannot be found ! on SharePoint 2013

    ask: I tried to open the SharePoint - 80 throw Browse in IIS, but I get HTTP 404 Error (The webpage ...

  3. 数据类型-Series

    数据类型-Series Series数据类型由一组数据和数据相关的索引组成,键 -> 值 Series数据类型可视为:一维 带标签 数组 Series基本操作类似数组和字典 Series数据类型 ...

  4. java列表转成 int[] 的格式

    java 稀疏矩阵中输入的索引系列和对应的值系列需要用 int[] r_indices = new int[featureIdxList.size()]; 的数据格式. 但是实际中可能实现没法确定 f ...

  5. hive sql 随机抽样

    create table daizk.IOS_matrix_sex asselect *from zhujx.1029_IOS_features_replce_nullwhere sex = 'M'u ...

  6. break、continue、pass介绍

    break.continue.pass介绍 break:跳出当前循环 continue:跳出本次循环,进行下一次循环 pass:什么也不做,占位.

  7. maven配置国内镜像库

    https://www.cnblogs.com/xiongxx/p/6057558.html

  8. scala 2.11.6 卸载 2.12.6 安装

    .yum remove scala .安装scala wget -O scala-.rpm https://downloads.lightbend.com/scala/2.12.6/scala-2.1 ...

  9. selenium -- 鼠标悬停

    针对页面上的二级菜单,需要鼠标悬停才能进行操作. /** * Clicks (without releasing) in the middle of the given element. This i ...

  10. python单线程下实现多个socket并发

    先看服务端的代码 import sys # import socket import time import gevent from gevent import socket from gevent ...