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 …

如何更改您的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这样的流行手机的问题是,默认情况下,每个…

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

前言 本文首发于公众号【一名打字员】 在工作中,我们通常会遇到传说中的“祖传”代码,有些是否让我们感到哭笑不得,今天本猿整理一下自己以及网络上出现过的奇葩代码。来源于互联网的均会标明出处。 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. 高湿度无济于事,低湿度也无济于事-您希望…

基于redis实现的扣减库存

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

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,Android,Roku和Plex Web的播客添加了beta支持,同时为移动用户提供了自定…

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将变得更加强大。 针对任何应用程序的自定义语音命令将…

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

1.将Exchange Server 2010服务器加入域。 2.在“开始”菜单上,依次导航到“所有程序”>“附件”>“Windows PowerShell”。打开提升的 Windows PowerShell 控制台并运行以下命令: 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%

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

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

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

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. 随着我们不再只是运行命令而转而编写完整的脚本,您将需要一个临时位…

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

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

Mock2 moco框架的http协议get方法Mock的实现

首先在Chapter7文件夹下再新建一个startGet.json startget.json代码如下&#xff0c;因为是get请求&#xff0c;所以要写method关键字&#xff0c;有两个&#xff0c;一个是有参数&#xff0c;一个是无参数的请求。 [{"description":"模拟一个没有参数的get请求…

imessage_如何在所有Apple设备上同步您的iMessage

imessageMessages in iCloud lets you sync your iMessages across all of your Apple devices using your iCloud account. Here’s how to set it up. 通过iCloud中的消息&#xff0c;您可以使用iCloud帐户在所有Apple设备上同步iMessage。 设置方法如下。 Apple announced t…

“.Net 社区大会”(dotnetConf) 2018 Day 1 主题演讲

Miguel de Icaza、Scott Hunter、Mads Torgersen三位大咖给大家带来了 .NET Core ,C# 以及 Xamarin的精彩内容&#xff1a;6月份已经发布了.NET Core 2.1, 大会上Scott Hunter 一开始花了大量的篇幅回顾.NET Core 2.1的发布&#xff0c;社区的参与度已经非常高&#xff0c;.NET…

长时间曝光计算_如何拍摄好长时间曝光的照片

长时间曝光计算In long exposure photography, you take a picture with a slow shutter speed—generally somewhere between five and sixty seconds—so that any movement in the scene gets blurred. It’s a way to show the passage of time in a single image. Let’s …

深度学习入门3

CNN 第一周&#xff1a; title: edge detection example 卷积核在边缘检测中的应用&#xff0c;可解释&#xff0c;卷积核的设计可以找到像素列突变的位置 把人为选择的卷积核参数&#xff0c;改为学习参数&#xff0c;可以学到更多的特征 title: padding n * n图片&#xff0c…

图像大小调整_如何在Windows中调整图像和照片的大小

图像大小调整Most image viewing programs have a built-in feature to help you change the size of images. Here are our favorite image resizing tools for Windows. We’ve picked out a built-in option, a couple of third party apps, and even a browser-based tool.…

Spring Data JPA例子[基于Spring Boot、Mysql]

阅读目录 关于Spring Data关于Spring Data子项目关于Spring Data Jpa例子&#xff0c;Spring Boot Spring Data Jpa运行、测试程序程序源码参考资料关于Spring Data Spring社区的一个顶级工程&#xff0c;主要用于简化数据&#xff08;关系型&非关系型&#xff09;访问&am…