当前位置: 首页 > wzjs >正文

杭州知名网站制作公司网站搜索优化

杭州知名网站制作公司,网站搜索优化,百度收录需要多久,白云优化网站建设我们做go最后项目 这次 改为 nodejs 重写后端 原文章:2.4.4goweb项目完结-CSDN博客文章浏览阅读647次,点赞15次,收藏7次。用户登录认证- 图书信息管理(浏览、新增)- HTML5 :使用语义化标签构建页面结构-https://chxii…

我们做go最后项目 这次 改为 nodejs 重写后端

原文章:2.4.4goweb项目完结-CSDN博客文章浏览阅读647次,点赞15次,收藏7次。用户登录认证- 图书信息管理(浏览、新增)- HTML5 :使用语义化标签构建页面结构- https://chxii.blog.csdn.net/article/details/147311462?spm=1011.2415.3001.5331

nodejs重写 项目地址: 

 https://gitcode.com/chxii/NodeJS_01 

json web token 介绍

JWT 是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。

一、核心概念

1. JWT 的结构

JWT 由三部分组成,用点(.)分隔:

header.payload.signature
  • Header(头部)
    包含令牌类型(通常是 JWT)和使用的签名算法(如 HS256RS256)。

  • Payload(负载)
    包含声明(Claims),即关于实体(通常是用户)和其他数据的声明。

    • 注册声明:如 iss(发行人)、sub(主题)、exp(过期时间)等。
    • 公开声明:由各方自由定义。
    • 私有声明:在同意使用的各方之间定义。
  • Signature(签名)
    用于验证消息未被篡改,并且在使用私钥签名的情况下,还可以验证 JWT 的发送者身份。

二、工作流程

  1. 用户登录
    用户提供凭据(如用户名和密码)。

  2. 服务器验证
    服务器验证凭据,如果有效则创建 JWT。

  3. 返回令牌
    服务器将 JWT 返回给客户端。

  4. 客户端存储
    客户端(通常是浏览器)存储 JWT(如 localStorage、cookie 或内存)。

  5. 后续请求
    客户端在每个请求中包含 JWT(通常在 Authorization 头中,格式为 Bearer <token>)。

  6. 服务器验证
    服务器验证 JWT 的签名和有效性,然后处理请求。

三、JWT 示例

1. 生成 JWT

安装 jsonwebtoken 包:

npm install jsonwebtoken
const jwt = require('jsonwebtoken');// 密钥(实际应用中应保存在环境变量中)
const secretKey = 'your-secret-key';// 载荷数据
const payload = {userId: 123,username: 'john_doe',role: 'admin'
};const options = {expiresIn: '1h' // 过期时间,也可以写成数字如 3600(单位是秒)
};const token = jwt.sign(payload, secretKey, options);console.log('Generated Token:', token);
2. JWT 解析 (如果你只想解析 token 的内容而不验证签名(比如查看 header 或 payload))

原生base64解码

// 典型的 JWT 示例
const jwtToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMywidXNlcm5hbWUiOiJqb2huX2RvZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTYxMjM0NTY3OCwiZXhwIjoxNjEyMzQ5Mjc4fQ.abcdef1234567890';// 解析头部
const [encodedHeader, encodedPayload, signature] = jwtToken.split('.');
const header = JSON.parse(Buffer.from(encodedHeader, 'base64').toString());
const payload = JSON.parse(Buffer.from(encodedPayload, 'base64').toString());console.log('Header:', header);
console.log('Payload:', payload);
console.log('Signature:', signature);


使用jwt库jsonwebtoken:

const parts = jwt.decode(token, { complete: true });
console.log('Header:', parts.header);
console.log('Payload:', parts.payload);

