简单token鉴权方式

目标:实现客户端(app)与后台服务接口的简单鉴权方式
背景:系统通过设备唯一码的注册限制是否允许使用。
实现方式
1 app端将“设备唯一码”+“设备时间戳”+“固定串”组成的字符串进行对称加密,形成token。
2 app端发送的所有请求均在header中带入步骤1中计算的token。
3 后台服务通过filter拦截所有请求,并解析token。
解析时使用约定的对称加密密钥解密,拆分出设备唯一码、时间戳、固定串。
a 使用设备唯一码验证设备是否在系统中注册
b 使用时间戳验证请求是否超时
参考流程图:

在这里插入图片描述

前端 token 是一种在现代 Web 应用中广泛使用的身份验证机制,以下是其原理、实现方法和使用场景的介绍: ### 原理 前端 token 的根本原理是在服务端生成标记(token),在客户端保存标记,客户端在请求时带上标记,服务端校验客户端标识是否合法,再确定是否返回数据。客户端在首次登陆以后,服务端再次接收 http 请求时,只认 token,请求每次带上 token,服务器端拦截所有请求并校验 token 的合法性,合法则放行,不合法返回 401(失败)[^2][^4]。 ### 实现方法 1. **登录获取 token**:用户在前端输入账号和密码,发送登录请求到后端服务器。后端验证用户信息,验证通过后生成一个 token 并返回给前端。 2. **前端存储 token**:前端接收到 token 后,将其存储在本地,常见的存储方式有 `localStorage`、`sessionStorage` 或 `cookie`。 3. **请求携带 token**:前端在后续的请求中,将 token 附加到请求头或请求参数中发送给后端。 4. **后端验证 token**:后端服务器接收到请求后,从请求中提取 token 并进行验证。验证通过则处理请求并返回响应,验证失败则返回失败的错误信息。 5. **刷新 token**:为了提高安全性,token 通常有一定的有效期。当 token 过期时,前端可以使用 `refresh_token` 去重新获取新的 token,这个操作实际上相当于再次进行了一次登录,只不过参数是 `refresh_token`,且用户通常不知情。每次登录获取到的信息会覆盖上一次存储的信息,确保 token 和 `refresh_token` 一直是最新的 [^3]。 ### 使用场景 1. **移动端应用**:移动端上不支持 cookie,而 token 只要客户端能够进行存储就能够使用,因此 token 在移动端上具有优势 [^1]。 2. **分布式系统**:在分布式系统中,使用 Session 进行身份认证会遇到 Session 共享和 Cookie 跨域等问题。而 token 被保存在客户端,完全由应用管理,可以避开同源策略,不会存在跨域问题,适合单点登录的场景 [^1]。 3. **防止 CSRF 攻击**:CSRF 攻击是利用 Cookie + Session 的方式数据由浏览器自动携带的特性进行的。而 token 是通过客户端本身逻辑作为动态参数加到请求中的,且不会轻易泄露,因此在 CSRF 防御方面存在天然优势 [^1]。 以下是一个简单的前端代码示例,演示如何在请求中携带 token: ```javascript // 假设 token 已经存储在 localStorage 中 const token = localStorage.getItem('token'); // 发送请求时携带 token fetch('https://example.com/api/data', { headers: { 'Authorization': `Bearer ${token}` } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值