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进行安全验证相关推荐

  1. HttpOnly Cookie 标志

    什么是 HttpOnly Cookie 标志? 大多数不熟悉"HttpOnly"cookie 标志的人只能在对其网站进行安全检查时才发现该术语.如果您完全不知道这个 cookie ...

  2. cookie httponly ajax,HostOnly Cookie和HttpOnly Cookie

    怎么使用Cookie? 通常我们有两种方式给浏览器设置或获取Cookie,分别是HTTP Response Headers中的Set-Cookie Header和HTTP Request Header ...

  3. php cookie httponly,Cookie的httponly属性设置方法

    为了解决XSS(跨站脚本***)的问题,从IE6开始支持cookie的HttpOnly属性,这个属性目前已被大多数浏览器(IE.FF.Chrome.Safari) 所支持.当cookie中的HttpO ...

  4. Java 设置 httponly cookie

    Httponly cookie 是一种 cookie 安全解决方案. 在支持httponly cookie的浏览器(IE6+.FF3.0+)中,如果cookie中设置了"httponly&q ...

  5. ASP.NET的MVC中使用Cookie做身份验证(附代码下载)

    场景 ASP.NET的MVC中使用Session做身份验证(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1071 ...

  6. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖

    小论坛地址: http://rayyu.5d6d.com/thread-9444-1-1.html 正文: 首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. ...

  7. java获取httponly_使用HttpWebRequest获取HttpOnly cookie

    我正在尝试使用.NET的HttpWebRequest POST方法以编程方式登录站点(代码用C#编写) . 最初我将请求发送到登录页面,将响应cookie保存到CookieContainer,并使用登 ...

  8. php cookie httponly,Cookie 会话中 PHPSESSID 缺少 HTTPOnly、Secure 属性设置方法

    吐槽的话就不说了,没什么意义,今天上午接到当地网安给我的 Web 应用安全评估报告,给泪雪网强行找出了几个低危漏洞要求处理,这种两个问题就是说会话 Cookie 中缺少 HTTPSOnly 属性,还有 ...

  9. asp.net core 自定义401和异常显示内容(JWT认证、Cookie Base认证失败显示内容)

    asp.net core 2.0使用JWT认证园子里已经有挺多帖子了,但开发中发现认证未授权情况下返回的401状态码是没有任何信息的,业务中可能有需要返回一串错误的Json信息.在这里我分享一个自定义 ...

最新文章

  1. java mysql乐观锁_java乐观锁使用
  2. 跟我学算法聚类(kmeans)
  3. 不吹牛,中国车主已经实现了「停车自由」
  4. python中yield的用法
  5. 图标字体iconfont的使用
  6. 循环录入某学生 5 门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误
  7. odoo中页面跳转相关
  8. Android Handler机制分析
  9. null value in entry: destinationDir=null
  10. C语言/C++程序必须从main函数开始吗?main函数执行完后还执行其他语句吗?
  11. 微信公众号教程(13)公司通讯录开发 上
  12. 淘宝网发展史:揭开神秘组织的技术内幕与艰辛历程
  13. Spring Boot2 服务假死排查分析记录
  14. html文件 加壳,CDHtmlDialog加壳HTML5页面跳转错误解决(原)
  15. 企业为什么需要BI报表工具?
  16. APP推广的渠道与运营模式分析
  17. 手机谷歌翻译位置服务器,谷歌翻译更新手机端App:中国用户可无障碍使用
  18. python中qt有哪些控件_PyQt5的基本控件整理
  19. 登录功能实现账号锁定
  20. 手机实名认证api接口有哪些类别?

热门文章

  1. Linux 调整内核参数
  2. 九章算法 | Facebook 面试题 : Backpack VI 背包算法
  3. KVM虚拟机设置虚拟机的CPU型号与物理机相同
  4. 汇编编译器以及 DOSBox0.74的安装使用(虚拟)64位
  5. C/C++面试题—链表中倒数第k个结点
  6. emWin智能家居主界面设计,含uCOS-III和FreeRTOS两个版本
  7. netcat、nc工具随记
  8. 移位运算符:,,总结
  9. JDBC初学者的basedao工具类
  10. 2016年5月30日上午(传智Bootstrap笔记六(图片样式))