C# Nancy框架开发 WebApi 二:接口安全签名认证
2021-03-09 04:28
标签:convert ctc type oid dict int pre tco color 上一章记录了创建一个Nancy框架的WebApi接口,这一章就在这个接口Demo上继续添加签名安全认证,保证接口的数据请求安全 一:创建一个MD5加密类,按照自己的加密方式来写 二:创建接口授权密钥 (这里用配置类来代替,实际可以配置在数据库中) 创建一个缓存操作类。 三:在ApiModule.cs 创建签名获取接口 接下来把项目运行起来 用Postman 工具测试下签名接口 传入正确的密钥 在这里已经拿到了签名,自己的程序应该马上跟着请求数据接口 查询或者写入数据,因为我们设置了签名的120秒有效期。 四:在ApiModule.cs 中创建一个签名认证方法 创建几个类 :请求类和响应类和实体类 这个用户类我用来当查询条件和返回json 在ApiModule.cs中在定义一个初始化返回CommResponse的json方法 五:在正式的数据访问接口中 调用验证签名的方法 六:测试查询接口 1.当输入错误的签名或者当发送的json查询参数被抓取后篡改 都是无法通过服务器签名验证的 (在调用此数据接口时,应先获取sign签名,见上面!!) 2.或者当签名正确,但签名已过设置的2分钟有效期。也是无法正常访问接口的 3.当参数完全正确和签名通过后 则可以拿到数据 接口请求安全大概就到这里,另外除此之外 还可以引用一些 限流框架,限制某个IP地址在规定时间内的访问次数。 C# Nancy框架开发 WebApi 二:接口安全签名认证 标签:convert ctc type oid dict int pre tco color 原文地址:https://www.cnblogs.com/Csharp-jd/p/12762273.htmlusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security;
namespace Security
{
public class MD5
{
// 加密
public static string Encrypt(string str)
{
string result = string.Empty;
string cl = DateTime.Now.Month + str + DateTime.Now.Day;
var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(cl));
data.Reverse();
for (int i = 0; i )
{
result += data[i].ToString("X");
}
return result;
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace NancyWebApiDemo.Security
{
public class LicenceConfig
{
private static Dictionarystring, string> Licences = new Dictionarystring, string>();
public LicenceConfig()
{
if (Licences.Count == 0)
{
Licences.Add("%%8795456$#@1198456451)(##@", "userOne"); //用户1的Api授权密钥
Licences.Add("$984351321515##&*135131133#", "userTwo"); //用户2的Api授权密钥
}
}
//获取拥有密钥系统用户
public string GetLicencesUser(string Key)
{
return Licences[Key];
}
//检索密钥是否存在
public bool CheckExistLicence(string Key)
{
return Licences.ContainsKey(Key);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Caching;
namespace NancyWebApiDemo.Common
{
public class CacheHelper
{
///
//获取Api签名
Post["/getSign"] = p =>
{
CommResponseobject> response = new CommResponseobject>();
response.Code = CodeConfig.CodeFailed;
try
{
string key = Request.Query["key"]; //获取
string data = Request.Query["data"];//请求的json数据
string type = Request.Query["type"]; //请求动作
bool flag = new Security.LicenceConfig().CheckExistLicence(key);
if (flag)
{
//创建签名
switch (type)
{
case "Query":
response.Message = "请求成功";
response.Code = CodeConfig.CodeSuccess;
response.Data = Security.MD5.Encrypt(type + key + data);
break;
case "Write":
response.Message = "请求成功";
response.Code = CodeConfig.CodeSuccess;
response.Data = Security.MD5.Encrypt(type + key + data);
break;
default:
response.Message = "接口操作类型错误";
break;
}
//获取签名成功
if (response.Code == CodeConfig.CodeSuccess)
{
//设置一个签名过期时间:120秒
CacheHelper.SetCache(response.Data as string, response.Data, 120);
}
}
else
{
response.Message = "接口授权密钥不存在";
}
}
catch (Exception ex)
{
response.Message = ex.Message;
}
return Response.AsText(JsonHelper.ObjectConvertJson(response), "application/json");
};
///
///
///
///
///
//查询方法
Post["queryUser"] = p =>
{
string param = Request.Query["param"];
string json = Request.Query["json"];
string result = string.Empty;
CommRequest
文章标题:C# Nancy框架开发 WebApi 二:接口安全签名认证
文章链接:http://soscw.com/index.php/essay/62126.html