如何通过签名技术确保ASP.NET MVC或WEBAPI接口在网络安全方面得到有效保障?
- 内容介绍
- 文章标签
- 相关推荐
本文共计413个文字,预计阅读时间需要2分钟。
目录+签名算法+签名参数+验证签名+ApiController基类+预防Replay Attack+客户端调用+开发App时,App需要跟后台服务进行通信获取或提交数据。如果没有完善的安全机制。
目录
- 签名算法
- 签名的参数
- 验证签名
- ApiController基类
- 预防Replay Attack
- 客户端调用
当我们开发一款App的时候,App需要跟后台服务进行通信获取或者提交数据。如果我们没有完善的安全机制则很容易被别用心的人伪造请求而篡改数据。
所以我们需要使用某种安全机制来保证请求的合法。现在最常用的办法是给每个localhost:8090/api/test/GetUser";
string userId = "A39891D4-6CEF-4538-A562-3A422CA9C17A";
string appId = "100001";
string secretKey = "M/vkPOWXgBa7GnRd73t7j+jsKfbZtb+f";
string rumdon = Guid.NewGuid().ToString();
string time = DateTime.Now.ToString("yyyyMMddHHmmss");
//make signture plain text
var sortDict = new SortedDictionary<string, string>()
{
{"userId",userId }
};
var signPlain = new StringBuilder();
foreach (var keyValue in sortDict)
{
signPlain.AppendFormat("{0}={1}&", keyValue.Key, keyValue.Value);
}
if (signPlain.Length > 1)
{
//remove last &
signPlain.Remove(signPlain.Length - 1, 1);
}
signPlain.Append(time);
signPlain.Append(random);
Console.WriteLine("sign plain:{0}", signPlain.ToString().ToUpper());
//make sign
var sign = Encryption.HmacSHA256(secretKey, signPlain.ToString().ToUpper());
Console.WriteLine("sign:{0}", sign);
string requestUrl = string.Format("{0}?{1}={2}", url, "userId", userId);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Method = "GET";
//add headers
request.Headers.Add("time", time);
request.Headers.Add("appId", appId);
request.Headers.Add("random", random);
request.Headers.Add("sign", sign);
//
//start request
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
var responseStream = response.GetResponseStream();
if (responseStream != null)
{
using (StreamReader reader = new StreamReader(responseStream))
{
var content = reader.ReadToEnd();
Console.WriteLine(content);
}
}
}
}
catch (WebException ex)
{
using (HttpWebResponse response = (HttpWebResponse)ex.Response)
{
var responseStream = response.GetResponseStream();
if (responseStream != null)
{
using (StreamReader reader = new StreamReader(responseStream))
{
var content = reader.ReadToEnd();
Console.WriteLine(content);
}
}
}
}
}
以上就是如何使用签名保证ASP.NET MVC OR WEBAPI的接口安全的详细内容,更多关于用签名保证ASP.NET MVC OR WEBAPI的接口安全的资料请关注易盾网络其它相关文章!
本文共计413个文字,预计阅读时间需要2分钟。
目录+签名算法+签名参数+验证签名+ApiController基类+预防Replay Attack+客户端调用+开发App时,App需要跟后台服务进行通信获取或提交数据。如果没有完善的安全机制。
目录
- 签名算法
- 签名的参数
- 验证签名
- ApiController基类
- 预防Replay Attack
- 客户端调用
当我们开发一款App的时候,App需要跟后台服务进行通信获取或者提交数据。如果我们没有完善的安全机制则很容易被别用心的人伪造请求而篡改数据。
所以我们需要使用某种安全机制来保证请求的合法。现在最常用的办法是给每个localhost:8090/api/test/GetUser";
string userId = "A39891D4-6CEF-4538-A562-3A422CA9C17A";
string appId = "100001";
string secretKey = "M/vkPOWXgBa7GnRd73t7j+jsKfbZtb+f";
string rumdon = Guid.NewGuid().ToString();
string time = DateTime.Now.ToString("yyyyMMddHHmmss");
//make signture plain text
var sortDict = new SortedDictionary<string, string>()
{
{"userId",userId }
};
var signPlain = new StringBuilder();
foreach (var keyValue in sortDict)
{
signPlain.AppendFormat("{0}={1}&", keyValue.Key, keyValue.Value);
}
if (signPlain.Length > 1)
{
//remove last &
signPlain.Remove(signPlain.Length - 1, 1);
}
signPlain.Append(time);
signPlain.Append(random);
Console.WriteLine("sign plain:{0}", signPlain.ToString().ToUpper());
//make sign
var sign = Encryption.HmacSHA256(secretKey, signPlain.ToString().ToUpper());
Console.WriteLine("sign:{0}", sign);
string requestUrl = string.Format("{0}?{1}={2}", url, "userId", userId);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Method = "GET";
//add headers
request.Headers.Add("time", time);
request.Headers.Add("appId", appId);
request.Headers.Add("random", random);
request.Headers.Add("sign", sign);
//
//start request
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
var responseStream = response.GetResponseStream();
if (responseStream != null)
{
using (StreamReader reader = new StreamReader(responseStream))
{
var content = reader.ReadToEnd();
Console.WriteLine(content);
}
}
}
}
catch (WebException ex)
{
using (HttpWebResponse response = (HttpWebResponse)ex.Response)
{
var responseStream = response.GetResponseStream();
if (responseStream != null)
{
using (StreamReader reader = new StreamReader(responseStream))
{
var content = reader.ReadToEnd();
Console.WriteLine(content);
}
}
}
}
}
以上就是如何使用签名保证ASP.NET MVC OR WEBAPI的接口安全的详细内容,更多关于用签名保证ASP.NET MVC OR WEBAPI的接口安全的资料请关注易盾网络其它相关文章!

