热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

全面解析:安检利器的高效应用与技术特点

本文由编程笔记#小编为大家整理,主要介绍了koa-jwt 全面解析,安检利器!相关的知识,希望对你有一定的参考价值。 学习 Koa 不易,今天学习到了 koa-jwt 这个登陆验证必不可少的中间件。本
本文由编程笔记#小编为大家整理,主要介绍了koa-jwt 全面解析,安检利器!相关的知识,希望对你有一定的参考价值。


学习 Koa 不易,今天学习到了 koa-jwt 这个登陆验证必不可少的中间件。本文会说明 jwt是什么、token怎么来的、如何验证token。一反常态,先上代码!(本代码由 koa-generater 生成,安装 koa-jwt,  jsonwebtoken 两个 npm 包 )

文件名: app.js


红色框:jwt 相关的代码

蓝色框:为了完成demo,在原有脚手架中做的调整。

 

文件名: routes/index.js

koa-jwt 全面解析,安检利器!

这里简单的模仿一个 login 请求,返回一个 token。

 

文件名: routes/users.js

koa-jwt 全面解析,安检利器!

users 以下的路由需通过 jwt 验证才能访问


文件名: auth.js

koa-jwt 全面解析,安检利器!

 

思路及说明:

1.我们在浏览器输入 localhost:3000/login 获取 token。一下大串都是token,分为3部分,用 '.' 分隔;

koa-jwt 全面解析,安检利器!

2.这里用 postman 去访问 localhost:3000/users/info 模拟访问用户数据。要在 header中加入 authorization, 注意:authorization的值的格式;

koa-jwt 全面解析,安检利器!

 

3.当输入 users 路由的时候 koa-jwt 不去验证 token 的正确性,仅仅去验证header中是否有 authorization 并且值为 'Bearer token',然后再根据配置中 isRevoked 的函数去进行验证。isRevoked 返回 true 表明 token 不正确,false 表示 token 正确。

4.在验证中,使用  jsonwebtoken.verify 去验证 token 是否正确,并返回。

 

API 解析:

Koa-jwt:这个函数还是截图看得清楚

koa-jwt 全面解析,安检利器!

1.secret: 可以理解为一个加密因子,在生成 token 的时候用这个因子,验证 token 的时候也用同一个。Serect 可以是数组,当secret是一个数组时,在验证 token 时任何一个 因子通过验证,token就合法有效。

2.passthrough: 当为true时,即使在 header 中没有 authorization 也会通过这个 中间件(仅仅通过中间件的验证,没有通过 jsonwebtoken.verify)

3.isRevoked:需要一个函数来验证token的对错。这个函数有3个参数:ctx, decodedToken, token。其中 token 可以直接被验证: jsonwebtoken.verify(token)

 

Jsonwebtoken:(这个才是主角!)

jsonwebtoken.sign(payload, secretOrPrivateKey, [options, callback]) 生成 token

1.payload 是需要被加密的数据(我的理解 jwt其实就是加密解密和验证的过程)。在payload里有三个key很特别:iat(issued at)、exp(expiresIn)、nbf(notBefore),这几个参数推荐写在 options 中,不建议写在 payload 里;

2.secretOrPrivateKey 可以是字符串,也可以是对成加密的 key,或者非对称加密的私有key;

3.options 这里可以选择的参数就好多了,algorithms:加密算法,默认是HS256,expriesIn:token有效持续时间,notBefore: token在什么时候失效,更多参数请参考官网;

4.返回一个token。


jwt.verify(token, secretOrPublicKey, [options, callback]) 对token的验证

1.token : 当然是用 sign 函数生成的token啦;

2.secretOrPublicKey:与生成 token 的加密因子相互对应,要么是相同的字符串和对称加密的key,或者是非对称加密的公有key;

3.options: 与 sign 相互照应且要一致。audience,issuer,jwtid等。

4.正确的时候返回 payload,错误的时候throw 一个 err,里面包含了错误的message,根据message判断错误类型。


 

文档这里有个坑:

expiredIn:默认单位是 秒!!! 以下是铁证啊(jsonwebtoken/verify.js ,这里是用秒做的对比,千万别以为是毫秒)


 Tips: 通常情况下,我们也会在COOKIE里写一份token,这样每个请求都可以通过token验证,此时可以忽略 header中的autherization(passthrough: true)



推荐阅读
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • Django Token 认证详解与 HTTP 401、403 状态码的区别
    本文详细介绍了如何在 Django 中配置和使用 Token 认证,并解释了 HTTP 401 和 HTTP 403 状态码的区别。通过具体的代码示例,帮助开发者理解认证机制及权限控制。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 本文详细介绍了虚拟专用网(Virtual Private Network, VPN)的概念及其通过公共网络(如互联网)构建临时且安全连接的技术特点。文章探讨了不同类型的隧道协议,包括第二层和第三层隧道协议,并提供了针对IPSec、GRE以及MPLS VPN的具体配置指导。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • MongoDB的核心特性与架构解析
    本文深入探讨了MongoDB的核心特性,包括其强大的查询语言、灵活的文档模型以及高效的索引机制。此外,还详细介绍了MongoDB的体系结构,解释了其文档、集合和数据库的层次关系,并对比了MongoDB与传统关系型数据库(如MySQL)的逻辑结构。 ... [详细]
  • 本文详细探讨了 PHP 中常见的 '未定义索引' 错误,包括其原因、解决方案及最佳实践。通过实例和代码片段,帮助开发者更好地理解和处理这一常见问题。 ... [详细]
  • 本文介绍如何在Grafana配置面板时,使用JSONNet获取数组中特定元素的位置,并将其应用于动态服务查询。 ... [详细]
  • 开发笔记:由数据库某字段存数组引发的json_encode/serialize思考
    开发笔记:由数据库某字段存数组引发的json_encode/serialize思考 ... [详细]
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • 本文详细探讨了在微服务架构中,使用Feign进行远程调用时出现的请求头丢失问题,并提供了具体的解决方案。重点讨论了单线程和异步调用两种场景下的处理方法。 ... [详细]
author-avatar
llllllw_wlllllll
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有