如何在节点中利用koa2实现一个JWT鉴权功能

  介绍

今天就跟大家聊聊有关如何在节点中利用koa2实现一个JWT鉴权功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

JWT简介

什么是JWT

全称<代码> JSON Web标记> 对象,发回给用户。用户与服务端通信的时候,都要发回这个JSON代码 <代码>对象。

该JSON <代码> 类似如下:

{   ,“姓名“:,“张三“,   ,“角色,:,“管理员“,   ,“到期时间,:,“,2018年7月1日0点0分,   }

为什么需要JWT

先看下一般的认证流程,基于<代码> session_id 和<代码>饼干实现

1,用户向服务器发送用户名和密码。

2,服务器验证通过后,在当前对话(<代码>会话>

3,服务器向用户返回一个<代码> session_id> 饼干

4,用户随后的每一次请求,都会通过<代码>饼干> session_id>

5,服务器收到<代码> session_id>

但是这里有一个大的问题,假如是服务器集群,则要求会话数据共享,每台服务器都能够读取会议。这个实现成本是比较大的。

而<代码> JWT> 数据返回给前端的,前端再次请求时候将数据发送到后端,后端进行验证。也就是服务器是无状态的,所以更加容易拓展。

JWT的数据结构

<代码> JWT>

<代码>头> {   ,“alg":,“HS256"   ,“typ":“JWT"   }

<代码> alg 属性表示签名的算法(<代码>算法> HMAC SHA256> HS256> typ 属性表示这个令牌(<代码>标记> 类型> JWT 令牌统一写为<代码> JWT

<代码>有效载荷> JWT> <李>

iss(发行人):签发人

<李>

exp(过期时间):过期时间

<李>

子(主题):主题

<李>

澳元(观众):受众

<李>

nbf之前(不):生效时间

<李>

iat(发布):签发时间

<李>

jti (JWT ID):编号

当然也可以自定义私有字段。但是要注意,JWT默认是不加密的,任何人都可以读到,所以不要把秘密信息放在这个部分。

<代码> 秘密> 头> HMAC SHA256> HMACSHA256 (   ,base64UrlEncode(头),+,“干净+   ,base64UrlEncode(载荷),   以前,秘密)

算出签名以后,把<代码>头,<代码>有效载荷>

如何在Node中利用koa2实现一个JWT鉴权功能

JWT 的安全

  • JWT 默认是不加密,但也是可以加密的。 JWT 不加密的情况下,不能将秘密数据写入 JWT

  • JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用, JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证

  • 为了减少盗用, JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输

Node 简单demo—— Koa JWT 的实现

说完理论知识,我们来看下如何实现 JWT ,大致的流程如下:

如何在Node中利用koa2实现一个JWT鉴权功能

如何在节点中利用koa2实现一个JWT鉴权功能