express使用JWT和httpOnly cookie进行安全验证
express使用JWT和httpOnly cookie进行身份验证
对大创项目中使用JWT作为身份验证的总结。
一般情况使用JWT作为身份验证的方式可以直接参考这篇文章:Node.js 使用 express-jwt 解析 JWT 。这里主要针对httpOnly类型的cookie进行代码调整。
1. 安装和引入
需要使用的模块:express-jwt
,用于解析token; jsonwebtoken
,用于生成token ; cookie-parser
,用于解析cookie(据说express已经内置,但是为可能没有该模块导致避免取不到cookie,安装该模块)。
npm i express-jwt jsonwebtoken cookie-parser --save
引入:
const express = require('express');
const jwt = require('jsonwebtoken');
const expressJwt = require('express-jwt');
const cookieParser = require('cookie-parser');const app = express();
2. 生成token,放入cookie,验证token
封装一个生成token的方法:
//设置一个私钥
const scrict = 'examplev8w9egf';function createToken = palyload =>{//给palyload添加一个生成时间戳的属性palyload.curtime = Date.now();//这里添加Bearer是因为express-jwt模块默认获取到token的方法//当然这里也没必要添加,因为后续我们不会使用默认的解析方式const token = 'Bearer ' + jwt.sign(palyload,scrict, { expiresIn: 3600 * 24 * 3 //过期时间})return token;
}
在需要的位置生成和发送token到cookie:
如果不知道express中怎么使用cookie,可以参考:Express Cookie的使用
app.use('/',(req,res)=>{let token = createToken({login:true,name:user}) //这里的palyload参数可以自行设定//将token存入cookie,设置最大失效时间和httpOnlyres.cookie('token',token,{ maxAge:1000*3600*24, path:'/', httpOnly:true });//响应客户端res.send({msg:'cookie设置成功'});
}
客户端携带cookie请求:
//这里使用JQ封装的ajax。默认是会自动携带cookie的,无需单独设置:
$.ajax({//一般情况携带token的方式。但这里设置的是httpOnly类型,使用js是无法获取的,交给服务端处理
/* headers:{Accept: "application/json; charset=utf-8",Authorization:token}, */url: '/',type: 'put',contentType: "application/json", success: function (data) {return;},error: function (err) {console.log(err);},//这里加一个服务器端校验token失败返回401状态码的操作,跳转回登录界面statusCode:{401:function () {//token验证失败 异常处理alert('token验证失败!');}}
})
服务器端解析cookie中的token:
//cookie-parser挂载
home.use(cookieParser());//express-jwt挂载,验证token
home.use(expressJwt({secret:scrict, //封装生成token方法时候设置的私钥algorithms: ['HS256'], //解码方式建议加上,否则可能会报错/*重要的是这里,需要改变express-jwt默认取得token的方式默认模块会从请求头的authorization中取得token,token以'Bearer'开头 */getToken:function fromCookie(req){//尝试从cookie读取token进行验证if(req.cookies.token)return req.cookies.token.split(' ')[1];return null; } }).unless({path:['/login','logout'] //白名单,该地址下的不会进行解析
}))
//token校验错误处理中间件
home.use(function (err, req, res, next) {if (err.name === 'UnauthorizedError') { console.log(err);res.status(401).send('invalid token...'); //根据具体情况设置}
})//通过解析后的处理
app.use('/user',(req,res)=>{res.send({err:0,msg:'token通过解析验证'})
})
express使用JWT和httpOnly cookie进行安全验证相关推荐
- HttpOnly Cookie 标志
什么是 HttpOnly Cookie 标志? 大多数不熟悉"HttpOnly"cookie 标志的人只能在对其网站进行安全检查时才发现该术语.如果您完全不知道这个 cookie ...
- cookie httponly ajax,HostOnly Cookie和HttpOnly Cookie
怎么使用Cookie? 通常我们有两种方式给浏览器设置或获取Cookie,分别是HTTP Response Headers中的Set-Cookie Header和HTTP Request Header ...
- php cookie httponly,Cookie的httponly属性设置方法
为了解决XSS(跨站脚本***)的问题,从IE6开始支持cookie的HttpOnly属性,这个属性目前已被大多数浏览器(IE.FF.Chrome.Safari) 所支持.当cookie中的HttpO ...
- Java 设置 httponly cookie
Httponly cookie 是一种 cookie 安全解决方案. 在支持httponly cookie的浏览器(IE6+.FF3.0+)中,如果cookie中设置了"httponly&q ...
- ASP.NET的MVC中使用Cookie做身份验证(附代码下载)
场景 ASP.NET的MVC中使用Session做身份验证(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1071 ...
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
小论坛地址: http://rayyu.5d6d.com/thread-9444-1-1.html 正文: 首先 session 和 cache 拥有各自的优势而存在. 他们的优劣就不在这里讨论了. ...
- java获取httponly_使用HttpWebRequest获取HttpOnly cookie
我正在尝试使用.NET的HttpWebRequest POST方法以编程方式登录站点(代码用C#编写) . 最初我将请求发送到登录页面,将响应cookie保存到CookieContainer,并使用登 ...
- php cookie httponly,Cookie 会话中 PHPSESSID 缺少 HTTPOnly、Secure 属性设置方法
吐槽的话就不说了,没什么意义,今天上午接到当地网安给我的 Web 应用安全评估报告,给泪雪网强行找出了几个低危漏洞要求处理,这种两个问题就是说会话 Cookie 中缺少 HTTPSOnly 属性,还有 ...
- asp.net core 自定义401和异常显示内容(JWT认证、Cookie Base认证失败显示内容)
asp.net core 2.0使用JWT认证园子里已经有挺多帖子了,但开发中发现认证未授权情况下返回的401状态码是没有任何信息的,业务中可能有需要返回一串错误的Json信息.在这里我分享一个自定义 ...
最新文章
- java mysql乐观锁_java乐观锁使用
- 跟我学算法聚类(kmeans)
- 不吹牛,中国车主已经实现了「停车自由」
- python中yield的用法
- 图标字体iconfont的使用
- 循环录入某学生 5 门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误
- odoo中页面跳转相关
- Android Handler机制分析
- null value in entry: destinationDir=null
- C语言/C++程序必须从main函数开始吗?main函数执行完后还执行其他语句吗?
- 微信公众号教程(13)公司通讯录开发 上
- 淘宝网发展史:揭开神秘组织的技术内幕与艰辛历程
- Spring Boot2 服务假死排查分析记录
- html文件 加壳,CDHtmlDialog加壳HTML5页面跳转错误解决(原)
- 企业为什么需要BI报表工具?
- APP推广的渠道与运营模式分析
- 手机谷歌翻译位置服务器,谷歌翻译更新手机端App:中国用户可无障碍使用
- python中qt有哪些控件_PyQt5的基本控件整理
- 登录功能实现账号锁定
- 手机实名认证api接口有哪些类别?