WebApi的安全性及其解决方案

1、前言

WebApi的小白想要了解一些关于WebApi安全性相关的问题,本篇文章是整理一些关于WebApi安全、权限认证的文章。html

2、内容正文

 2.1 不进行验证

 客户端调用:http://api.xxx.com/getInfo?Id=value
如上,这种方式简单粗暴,在浏览器直接输入"http://api.xxx.com/getInfo?Id=value",便可获取到相关的信息了,可是这样的方式会存在很严重的安全性问题,没有进行任何的验证,你们均可以经过这个方法获取到产品列表,致使信息泄露。
那么咱们就会有下面的疑问了:web

  1. 如何验证调用者身份呢?
  2. 如何防止参数被篡改呢?
  3. 如何保证请求的惟一性?
  4. 如何保证请求的惟一性,防止请求被恶意攻击呢?

 2.2 使用TOKEN+签名认证

  原理以下:算法

  • 1.作一个认证服务,提供一个认证的WebApi,用户先访问它获取对应的Tokenapi

  • 2.用户拿着相应的Token以及请求的参数和服务器端提供的签名算法计算出签名后再去访问指定的Api跨域

  • 3.服务器端每次接收到请求就获取对应用户的Token和请求参数,服务器端再次计算签名和客户端签名作对比,若是验证经过则正常访问相应的Api,验证失败则返回具体的失败信息。浏览器

参考连接:安全

 2.3 基于Owin OAuth

 使用OAuthClient Credential Grant受权方式,在服务端经过Authorization Server的一个实现成功发放了Access Token,并在客户端成功拿到了Access Token。在ASP.NET WebApi中启用OAuth的Access Token验证很是简单,只需在相应的Controller或Action加上[Authorize]标记。在ASP.NET中基于Owin OAuth`
参考文章:服务器

  2.4 使用签名来保证ASP.NET MVC 和 WebApi的接口安全

 给每一个http请求添加一个签名,服务端来验证签名的合法性,若是签名合法则执行响应的操做,若是签名非法则直接拒绝请求。
签名算法架构

签名算法通常都使用Hash散列算法,经常使用的有MD5,SHA系列算法。这些算法能够根据不一样的输入,计算出不一样的结果,并且碰撞的几率很低。
签名算法跟加密算法不是一回事。HMAC SHA做为一种更加安全的签名算法,使用一个Key来影响签名的结果。这样一样的输入配合不一样的Key能够得出不一样的签名,更加安全。mvc

签名参数

能够用Http请求的queryString而后加上时间戳还有随机数来做为签名的参数。

参考连接:

  2.5 WebApi 跨域问题解决方案:CORS

 出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。
参考连接:

3、文章推荐

相关文章
相关标签/搜索