非对称认证方式 可以用在 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 = 33;
                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(1970, 01, 01, 0, 0, 0, 0, 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(1970, 01, 01, 0, 0, 0, 0, DateTimeKind.Utc); TimeSpan ts = DateTime.UtcNow - epochStart;
                            if (Convert.ToUInt64(ts.TotalSeconds) - stamp <= 3) return await base.SendAsync(request, cancellationToken);
                        }
                    }
                }
                return request.CreateResponse(HttpStatusCode.Unauthorized);
            }
        }

时间: 2024-11-08 03:51:58

非对称认证方式 可以用在 asp.net webapi 的安全机制里面的相关文章

细说Asp.Net WebAPI消息处理管道

我们在开发完Asp.Net WebAPI程序后,可以使用WebHost寄宿方式或者SelfHost寄宿方式来部署Asp.Net WebAPI.所谓WebHost寄宿就是通过Asp.Net来实现:所谓SelfHost就是可以通过控制台.WinForm.WPF等方式寄宿.下面我们通过简单的例子来看看WebHost方式和SelfHost方式. 该Demo中包含一个类库项目.一个控制台项目以及一个空的WebForm项目.其中类库项目有一个继承自ApiController的名为HomeController

asp.net core 自定义认证方式--请求头认证

原文:asp.net core 自定义认证方式--请求头认证 asp.net core 自定义认证方式--请求头认证 Intro 最近开始真正的实践了一些网关的东西,最近写几篇文章分享一下我的实践以及遇到的问题. 本文主要介绍网关后面的服务如何进行认证. 解决思路 网关可以做一部分的认证和授权,服务内部有时候也会需要用户的信息,这时该怎么办呢,我们使用的是 JWT 认证,有一个 identity server去颁发,验证 token,一种简单方式可以把 token 直接往后传,传递给后面的具体某

SSH 协议原理、组成、认证方式和过程[转]

https://www.jianshu.com/p/8e5b7aea52b5 概述 SSH是(Secure SHell protocol) 的简写,安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议. OpenSSH 是SSH (Secure SHell)协议的免费开源实现.SSH协议族可以用来进行远程控制,或在计算机之间传送文件.而实现此功能的传统方式,如telnet(终端仿真协议). rcp ftp. rlogin.rsh都是极为不安全的,并且会使用明文传送密

修改SQL Server登陆认证方式

在安装Sqlserver的过程中,默认情况下是Windows认证方式,安装之后若想修改认证方式,则需要按如下步骤操作. 1.登陆Sql Server Management Studio,右击数据库引擎,点击属性: 2.在服务器属性对话框中,点击“安全性”选项,并在右边选择“SQL Server和Windows混合身份验证模式”,并点击确定. 3.在Management Studio的对象资源管理器中,逐一点开服务器引擎->安全性->登录名. 4.如果不想用sa,或者没有sa,则在登录名上右击选

ios开发使用Basic Auth 认证方式

我们app的开发通常有2种认证方式   一种是Basic Auth,一种是OAuth:现在普遍还是使用OAuth的多,而使用Basic Auth认证的少,正好呢我今天给大家介绍的就是使用的比较少的Badic Auth认证方式,这种认证方式开发和调试简单, 没有复杂的页面跳转逻辑和交互过程,更利于发起方控制.然而缺点就是安全性更低,不过也没事,我们可以使用https安全加密协议,这样才更安全. 我使用的是AFNetworking发送的网络请求,因此我们用Basic Auth认证方式就不能再使用AF

修改CAS源码是的基于DB的认证方式配置更灵活

最近在做CAS配置的时候,遇到了数据源不提供密码等数据的情况下,怎样实现密码输入认证呢? 第一步:新建Java项目,根据假面算法生成CAS加密工具 出于保密需要不提供自定义的加密工具,在您的实际项目中,你可采用cas默认的加密方式比如md5. 第二步:修改CAS源码 找到cas-server-support-jdbc子模块找到包路径cas-server-support-jdbc\src\main\java\org\jasig\cas\adaptors\jdbc\,在复制一份QueryDataba

oracle 认证方式

Oracle登录的时候有两种认证方式,一种是“操作系统认证”,一种是“口令文件认证”.1.当采取操作系统认证的时候,在本地用任何用户都可以以sysdba登陆:(默认方式)2.当采取口令文件认证的时候,就不是任何用户都可以用sysdba登陆了,这个时候必须输入正确的用户名口令才可以(其实这种方法才是安全的)3.至于你本地的到底采用哪种认证方式,是可以通过parameter来设置的. ORACLE数据库通过sqlnet.ora文件中的参数sqlnet.authentication_services,

基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]

基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服务器并与客户端的cookie中的jsessionid关联起来,这样客户端再次访问我们就可以识别用户身份了. 但是对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好.所以一般情况我们都是需要客户端提供一个key(每个

Java 实现 SSH 协议的客户端登录认证方式--转载

背景 在开篇之前,让我们先对 SSH 协议有个宏观的大致了解,这样更有利于我们对本文的加深了解.首先要提到的就是计算机网络协议,所谓计算机网络协议,简单的说就是定义了一套标准和规则,使得不同计算机之间能够进行正常的网络通信,不至于出现在一台机器上发出的指令到另一台机器上成了不可认的乱码,SSH 就是众多协议的其中之一.经典的七层 OSI 模型(Open System Interconnection Reference Model)出现后,大大地解决了网络互联的兼容性问题,它将网络划分成服务.接口