摘要

对第三方开放的接口,处于安全的考虑需要对其进行安全认证,是否是合法的请求。目前在项目中也遇到这种情况,提供的接口因为涉及到客户铭感数据,所以在调用的时候,不能直接暴露,需要有一个认证的机制。所以对接口安全认证的方式,进行了调研,这里提供一个自定义安全认证的Filter例子。

一个例子

在mvc中,如果需要对某个页面如果用户不登录则无法访问,我们的做法可能是校验session或者使用特性[Authorize]

    [Authorize]public class UserController : Controller{// GET: Userpublic ActionResult Index(){//if (Session["user"]==null)//{//    return RedirectToAction("login");//}return View();}}

在mvc中,这种认证方式基于windows或者form认证。但在提供web api给移动端app调用的时候,windows或者form认证就不太合适了。但我们可以自定义一种filter对当前访问的用户进行认证。

自定义Filter特性

    /// <summary>/// 基于http basic认证/// </summary>public class CustomerBasicAuthrizeAttribute : AuthorizationFilterAttribute{//重写OnAuthorization 方法public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext){//如果action带有允许匿名访问的特性,则直接返回,不再进行安全认证if (actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any()){return;}if (actionContext.Request.Headers.Authorization != null){if (actionContext.Request.Headers.Authorization.Scheme != "Basic"){actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized,new HttpException("no token"));}else{string base64Para = actionContext.Request.Headers.Authorization.Parameter;//解码base64字符串byte[] buffer = Convert.FromBase64String(base64Para);string decodeBase64 = Encoding.UTF8.GetString(buffer);if (!string.IsNullOrEmpty(decodeBase64)){string[] paras = decodeBase64.Split(':');if (paras.Length > 0){string userName = paras[0];string pwd = paras[1];if (userName == "wolfy" && pwd == "123456"){}else{actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized,new HttpException("userName or pwd is error."));}}else{actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized,new HttpException("no token"));}}else{actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized,new HttpException("no token"));}}}else{actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized,new HttpException("no Authorization header"));}base.OnAuthorization(actionContext);}}

使用postman测试

认证成功

第三方调用的时候,可以为其生成一对appname和appsecret放在供客户端进行使用。客户端使用的时候在请求头的Authorization中添加base64字符串就可以了。对于basic对应的值,是base64字符串,如果感觉还不安全可以尝试使用SSL方式。

SSL协议详解

[Asp.Net web api]基于自定义Filter的安全认证相关推荐

  1. 在ASP.NET Web API中使用OData的Action和Function

    本篇体验OData的Action和Function功能.上下文信息参考"ASP.NET Web API基于OData的增删改查,以及处理实体间关系".在本文之前,我存在的疑惑包括: ...

  2. ASP.NET Web API 应用教程(一) ——数据流使用

    相信已经有很多文章来介绍ASP.Net Web API 技术,本系列文章主要介绍如何使用数据流,HTTPS,以及可扩展的Web API 方面的技术,系列文章主要有三篇内容. 主要内容如下: I  数据 ...

  3. ASP.NET Web API入门介绍(一)

    随着项目的复杂度越来越高,各种第三方系统的数据交互也越来越频繁,不可避免的就要用到Web API接口,这里Web API是一个比较宽泛的概念.本文提到Web API特指ASP.NET Web API. ...

  4. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...

  5. 【转】在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证

    基于令牌的身份验证 基于令牌的身份验证主要区别于以前常用的基于cookie的身份验证,基于cookie的身份验证在B/S架构中使用比较多,但是在Web Api中因其特殊性,基于cookie的身份验证已 ...

  6. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程

    最近发现web api很火,园内也有各种大神已经在研究,本人在asp.net官网上看到一个系列教程,原文地址:http://bitoftech.net/2013/11/25/detailed-tuto ...

  7. 《ASP.NET Web API 2框架揭秘》

    <ASP.NET Web API 2框架揭秘> 基本信息 作者: 蒋金楠 出版社:电子工业出版社 ISBN:9787121235368 上架时间:2014-7-5 出版日期:2014 年7 ...

  8. 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理

    在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...

  9. ASP NET Web API 2框架揭秘

    ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著   ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...

  10. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NE ...

最新文章

  1. 服务器php将视频转为m3u8,php应用ffmpeg对mp4文件转换并生成m3u8视频流文件
  2. 虚拟机无法访问主机mysql_解决虚拟机linux端mysql数据库无法远程访问
  3. Weblogic 错误 BEA-000403 BEA-000438解决办法
  4. 门面设计模式php,php设计模式-门面模式(Facade Pattern)
  5. 满足条件的数累加(信息学奥赛一本通-T1066)
  6. CSS3 calc() 函数,height: calc(100% - 70px);
  7. linux 高级文件IO
  8. AndroidDeveloper Weekly No.3
  9. 为何觉得静态ip比动态ip的网速更快
  10. 贴片晶振的脚位方向如何区分
  11. Vue 项目使用 又拍云 云存储服务
  12. 要跳过磁盘检查,请在5秒内按任意键如何解决
  13. 学生上课签到系统开发总结
  14. python模拟登录qq邮箱
  15. 大型网站技术架构(一)--大型网站架构演化
  16. 宝,别踩我蜜罐了,可好?
  17. 震惊!!!一个关于c语言图形化界面编程的小游戏
  18. LeetCode编程练习题
  19. Zabbix5系列-监控Windows主机 (三)-CPU温度监控
  20. 2023年认证杯C题超详细思路配有实现代码

热门文章

  1. Atitit 常用二维码对比(QR、PDF417、DM、汉信码 Aztec code maxicode
  2. Atitti.dw cc 2015 绿色版本安装总结
  3. Atitit. js mvc 总结(2)----angular 跟 Knockout o99 最佳实践
  4. paip.提升安全性----用户资金账户模块平账功能
  5. paip.提升用户体验---搜索功能设计
  6. 转: Rust中的Pin详解 【Rust语言中文社区】
  7. (转)详解Windows Hash
  8. 索纳塔9 2.4L旗舰版 一手原车 诚意出售
  9. 【优化求解】基于matlab改进的粒子群算法求解混合储能系统容量优化问题【含Matlab源码 1823期】
  10. 毕设题目:Matlab优化调度