一、前言
WebApi
的小白想要了解一些关于WebApi
安全性相关的问题,本篇文章是整理一些关于WebApi
安全、权限认证的文章。
二、内容正文
2.1 不进行验证
客户端调用:http://api.xxx.com/getInfo?Id=value
如上,这种方式简单粗暴,在浏览器直接输入"http://api.xxx.com/getInfo?Id=value",即可获取到相关的信息了,但是这样的方式会存在很严重的安全性问题,没有进行任何的验证,大家都可以通过这个方法获取到产品列表,导致信息泄露。
那么我们就会有下面的疑问了:
- 如何验证调用者身份呢?
- 如何防止参数被篡改呢?
- 如何保证请求的唯一性?
- 如何保证请求的唯一性,防止请求被恶意攻击呢?
2.2 使用TOKEN+签名认证
原理如下:
-
1.做一个认证服务,提供一个认证的
WebApi
,用户先访问它获取对应的Token
-
2.用户拿着相应的
Token
以及请求的参数和服务器端提供的签名算法计算出签名后再去访问指定的Api -
3.服务器端每次接收到请求就获取对应用户的
Token
和请求参数,服务器端再次计算签名和客户端签名做对比,如果验证通过则正常访问相应的Api,验证失败则返回具体的失败信息。
参考链接:
2.3 基于Owin OAuth
使用OAuth
的Client 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可以得出不同的签名,更加安全。
签名参数
可以用Http请求的
queryString
然后加上时间戳
还有随机数
来作为签名的参数。
参考链接:
2.5 WebApi 跨域问题解决方案:CORS
出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。
参考链接:
三、文章推荐
- Asp.net Web API安全认证解决方案:JSON Web Token(JWT)http://blog.zhishile.com/Article/Show/5df2a392-8a8c-4e12-8a05-774f47a4570a
- 基于token的多平台身份认证架构设计 http://www.cnblogs.com/beer/p/6029861.html