非对称认证方式 可以用在 asp.net webapi 的安全机制里面
//Client端调用
static void Main(string[] args)
{
string publicKey = "DpLMCOihcYI2i6DaMbso9Dzo1miy70G/3+UibTttjLSiJ3cco";
publicKey += "Kaen3Fecywdf7DrkcfkG3KjeMbZ6djBihD/4A==";
string privateKey = "W9cE42m+fmBXXvTpYDa2CXIme7DQmk3FcwX0zqR7fmj";
privateKey += "D6PHHliwdtRb5cOUaxpPyh+3C6Y5Z34uGb2DWD/Awiw==";
using (HttpClient client = new HttpClient())
{ // Step 2-a
int counter = ;
Uri uri = new Uri("http://localhost:54400/api/employees/12345");
client.DefaultRequestHeaders.Add("X-PSK", publicKey); client.DefaultRequestHeaders.Add("X-Counter", String.Format("{0}", counter));
// Step 2-b
DateTime epochStart = new DateTime(, , , , , , , DateTimeKind.Utc);
TimeSpan ts = DateTime.UtcNow - epochStart;
string stamp = Convert.ToUInt64(ts.TotalSeconds).ToString();
client.DefaultRequestHeaders.Add("X-Stamp", stamp);
string data = String.Format("{0}{1}{2}{3}{4}", publicKey, counter, stamp, uri.ToString(), "GET");
// Step 2-c byte[] signature = Encoding.UTF8.GetBytes(data); using (HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64String(privateKey))) { byte[] signatureBytes = hmac.ComputeHash(signature); client.DefaultRequestHeaders.Add("X-Signature", Convert.ToBase64String(signatureBytes)); }
var httpMessage = client.GetAsync(uri).Result; if (httpMessage.IsSuccessStatusCode) Console.WriteLine(httpMessage.Content.ReadAsStringAsync().Result);
}
} //Server端认真
public class PskHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
string privateKey = "W9cE42m+fmBXXvTpYDa2CXIme7DQmk3FcwX0zqR7fmj"; privateKey += "D6PHHliwdtRb5cOUaxpPyh+3C6Y5Z34uGb2DWD/Awiw==";
var headers = request.Headers;
if (headers.Contains("X-PSK") && headers.Contains("X-Counter") && headers.Contains("X-Stamp") && headers.Contains("X-Signature"))
{
string publicKey = headers.GetValues("X-PSK").First(); string counter = headers.GetValues("X-Counter").First(); ulong stamp = Convert.ToUInt64(headers.GetValues("X-Stamp").First()); string incomingSignature = headers.GetValues("X-Signature").First();
string data = String.Format("{0}{1}{2}{3}{4}", publicKey, counter, stamp, request.RequestUri.ToString(), request.Method.Method);
byte[] signature = Encoding.UTF8.GetBytes(data); using (HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64String(privateKey)))
{
byte[] signatureBytes = hmac.ComputeHash(signature); if (incomingSignature.Equals(Convert.ToBase64String(signatureBytes), StringComparison.Ordinal))
{
DateTime epochStart = new DateTime(, , , , , , , DateTimeKind.Utc); TimeSpan ts = DateTime.UtcNow - epochStart;
if (Convert.ToUInt64(ts.TotalSeconds) - stamp <= ) return await base.SendAsync(request, cancellationToken);
}
}
}
return request.CreateResponse(HttpStatusCode.Unauthorized);
}
}

非对称认证方式 可以用在 asp.net webapi 的安全机制里面的更多相关文章
- 细说Asp.Net WebAPI消息处理管道
		我们在开发完Asp.Net WebAPI程序后,可以使用WebHost寄宿方式或者SelfHost寄宿方式来部署Asp.Net WebAPI.所谓WebHost寄宿就是通过Asp.Net来实现:所谓S ... 
- asp.net core 自定义认证方式--请求头认证
		asp.net core 自定义认证方式--请求头认证 Intro 最近开始真正的实践了一些网关的东西,最近写几篇文章分享一下我的实践以及遇到的问题. 本文主要介绍网关后面的服务如何进行认证. 解决思 ... 
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证
		一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ... 
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证(发布版)
		一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ... 
- 关于RESTFUL API 安全认证方式的一些总结
		常用认证方式 在之前的文章REST API 安全设计指南与使用 AngularJS & NodeJS 实现基于 token 的认证应用两篇文章中,[译]web权限验证方法说明中也详细介绍,一般 ... 
- 阿里云API网关(11)API的三种安全认证方式
		网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ... 
- Git认证方式https和ssh的原理及比较
		常见的代码托管平台GitHub.GitLab和BitBucket等,基本都会使用Git作为版本控制工具.平台一般都提供两种认证方式https和ssh.了解该过程能够更加自由的配置和使用,本文就来简单聊 ... 
- ASP.NET MVC - 安全、身份认证、角色授权和ASP.NET Identity
		ASP.NET MVC - 安全.身份认证.角色授权和ASP.NET Identity ASP.NET MVC内置的认证特性 AuthorizeAttribute特性(System.Web.Mvc)( ... 
- ASP.NET WebApi 基于OAuth2.0实现Token签名认证
		一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将是我们需要思考的问题.为了保护我们的WebApi数 ... 
随机推荐
- VS2013控制台一闪而过问题解决方法
			1.修改项目配置,右键点击项目: 2.在右键菜单中选择属性,然后在弹出的对话框左侧列表中中选择 “配置属性”-->“链接器”-->“系统”然后在右侧的列表中,在第一项”子系统“的值中选择” ... 
- 《OD学hadoop》第一周0626
			一.磁盘管理 Linux添加新硬盘.分区.格式化.自动挂载 http://lxsym.blog.51cto.com/1364623/321643 给Linux系统新增加一块硬盘 http://www. ... 
- 【Todo】字符串相关的各种算法,以及用到的各种数据结构,包括前缀树后缀树等各种树
			另开一文分析字符串相关的各种算法,以及用到的各种数据结构,包括前缀树后缀树等各种树. 先来一个汇总, 算法: 本文中提到的字符串匹配算法有:KMP, BM, Horspool, Sunday, BF, ... 
- hdu 4856  Tunnels (bfs + 状压dp)
			题目链接 The input contains mutiple testcases. Please process till EOF.For each testcase, the first line ... 
- 今天maven install时碰到的两个问题(堆溢出和编译错误)
			问题1.maven install时出现,日志如下: 系统资源不足.有关详细信息,请参阅以下堆栈追踪. java.lang.OutOfMemoryError: Java heap space at c ... 
- laravel/laravel和laravel/framework有何区别?
			在安装laravel的时候,我们一般是download github上的laravel/laravel,随后执行composer install,在这个过程中,你会发现composer其中的一项工作是 ... 
- 《Qt 实战一二三》
			简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ... 
- 51nod1244 莫比乌斯函数之和
			推公式.f[n]=1-∑f[n/i](i=2...n).然后递归+记忆化搜索.yyl说这叫杜教筛?时间复杂度貌似是O(n 2/3)的? #include<cstdio> #include& ... 
- Qt 控制watchdog app hacking
			/************************************************************************** * Qt 控制watchdog app hack ... 
- 【转】XCode环境变量及路径设置 -- 待学习
			原文网址:http://www.cnblogs.com/oc-bowen/p/5140541.html 一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自 ... 
