ASP.NET WebApi 基于JWT实现Token签名认证

一、前言

开发提供数据的WebApi服务,最重要的是数据的安全性。那么对于我们来说,如何确保数据的安全将会是需要思考的问题。在ASP.NET WebService服务中可以通过SoapHead验证机制来实现,那么在ASP.NET WebApi中我们应该如何保证我们的接口安全呢?这次给大家分享一种基于JWT方式解决方案。

1.1、本次分享包含知识点如下:

1)、对ASP.NET WebApi 如何实现身份认证进一步了解和学习。

2)、掌握.NET中的JWT组件的基本运用。

3)、.NET开源轻量级HTTP网络请求框架RestSharp在ASP.NET WebApi中的基本运用。

4)、ASP.NET WebAPI自定义HTTP参数绑定支持多参数POST请求。(强烈推荐)

5)、ASP.NET WebApi 基于JWT实现Token签名认证。

1.2、一句话总结:今天我们要解决的问题?

ASP.NET WebAPI如何保证客户端以安全的方式进行访问。

废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运

二、概念名称含义介绍

2.1、什么是JWT?

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

2.2、JWT长什么样?

JWT是由三段信息构成的,将这三段信息文本用.链接一起就构成了Jwt字符串。

 

JWT结构体

2.3、JWT的构成

第一部分我们称它为头部(header),第二部分我们称其为载荷(payload,),第三部分是签证(signature).

Header

header典型的由两部分组成:token的类型(“JWT”)和算法名称(比如:HMAC SHA256或者RSA等等)。

例如:

   }

  JWT结构Header

 

然后,用Base64对这个JSON编码就得到JWT的第一部分

Payload

JWT的第二部分是payload,它包含声明(要求)。声明是关于实体(通常是用户)和其他数据的声明。

声明有三种类型: registered, public 和 private。

Registered claims : 这里有一组预定义的声明,它们不是强制的,但是推荐。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。

Public claims : 可以随意定义。

Private claims : 用于在同意使用它们的各方之间共享信息,并且不是注册的或公开的声明。

下面是一个例子:

  }

对payload进行Base64编码就得到JWT的第二部分

注意,不要在JWT的payload或header中放置敏感信息,除非它们是加密的。

Signature

为了得到签名部分,你必须有编码过的header、编码过的payload、一个秘钥,签名算法是header中指定的那个,然对它们签名即可。例如:HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)签名是用于验证消息在传递过程中有没有被更改,并且,对于使用私钥签名的token,它还可以验证JWT的发送方是否为它所称的发送方。 

三、WebApi基于JWT实现Token签名认证原理讲解

3.1、ASP.NET WebAPI如何保证客户端以安全的方式进行访问

ASP.NET WebAPI 如何保证接口的安全?先说一下何为安全?我们需要解决什么问题?

调用安全:由于WebService是暴露在公网中,怎么防止非法用户调用我们的服务呢?因此我们需要解决:认证问题。

数据传输安全:由于我们的数据都是通过明文在网络上进行传输很容易被窃取到。因此我们需要解决:数据被窃取问题。

以上解释仅仅是阿笨狭义的理解;网络安全还包括很多方面,会话劫持、会话被篡改等等。

总结:我们可以通过Token验证机制来保证WebAPI 的认证使用;可以通过HTTPS来保证数据的加密,防止网络侦听!

 

基于JWT实现Token签名认证原理图

 

3.2、基于JWT实现Token签名认证基本思路如下:

基本流程上是这样的:

●用户使用用户名密码来请求服务器。

●服务器进行验证用户的信息。

●服务器通过验证发送给用户一个token。

●客户端存储token,并在每次请求时附送上这个token值。

●服务端验证token值,并返回数据。

四、实战源码在线实例演示

 

登录

 

 

基于JWT实现Token签名认证

 

 

五、总结

本次分享课程《ASP.NET WebApi 基于JWT实现Token签名认证》阿笨给大家分享了在写开放的WebAPI接口时是如何保证数据的安全性的?在此总结一下需要注意的几点事项:

