JWT学习笔记

本文详细介绍了JWT(Json Web Token)的基本概念、结构、安全性以及在C#中的使用。JWT通过Header、Payload和Signature三部分组成,利用MAC消息认证码确保Token的完整性和不可伪造性。文中探讨了单向散列函数、HMAC以及JWT的安全性,指出JWT的安全依赖于传输协议,建议使用HTTPS。此外,还讲解了如何在C#中生成JWT Token以及常用的哈希算法。
摘要由CSDN通过智能技术生成

为一个自娱自乐的项目开发WebAPI的时候,我尝试使用了Token验证机制。
对于我这样一个菜鸟来说,Token的验证机制在我理解中十分简单:
先使用用户名和密码登录系统,服务器会返回一个字符串,约定好这个字符串就是系统出入的通行令牌
客户端之后除了登录操作的所有请求只要带上这个字符串,系统就会放行。
好,到现在就明白了,“Token”在当时的我看来只是一个字符串,我只需要保证这个字符串一人一个不重样即可。
于是我就使用了GUID(全局变量标识符)来充当Token。但是使用过程中就有了问题。这个Token是生成了而且不重样,可我怎么确立它和用户之间的对应关系?于是我想到把Token存到用户表中,假设用户带着Token访问更新用户信息的API,服务器拿到Token去查询用户表,进而找到对应的用户名。至此我就知道了这个Token是哪位用户的了。拿着这个用户名,就可以更新该用户的表项了。那么其它的API也是这个这样,首先第一件事要做的就是去查询数据库找到对应的用户名,才能进行其他的操作。
按照我的思路的话,这个方式虽然麻烦一点,但是还是能实现功能的。
另一个观于Token的常见要求是,它得能设置有效期,总不能一个Token用一辈子吧。于是我又往用户表加了一列过期时间,每次验证Token都要从数据库中拿出到期时间与当前时间做比较来判断是不是过期了。

JWT的基本概念

JWT(Json Web Token)本质上是一种Token的设计规范。用于实现Token机制的Token说到底也就是个字符串,重点是这个字符串该怎么写才会比较合理。我试过用GUID来充当这个Token实现简单的Token身份验证机制,完全没问题。可就是用起来有点别扭。而JWT就是一种更加合理的组织Token字符串的方式。
它使用JSON格式,总体分为三个大块:Header .Payload. Signature,分别承担各自的责任。

Header

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值