热门标签 | 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)



推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • DCG 创始人兼首席执行官 Barry Silbert 发布致股东信,详细解答了 19 个核心问题,并分享了公司未来的发展方向。 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 在API测试中,我们常常需要通过大量不同的数据集(包括正常和异常情况)来验证同一个接口。如果为每种场景单独编写测试用例,不仅繁琐而且效率低下。采用数据驱动的方式可以有效简化这一过程。本文将详细介绍如何利用CSV文件进行数据驱动的API测试。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • Composer Registry Manager:PHP的源切换管理工具
    本文介绍了一个用于Composer的源切换管理工具——Composer Registry Manager。该项目旨在简化Composer包源的管理和切换,避免与常见的CRM系统混淆,并提供了详细的安装和使用指南。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 探讨在循环中调用$.post()时,回调函数为何会在循环结束后才开始执行,并提供解决方案和优化建议。 ... [详细]
  • TCP长连接设备管理平台:架构与功能概览
    本文介绍了基于TCP长连接的设备管理平台的设计理念、技术选型及主要功能模块。最初,项目旨在实现简单的协议测试,但随着需求扩展,逐步演变为一个完整的前后端分离系统。 ... [详细]
  • 深入剖析 DEX 赛道:从 60 大头部项目看五大趋势
    本文通过分析 60 大头部去中心化交易平台(DEX),揭示了当前 DEX 赛道的五大发展趋势,包括市场集中度、跨链协议、AMM+NFT 结合、新公链崛起以及稳定币和衍生品交易的增长潜力。 ... [详细]
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社区 版权所有