JWT加密解密
如何保证WebAPI的安全?
1、JWT加密解密。token
2、使用https传输协议。
3、把用户所有请求的参数信息加上一个只有服务器端知道的secret,做个散列运算,然后到了服务器端,服务器端也做一个散列运算。如果散列值是一样的,那就表示没被篡改。
4、在业务逻辑上进行保护。(检查访问者是否有权限来实现一些操作。这点是最主要的,前面3的未必能够100%保证安全)
JWT由三部分组成(Header,Payload,Signature),可以把用户名、密码等保存到Payload部分。
Header:base64enc({ "alg":"HS256","TYPE":"JWT"}) // eyAiYWxnIjoiSFMyNTYiLCJUWVBFIjoiSldUIn0=
Payload:base64enc({"user":"vichin","pwd":"weichen123"}) //用户的关键信息 eyJ1c2VyIjoidmljaGluIiwicHdkIjoid2VpY2hlbjEyMyJ9
Signature:HMACSHA256(base64enc(header)+","+base64enc(payload),secretKey)
Header和Payload部分使用的是Base64编码,几乎等于明文,Signature部分是根据header+payload+secretKey进行加密算出来的,如果Payload被篡改,就可以根据Signature解密时候校验。
首先需要添加引用
install-package JWT (3.0.1支持 .net framework 3.5,3.0.2需要.net 4.6.2)。
public void AddSecret()
{
double exp = (DateTime.UtcNow.AddSeconds() - new DateTime(, , )).TotalSeconds;//10秒过期
var payload = new Dictionary<string, object>
{
{"UserID",},
{"UserName","admin"},
{ "exp",exp}//过期时间的key必须叫exp
};
string secret = "";//不能泄露的key
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serialer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serialer, urlEncoder);
string token = encoder.Encode(payload, secret);
textBox1.Text = token;
}
public void SubSecret(string token)
{
//string token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJVc2VySUQiOjEyMywiVXNlck5hbWUiOiJhZG1pbiJ9.OR0lZOfbQr7D2wnY_m44tX9DOoNmDWV-6X53_ZZGJAs";
var secret = ""; //不能泄露的key
try
{
IJsonSerializer serializer = new JsonNetSerializer();
IDateTimeProvider provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer, provider);
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
var json = decoder.Decode(token, secret, verify: true);
}
catch (TokenExpiredException)
{
MessageBox.Show("Token has expired");
}
catch (SignatureVerificationException)
{
MessageBox.Show("签名验证失败,数据可能被篡改");
}
}
JWT加密解密的更多相关文章
- JWT加密解密方法
public static string Key { get; set; } = "123456789987654321";//解密串 /// <summary> // ...
- jwt 简单基本使用加密解密
import jwt # 加密 encode_jwt=jwt.encode({'uid':'123'},'密钥123',algorithm='HS256') print(encode_jwt) # 解 ...
- JWT加密
JWT是一种加密算法,为了防止请求的信息在传输途中被拦截修改 JWT的引用: install-package jwt JWF由三部分组成:Header,Payload,Signature Payloa ...
- PHP的学习--RSA加密解密
PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了. 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了. 密码没加 ...
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- .NET和JAVA中BYTE的区别以及JAVA中“DES/CBC/PKCS5PADDING” 加密解密在.NET中的实现
场景:java 作为客户端调用已有的一个.net写的server的webservice,输入string,返回字节数组. 问题:返回的值不是自己想要的,跟.net客户端直接调用总是有差距 分析:平台不 ...
- php使用openssl进行Rsa长数据加密(117)解密(128) 和 DES 加密解密
PHP使用openssl进行Rsa加密,如果要加密的明文太长则会出错,解决方法:加密的时候117个字符加密一次,然后把所有的密文拼接成一个密文:解密的时候需要128个字符解密一下,然后拼接成数据. 加 ...
- c#和js互通的AES加密解密
一.使用场景 在使用前后端分离的框架中常常会进行传输数据相互加密解密以确保数据的安全性,如web Api返回加密数据客户端或web端进行解密,或者客户端或web端进行加密提交数据服务端解密数据等等. ...
- PHP AES的加密解密
AES加密算法 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...
随机推荐
- excel中的更新链接
表格每次打开都提示是否更新连接 在 [ 数据 --> 编辑链接 ] 中也看到了这个连接 学着网上说的查找方式,去查找路径中包含的文字,文件名中包含的名字,都定位不到这个用了链接的单元格 ...
- ajax 传参数 java后台接收
- 一秒钟教会你如何 使用jfreechart制作图表,扇形图,柱形图,线型图,时序图,附上详细代码,直接看效果
今天有小伙伴问到我怎么使用jfreeChat生成图标,去年就有一个这方便的的总结,今天再遇到,就总结出来,供大家参考: 第一个: 创建柱状图,效果图如下: 柱状图代码如下: package cn.xf ...
- jq国际化i18n
1.(main.js或)ajax.js引入文件 import './jquery.i18n.properties.min' //https://github.com/jquery-i18n-prope ...
- 后台程序员简单应用前端的bootstrap(小白)
原因: 现在技术更新很快,我们需要掌握更多的语言和技术,公司现在也希望招全栈工程师. 名词: bootstrap(前端框架),less(css的扩充) 案例: 在bootstrap中常用row行级元素 ...
- wlan相关查询命令
1.查看当前连接的设备 hostapd_cli all_sta
- 遍历二叉树 - 基于递归的DFS(前序,中序,后序)
上节中已经学会了如何构建一个二叉搜索数,这次来学习下树的打印-基于递归的DFS,那什么是DFS呢? 有个概念就行,而它又分为前序.中序.后序三种遍历方式,这个也是在面试中经常会被问到的,下面来具体学习 ...
- python 插件 Flask-装饰器 惰性载入视图
Flask 通常使用装饰器.装饰器简单易用,只要把 URL 放在相应的函数的前面就可以了. 但是这种方式有一个缺点:使用装饰器的代码必须预先导入,否则 Flask 就无法真正找到 你的函数. 当你必须 ...
- swap的创建和优先级
生产环境中,有的时候会遇到swap不够用,或者没有swap的情况,然而生产中需要用到swap,那么下面来实现以下如何创建新的swap. 方法一:如果有空余磁盘,可以直接使用空余磁盘 以/dev/sdb ...
- H5 页面 rem 布局适配方法
rem 布局适配方案 主要方法为: 按照设计稿与设备宽度的比例,动态计算并设置 html 根标签的 font-size 大小: css 中,设计稿元素的宽.高.相对位置等取值,按照同等比例换算为 re ...