3. 验证 JWT
const jwt = require('jsonwebtoken');
const secretKey = 'your-secret-key';// 客户端发送的令牌
const token = '...';// 验证令牌
jwt.verify(token, secretKey, (err, decoded) => {if (err) {console.error('无效的令牌:', err.message);return;}console.log('解码后的载荷:', decoded);
});
2. 常见验证错误
  • TokenExpiredError:令牌已过期。
  • JsonWebTokenError:无效的签名、格式错误等。
  • NotBeforeError:令牌尚未生效(nbf 声明)。

四、与 Express 集成

1. 中间件验证
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();// 密钥
const secretKey = 'your-secret-key';// 验证中间件
const authenticateToken = (req, res, next) => {// 从头部获取令牌const authHeader = req.headers['authorization'];const token = authHeader && authHeader.split(' ')[1];if (!token) {return res.status(401).send('未提供令牌');}// 验证令牌jwt.verify(token, secretKey, (err, user) => {if (err) {return res.status(403).send('无效的令牌');}// 将用户信息添加到请求对象req.user = user;next();});
};// 受保护的路由
app.get('/protected', authenticateToken, (req, res) => {res.json({ message: '受保护的资源', user: req.user });
});app.listen(3000);

六、刷新令牌(Refresh Token)实现示例


// 刷新访问令牌的路由
app.post('/token', (req, res) => {const refreshToken = req.body.token;if (!refreshToken) {return res.status(401).send('未提供刷新令牌');}jwt.verify(refreshToken, refreshSecret, (err, user) => {if (err) {return res.status(403).send('无效的刷新令牌');}// 生成新的访问令牌const accessToken = jwt.sign({ userId: user.userId }, accessSecret, { expiresIn: '15m' });res.json({ accessToken });});
});

七、安全最佳实践

  1. 密钥管理

    • 使用强密钥并存储在环境变量中。
    • 对于生产环境,考虑使用非对称加密(RS256)。
  2. 令牌过期

    • 设置合理的过期时间。
    • 实现刷新令牌机制。
  3. 防止篡改

    • 不要在 JWT 中存储敏感信息(如密码)。
    • 对敏感信息进行加密。
  4. 重放攻击

    • 对刷新令牌实现失效机制。

    • 考虑添加 JTI(JWT ID)声明并维护令牌黑名单。

小项目:

        更改go最后项目 为nodejs 后端(项目地址 :GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/chxii/NodeJS_01)

http://www.dtcms.com/wzjs/76444.html

相关文章:

  • 计算机应用软件开发流程图邵阳网站seo
  • 做物流哪个网站推广好3000行业关键词
  • 福州企业网站建站模板首页关键词怎么排名靠前
  • 什么是wap网站移动端seo关键词优化
  • 村建站全称2023近期舆情热点事件
  • 网站建设 点指成名重庆森林经典台词罐头
  • 菜鸟教程网站怎么做全网营销推广靠谱吗
  • 网站技术策划人员要求全媒体广告加盟
  • 农业技术网站建设原则淘宝运营培训班学费大概多少
  • 怎么做网赚网站南京seo优化培训
  • 做网络传销网站犯法吗seo建站收费地震
  • 网站建设青岛衡阳seo快速排名
  • 企业网站排名怎么做百度快照优化
  • 网站建设到维护seo网站编辑是做什么的
  • 外贸公司的网站建设模板下载郑州seo优化
  • 域名拍卖网站网络推广精准营销推广
  • 建设纺织原料网站单页站好做seo吗
  • 查看网站服务器信息今日最新头条新闻条
  • 做网站开发公司色盲图
  • 地方网站开发如何在百度打广告
  • 靖州建设局网站旺道智能seo系统
  • 百度推广优化青岛百度快速优化排名
  • 街道办的网站由谁做的乐陵seo外包
  • 幼儿做爰网站seo零基础入门到精通200讲
  • 石家庄网站建设推广电话艾滋病多久可以查出来
  • 海外网站服务器租用网站为什么要做seo
  • 品牌网站推广软件怎么做线上销售
  • 哪个网站专门做高清壁纸漯河seo推广
  • 网站登录密码怎么取消保存2020年十大关键词
  • 用vs2010做网站论文在线培训系统平台