WebApi接口安全之用户认证防篡改数字签名(Data Sign)机制
作者:作者不详  发布日期:2020/11/24 11:44:50
  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:订单编号



提交到WebApi接口的URL格式:


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)


ASP.NET WebApi快速开发框架|MVC框架|APP微信小程序后端框架|服务端框架-标准版V1.0





C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

上一篇 下一篇