WebApi接口安全之用户认证防篡改数字签名(Data Sign)机制
WebApi接口安全之用户认证防篡改数字签名(Data Sign)机制
一、用户认证 1.1 ApiKey-公钥认证 ApiKey给应用程序开发者分配的公钥(用户身份证,唯一标识, 明文传输), 提供给:平台的合作伙伴、供应商、客户等。 比如我们的WebApi服务器,要开放一个接口给合作伙伴使用,分配一个Apikey及SecretKey: 公钥(ApiKey):666888 私钥(SecretKey):6A02D19B-0397-497E-87EF-B4C826366666 有很多平台把ApiKey称作为partner(合作伙伴),接口参数用partner传递apikey。 当用户访问WebApi接口时,首先判断ApiKey是否存在。 1.2 SecretKey-私钥认证 用于数字签名(data sign),MD5加密。 私钥的特点:WebAPI接口不传输参数,公钥和私钥是1对1,一个公钥配对一个私钥。 二、接口参数防篡改、数字签名(Data Sign)机制 WebApi接口的数字签名用于接口数据安全以及用户认证防篡改。 防篡改,顾名思义就是防止有人恶意篡改请求数据以达到恶意攻击的目的。 2.1 基本原理 将请求的数据加上ApiKey(公钥)、SecreKey(私钥),按规则组织成一个字符串,获取对应的MD5摘要,然后将该摘要及公钥同时作为请求的参数一起传递(私钥禁止传递)给WebApi服务器。 2.2 签名与验签流程 2.2.1 客户端数字签名(MD5数据加密) 假设客户端要查询【订单】资料详情,提交的数据如下: JSON Code: { "partner": "666888", "orderNo": "1234567" } //来源:C/S框架网 | www.csframework.com | QQ:23404761 partner: 伙伴编号,apikey orderNo:订单编号 http://www.server.com/getOrder.aspx?partner=公钥&orderNo=业务数据&sign=MD5签名 URL实际内容: http://www.server.com/getOrder.aspx?partner=666888&orderNo=1234567&sign=70611fd05dc0d39f6b4b470fc25218eb MD5, 数据Sign算法: MD5(partner+orderNo+私钥), MD5三个参数的值。 MD5(66688812345676A02D19B-0397-497E-87EF-B4C826366666) MD5结果:70611fd05dc0d39f6b4b470fc25218eb 经data sign签名后,提交数据到WebApi接口的JSON: JSON Code: { "partner": "666888", "orderNo": "1234567" "sign":"70611fd05dc0d39f6b4b470fc25218eb" } //来源:C/S框架网 | www.csframework.com | QQ:23404761 2.2.2 服务端签名校验(Sign验签) 当WebApi服务器接收到客户端的请求(Request),首先通过请求的partner的值获取对应的私钥,然后通过上述签名算法计算MD5值,对比请求的sign参数与计算结果是否一致,若不一致,数据被篡改,或非法调用接口。 接收到的Request数据如下: JSON Code: { "partner": "666888", "orderNo": "1234567" "sign":"70611fd05dc0d39f6b4b470fc25218eb" } 通过partner的值获取对应的私钥: partner=666888, 从ApiKey缓存管理器得到私钥(SecretKey)的值: 6A02D19B-0397-497E-87EF-B4C826366666 计算签名,得出md5的值保存到sign变量中: string sign=MD5(request.partner+request.orderNo+secretKey) 验签: C# Code: if (sign==request.sign) { //验签成功!执行下一个流程。 }else { //验签失败!返回操作结果。 } CSFramework.WebApi后台验签: C# Code: if (SignEncryptMode.MD5 == mode) dataEncrypt = CryptoHelper.ToMD5(apikey + data + secret + timestamp); //签名不同,抛出异常 if (sign != dataEncrypt) throw new ResponseException(ErrorCodes.DataSignFormatInvalide, ErrorCodes.DataSignFormatInvalide_Msg); //来源:C/S框架网 | www.csframework.com | QQ:23404761 ASP.NET WebApi快速开发框架|APP后端框架-标准版V1.0 适用开发:快速搭建APP、B/S、C/S、微信小程序、公众号、Web站点等后端应用服务程序。 运行平台:Windows + .NET Framework 4.5 开发工具:Visual Studio 2015+,C#语言 数据库:Microsoft SQLServer 2008R2+(支持多数据库:Oracle/MySql) CSFramework.WebApi框架:http://www.csframework.com/cs-framework-webapi-1.0.htm 扫一扫加微信
参考文档:
C#.NET史上最全字符串加密/解密/数字签名工具(CryptoHelper.cs) 开发框架多账套连接表tb_Dataset以及分配用户的账套权限 C/S客户端Winform窗体调用WebApi接口(C# 实例) LianLianPay连连支付数字签名验签工具C#源码 客户端使用HTTPGET请求调用WebApi指定FromUri参数对象模型的接口 WebApi开发框架增加Timestamp参数提升系统安全级别 CSFramework WebApi服务端框架开发微信支付接口成功案例 WebApi接口安全机制:API接口限流防止恶意访问 ThrottlingHandler消息处理机制 CSFramework.WebApi后端服务器框架:客户端调用WebApi接口方式(签名+Token令牌) 基于Web前端用户调用CSFramework.WebApi服务端登录登出接口实现 CSFramework.WebApi开发框架模拟Web用户端登录、调用WebApi接口增删改查数据 WebApi后端框架Token身份认证,Api接口Token验证 WebApi框架数据安全、信息安全与接口安全六大机制 数字签名(Data Sign)+存取令牌(Access Token)双重安全请求WebApi接口 Web端使用VUE调用WebApi接口实现用户登录及采用Token方式数据交互
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |