一、前言
开发提供数据的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消耗内存。
俗话说的好:师父领进门修行在个人,希望大家在学习的道路上一直坚持下去!