一、JTW注意事项: 

1)、不应该在jwt的payload部分存放敏感信息,因为该部分是客户端可解密的部分。

2)、保护好secret私钥,该私钥非常重要。

3)、如果可以,请使用https协议。

注意:secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。

二、JWT具备的优势特点如下:

1)、安全性比较高,加上密匙加密而且支持多种算法。

2)、携带的信息是自定义的,而且可以做到验证token是否过期。

3)、验证信息可以由前端保存,后端不需要为保存token消耗内存。

俗话说的好:师父领进门修行在个人,希望大家在学习的道路上一直坚持下去!

转载于:https://www.cnblogs.com/zwalter/p/9625866.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cage验证码生成器快速上手

Cage小巧,好用。这里在官方基础例子基础上做了扩展: 12345678910111213141516171819202122232425262728293031323334package com.lavasoft.ntv.web.common; import com.github.cage.IGenerator; import java.util.Random; /*** 验证码生成器 * * author …

马云:未来无工可打,人工智能发展红利还在10年以后

马云虽然已经退出阿里巴巴,但作为一代商业传奇他所说的话,还十分据有影响力。关于人工智能,马云提出过不少预测性言论。未来10年,房子、车子都不在值钱。面对人工智能时代,未来传统行业大部分会消失。更有厉害的&#…

如何更改您的iPhone铃声

The problem with having a popular phone like an iPhone is that, by default, everyone has the same ringtone. If you want to give your iPhone a more personal sound, here’s how to do it. 拥有像iPhone这样的流行手机的问题是,默认情况下,每个…

【ACM-ICPC 2018 沈阳赛区网络预赛 I】Lattice's basics in digital electronics

【链接】 我是链接,点我呀:) 【题意】 【题解】 每个单词的前缀都不同。 不能更明示了... 裸的字典树。 模拟一下。输出一下就ojbk了。 【代码】 #include <bits/stdc.h> #define LL long long #define rep1(i,a,b) for (int i a;i < b;i) #define rep2(i,a,b) for…

扒一扒那些年我们遇到的奇葩代码

前言 本文首发于公众号【一名打字员】 在工作中&#xff0c;我们通常会遇到传说中的“祖传”代码&#xff0c;有些是否让我们感到哭笑不得&#xff0c;今天本猿整理一下自己以及网络上出现过的奇葩代码。来源于互联网的均会标明出处。 TOP1 当仁不让的当然是传说中的“睡排序”…

相对湿度与绝对湿度_如何监视家里的湿度水平

相对湿度与绝对湿度High humidity is no fun, and neither is low humidity—you want a good balance between the two. Here’s how to monitor the humidity in your house so that you can make the proper adjustments. 高湿度无济于事&#xff0c;低湿度也无济于事-您希望…

基于redis实现的扣减库存

2019独角兽企业重金招聘Python工程师标准>>> 在日常开发中有很多地方都有类似扣减库存的操作&#xff0c;比如电商系统中的商品库存&#xff0c;抽奖系统中的奖品库存等。 解决方案 使用mysql数据库&#xff0c;使用一个字段来存储库存&#xff0c;每次扣减库存去更…

JavaScript 使用random()生成随机数

function myFunction() { var a Math.floor(Math.random()*10);return a;} // 记住 Math.random() 永远不会返回 1。同时因为我们是在用 Math.floor() 向下取整&#xff0c;所以最终我们获得的结果不可能有 20。这确保了我们获得了一个在0到19之间的整数。 把操作连缀起来&…

plex 乱码_Plex Media Center现在支持播客

plex 乱码Plex is adding beta support for podcasts to iOS, Android, Roku, and Plex Web today, alongside a custom home screen for mobile users. Plex现在为iOS&#xff0c;Android&#xff0c;Roku和Plex Web的播客添加了beta支持&#xff0c;同时为移动用户提供了自定…

Add a All Document Folder

本文出自Simmy的个人blog&#xff1a;西米在线 http://simmyonline.com/archives/54.html right clickSearch Folder-New Search Folder-Custom-Create a custom folder 本文转simmy51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/helpdesk/122327&#xff0…

Oracle服务器修改IP后

机房有两套网络&#xff0c;一套办公网&#xff0c;一套机房的内网&#xff0c;办公网可以通过vpn在其他地方访问&#xff0c;内网只能在公司办公室访问。团队有同事去外地办公&#xff0c;开发的时候需要通过客户端直连数据库&#xff0c;于是把数据库服务器的网线换到办公网的…

代理IP对直播平台的影响与关系-国内多IP昙花一现

1.代理IP的作用1>.访问一些单位或团体内部资源&#xff0c;如某大学FTP(前提是该代理地址在该资源 的允许访问范围之内)&#xff0c;使用网络内地址段免费代理服务器&#xff0c;就可以用于对 网络开放的各类FTP下载上传&#xff0c;以及各类资料查询共享等服务。国内站群整…

ios12彻底关闭siri_Siri正在iOS 12中获取自定义语音操作

ios12彻底关闭siriSiri is about to get a lot more powerful. Custom voice commands for any app will allow you to say “Hey Siri, I lost my keys” to instantly launch an app that will help you find them. Siri将变得更加强大。 针对任何应用程序的自定义语音命令将…

spring cloud连载第一篇之bootstrap context

1. Spring Cloud Context: Application Context Services&#xff08;应用上下文服务&#xff09; 1.1 The Bootstrap Application Context&#xff08;引导上下文&#xff09; 一个spring cloud应用会创建一个“bootstrap”context&#xff0c;它是主应用的parent context。它…

过Postfix构建Exchange Server 2010邮件网关部署系列三:安装Exchange 2010先决性条件

1.将Exchange Server 2010服务器加入域。 2.在“开始”菜单上&#xff0c;依次导航到“所有程序”>“附件”>“Windows PowerShell”。打开提升的 Windows PowerShell 控制台并运行以下命令&#xff1a; Import-Module ServerManager 3.使用 Add-WindowsFeature cmdlet 安…

gmail收件箱标签设置_通过多个收件箱实验室有效管理您的Gmail

gmail收件箱标签设置Most people have more than one email account and if you are using Gmail it’s easy to get things set up so that all of your messages can be accessed in the same place. But if you would prefer to keep things ‘together yet separate’ the …

清华生命学院 2017 就业报告:就业率仅 51%

时间&#xff1a;20170406 一、截至目前生命学院整体就业情况 1.1 系统就业率 1.2 实际排查就业率 (6092)/(68230)51.06%二、本科生就业排查 2017 届本科生 68 人&#xff0c;已确定去向 60 人&#xff08;已登记去向 32 人&#xff09; 2.1 确定去向的 60 人中 国内深造 35 人…

程序改变了命运,程序生活一天比一天好,对未来也充满了希望

为什么80%的码农都做不了架构师&#xff1f;>>> 我出生在内蒙古自治区兴安盟扎赉特旗宝力根花苏木&#xff0c;那里是少数民族蒙古族聚居区&#xff0c;20-30年前与现代城市文明有些差距。当还在读小学的时在中学当数学老师的爸爸去深圳出差学习&#xff0c;顺路在…

powershell 变量_极客学院:学习PowerShell变量,输入和输出

powershell 变量As we move away from simply running commands and move into writing full blown scripts, you will need a temporary place to store data. This is where variables come in. 随着我们不再只是运行命令而转而编写完整的脚本&#xff0c;您将需要一个临时位…

offsetTop、offsetLeft、offsetWidth、offsetHeight、style中的样式

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 假设 obj 为某个 HTML 控件。 obj.offsetTop 指 obj 距离上方或上层控件的位置&#xff0c;整型&#xff0c;单位像素。 obj.offsetLeft 指 obj 距离左方或上层控件的位置&#xff0…