博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET WebApi 基于JWT实现Token签名认证
阅读量:5319 次
发布时间:2019-06-14

本文共 2474 字,大约阅读时间需要 8 分钟。

一、前言

开发提供数据的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

你可能感兴趣的文章
基础学习:C#中float的取值范围和精度
查看>>
MongoDB-CRUD
查看>>
javaagent 简介
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
web前端面试题2017
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>
SOPC Builder中SystemID
查看>>
MySQL数据库备份工具mysqldump的使用(转)
查看>>
NTP服务器配置
查看>>
【转】OO无双的blocking/non-blocking执行时刻
查看>>
ul li剧中对齐
查看>>
关于 linux 的 limit 的设置
查看>>
HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)
查看>>
vim中文帮助教程
查看>>
MySQL基础3
查看>>