为什么要使用token,它的作用、好处和token的加密功能是什么以及要如何使用token

一、为什么要使用token?

token是现代应用于身份验证和授权的核心工具,主要是解决传统会话管理的痛点。为什么要使用它是因为它在很多方面都有优势比如:

1.代替了传统的Session,实现无状态化

token使服务器无需存储会话数据,只需要验证token的有效性。还支持多服务器的部署适合分布式系统

2.跨域和跨设备支持

token可以存储在客户端,在跨域请求是自动携带token。它还支持多端比如web、移动端、iot设备等

3.提升安全性

防CSRF攻击:Token基本都存储在HTTP头中,可以避免Cookie劫持风险

防篡改:通过签名机制可以确保数据完整性

短时有效:可以设置token过期的时间,减少泄露风险

4.提升性能

token可以减少数据库的查询,在每次使用时服务器无需每次请求都查询会话数据

5.灵活的授权管理

token可以携带用户的角色和权限等一些的信息在获取到token时可直接解析使用

二、token的作用:

token是用于验证用户身份的,在我们使用的每一个软件当中都会有一个登录系统,在用户进行登录之后会生成一个token返回给客户端,在返回客户端时会把token放在HTTP Header当中,这个token会包含用户的角色以及角色的权限,当我们再次进入到这个app时服务器会验证存放的token,获取用户的角色和权限,并决定该角色无法使用什么功能,token还可以实现跨域和跨设备的支持。

三、Token的好处:

1.保护隐私:因为Token不能直接推导出原始信息,所以即使Token被盗,黑客也无法获取敏感数据。 2.减少数据泄露风险:敏感信息被转换成Token后,即便数据库遭到入侵,泄露的也只是无意义的代币,而不是用户的真实数据。 3.便利性:Token可以用来简化支付流程,比如在网上购物时,你不需要每次都输入银行卡号,而是使用Token进行支付

四、token的加密功能

token的加密的核心作用就是保护数据安全,让信息在传输或存储过程中不被窃取、篡改。

1.保护数据安全:

token会保护数据的安全它在加密时会把token变为一串乱码,只有进入到服务器才可以去解开当前的乱码,如果被别人窃取到乱码也看不懂

2.验证身份:

token加密会生成一个独特的身份令牌,只有在本人登录的时候才会获得这个令牌,当系统知道是本人时,不会重复输入密码,直接进入到App当中

3.防止别人篡改本人的消息:

token加密会给消息加一个签名,当我们的消息被别人恶意修改时签名就会失效,在接收方看到时立刻就会知道数据被修改过

4.防止重复的使用:

token加密会让每个Token只能使用一次,用过之后当前的token就会失效,如果在别人获取到我们的token时也无法使用

5.提高效率:

token加密后,系统可以通过token验证快速的识别你的身份和权限,这样可以避免我们每一次进入应用都要进行登录一次

五、使用token的方法

1.使用token首先token有很多的类型比如jwt、Opaque Token等。

jwt类型:

优点:自包含用户信息,无需服务器存储。

缺点:Payload不可加密,敏感信息须谨慎处理

Opaque Token:

优点:安全性高,服务器可完全控制token内容

缺点:需依赖服务器存储验证token

2.一般会使用token的jwt类型实现

为什么会使用jwt类型:主要是因为它提供了无状态性、跨域支持、安全性、性能和扩展性等优势,易于实现和集成到现代应用中。但是开发者需要权衡jwt的优缺点,根据具体需求选择合适的认证和授权机制。

1.生成token:

npm i jsonwebtoken
//导入jsonwebtoken
const jwt = require('jsonwebtoken');
//生成签名的密钥
const secret = 'your-secret-key';
//用户的登录信息
const payload = { userId: 123, role: 'admin' };
//把信息转换为乱码,参数三是设置token存在的时间
const token = jwt.sign(payload, secret, { expiresIn: '1h' });
console.log(token);

2.验证token

下载express-jwt中间件来进行验证

npm i express-jwt
//导入express-jwt
var expressJWT = require("express-jwt");
app.use(expressJWT({
//secret是用于验证jwt签名的密钥
    secret: "123",
//algorithms指定用于签名和验证jwt的算法
    algorithms: ["HS256"]
}).unless({
//unless用于定义不需要进行jwt验证的路径/login是登录接口,/upload是上传接口
    path: ["/login", "/upload", {url: /^\/upload/, methods: ['GET']}]
}))

如果在验证时没有获取到token就会报出403的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值