主机销售网站源码,个人注册公司需要什么,建设银行个人网站登陆,湛江网站建设制作价格在分布式系统中#xff0c;令牌签发系统往往需要跟令牌应用系统分离#xff0c;并且应用系统可以独立验证令牌#xff0c;无需请求签发系统接口。数字签名令牌属于发明专利《基于令牌协议的令牌组网构建方法》#xff08;已授权专利号201510213377.X#xff09;的一部分令牌签发系统往往需要跟令牌应用系统分离并且应用系统可以独立验证令牌无需请求签发系统接口。数字签名令牌属于发明专利《基于令牌协议的令牌组网构建方法》已授权专利号201510213377.X的一部分设计于2013年在物联网平台中设备验证服务器以及设备接入服务器是分开的并且有很多接入服务器。验证服务器签发的令牌可用于多台接入服务器。功能特性主要功能特性DSA数字签名提供安全默认1024位最高4096位应用系统独立验证令牌无需请求签发系统的接口令牌短小一般在80字符以内降低嵌入式设备的内存消耗以及网络传输量支持物联网设备使用常见几十块钱的民用设备或更高的工业设备应用场景工作流程物联网设备联网后首先前往验证系统进行设备有效性验证获取令牌即可携带令牌访问各应用服务器。令牌具有有效期一般2小时过期。应用服务器遇到过期令牌时应该拒绝提供服务设备将再次访问验证系统获取新令牌。对于长连接通信的物联网设备仅在连接建立的时候使用一次令牌验证身份后续通信无需再次验证令牌即使超过了有效期。除非网络中断需要重新建立TCP长连接。示例详解Nuget引用包 NewLife.Core源码https://github.com/NewLifeX/X/blob/master/NewLife.Core/Web/TokenProvider.cs生成密钥ReadKey方法用于读取文件密钥第二个参数可指定当密钥文件不存在时创建一组公钥私钥。var prv new TokenProvider();
// 加载或生成密钥
var rs prv.ReadKey(keys/test.prvkey, true);
Assert.True(rs);
Assert.True(File.Exists(keys/test.prvkey.GetFullPath()));
Assert.True(File.Exists(keys/test.pubkey.GetFullPath()));
Assert.NotEmpty(prv.Key);私钥由验证服务器自己保存公钥分发到各应用服务器中。签发令牌为了让令牌足够短小数据部分只有一个user字符串和有效期时间戳user可以是用户名也可以是设备编号。魔方OAuthServer使用了TokenProvider平稳工作多年。var prv new TokenProvider();
// 生成令牌
var user Rand.NextString(8);
var time DateTime.Now.AddHours(2);
var token prv.Encode(user, time);
Assert.NotEmpty(token);
var data token.Substring(null, .).ToBase64().ToStr();
Assert.Equal(${user},{time.ToInt()}, data);验证令牌TryDecode用于解码令牌并返回验证是否成功// 解码令牌
var prv2 new TokenProvider();
prv2.ReadKey(keys/test.pubkey, false);
var rs2 prv2.TryDecode(token, out var user2, out var time2);
Assert.True(rs2);
Assert.Equal(user, user2);
Assert.Equal(time.Trim(), time2.Trim());令牌防篡改故意破坏令牌把数据部分用户名改为其它账号时间戳和签名不变得到的新令牌无法通过应用服务器公钥的签名验证。这就让令牌具有了防篡改能力。// 破坏数据
token $Stone,{time.ToInt()}.GetBytes().ToUrlBase64() . token.Substring(.);
var rs3 prv2.TryDecode(token, out var user3, out var time3);
Assert.False(rs3);
Assert.NotEqual(user, user3);
Assert.Equal(time.Trim(), time3.Trim());总结在JWT大行其道的今天数字签名令牌仍然具有很多使用场景。JWT令牌实在太长了HS256有密钥安全问题RS256/ES256在实现上又有较高难度它的数据部分对于非web场景显得过份臃肿