JWT.net操作实践
来源:互联网 发布:strider军刀 淘宝 编辑:程序博客网 时间:2024/04/20 06:15
1.JWT定义
JWT(Json Web Token)是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT作为一个开放的标准( RFC 7519 ),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。
2.JWT的组成部分
(1)JWT一般由三段构成,用.号分隔开,第一段是header,第二段是payload,第三段是signature,
例如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
具体各部分介绍可查看简书(http://www.jianshu.com/p/576dbf44b2ae)
3.Jwt.Net 使用
首先,需要先引入Jwt.Net,可通过nuget的方式添加:Install-Package JWT -Version 2.4.2(自己选择合适的版本)
(1)创建token,此处,我们只需要自定义payload和secrect密钥即可,可生成三段格式的字符串
var payload = new Dictionary<string, object>{ { "claim1", 0 }, { "claim2", "claim2-value" }};var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk"; IJwtAlgorithm algorithm = new HMACSHA256Algorithm();IJsonSerializer serializer = new JsonNetSerializer();IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder); var token = encoder.Encode(payload, secret);Console.WriteLine(token);(2)token解密,可看到输出为{ "claim1": 0, "claim2": "claim2-value" },可以用json["claim1"],json["claim2"]的方式获取各个值,此处json为IDictionary<string,object>类型token解密,可看到输出为{ "claim1": 0, "claim2": "claim2-value" },可以用json["claim1"],json["claim2"]的方式获取各个值,此处json为IDictionary<string,object>类型
var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGFpbTEiOjAsImNsYWltMiI6ImNsYWltMi12YWx1ZSJ9.8pwBI_HtXqI3UgQHQ_rDRnSQRxFL1SR8fbQoS-5kM5s";var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";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); Console.WriteLine(json);}catch (TokenExpiredException){ Console.WriteLine("Token has expired");}catch (SignatureVerificationException){ Console.WriteLine("Token has invalid signature");}
(3)添加过期时间,过期时间即这个时间之后JWT不接受处理,时间的有效值为某一时刻和1970/1/1 00:00:00 相差的秒数
下面的例子是当前时间到1970/1/1 00:00:00 的秒数,即过期时间为当前时间。如果设置为当前时间+10秒,可添加secondsSinceEpoch=secondsSinceEpoch+10
IDateTimeProvider provider = new UtcDateTimeProvider();var now = provider.GetNow(); var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // or use JwtValidator.UnixEpochvar secondsSinceEpoch = Math.Round((now - unixEpoch).TotalSeconds); var payload = new Dictionary<string, object>{ { "exp", secondsSinceEpoch }};var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";var token = encoder.Encode(payload, secret); var json = decoder.Decode(token, secret); // TokenExpiredException
(4)也可自定义json解析器,只要继承IJsonSerializer接口
public class CustomJsonSerializer : IJsonSerializer{ public string Serialize(object obj) { // Implement using favorite JSON Serializer } public T Deserialize<T>(string json) { // Implement using favorite JSON Serializer }}
使用该解析器
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();IJsonSerializer serializer = new CustomJsonSerializer();IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
阅读全文0 0
- JWT.net操作实践
- JWT在Retrofit中的实践
- .Net操作Excel实践
- asp.net core Swagger JWT
- jwt
- jwt
- JWT
- JWT
- JWT
- JWT
- JWT
- jwt
- spring安全验证之jwt(json web token)实践
- Java安全验证之jwt(json web token)实践
- asp.net 用JWT来实现token以此取代Session
- asp.net core2.0 JWT Bearer 注意添加认证服务
- asp.net core JWT 验证用户是否有效
- JWT成员名单
- 阿里发送邮箱
- [GCD最小生成树 LCT] HDU5398 .GCD TREE
- 线程间的通信方式
- 51Nod-1073 约瑟夫环
- ip地址转化为其他进制
- JWT.net操作实践
- jenkins 对 maven对应的 jvm 配置参数
- JPA 主键@Id、@IdClass、@Embeddable、@EmbeddedId
- 面试问题
- 宏和函数小记
- 大数据未来应用7大趋势 人工智能只占其一
- 下一步
- 有趣的思路题集锦from bzoj/codefoces(乱搞)
- 鸡的选择问题--回溯法
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
具惠善住院
割包皮住院
住院照片
人流住院
住院总
住院医师规范化培训
住院照片真实图片
好医保住院医疗报销真实感受
疝气需要住院几天
住院医保报销
具惠善自曝住院
新生儿住院报销
假装住院图片
支气管肺炎住院
阑尾炎住院几天
病人住院真实图片
住院一天多少钱
医保住院报销
2018年异地住院回老家报销多少
医保住院报销比例
住院图片手机拍
贫困户住院报销比例
肺炎需要住院吗
手机拍病人住院真实高清图片
住院需要准备什么东西
人流需要住院
四川省住院医师规范化培训网
异地住院医保如何报销
住院准备什么东西
好医保住院医疗报销难
一般脑出血要住院多久
一般过预产期多少天住院催产
一个人躺在医院住院图片
儿童支气管肺炎需要住院吗
抖音上留不住爱这首歌叫什么
相遇爱你留不住你是哪首歌
想你爱你留不住你是哪首歌
佐井
佐井和井野之恋
井野和佐井在树下打叉
佐井图片