JSON Web Tokens(JWT)是在 Web 应用程序中实现身份验证的标准方法之一。在这篇文章中,我们将探讨如何使用 Hapi 插件 hapi-auth-jwt2 实现 JWT Token 鉴权。
什么是 JWT
JWT 是一种开放标准(RFC 7519),用于在网络应用程序和服务之间安全地传输信息。JWT 是一种紧凑且自包含的方式,其中包含了被称为声明(claims)的信息。这些声明可以用于身份验证、授权和信息交换。
JWT 由三部分组成:头部(header)、载荷(payload)和签名(signature)。头部包含有关 JWT 类型和算法的信息。载荷包含有关用户和其他信息的声明。签名用于验证 JWT 的真实性。
以下是一个包含 JWT 头部、载荷和签名的示例 JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
什么是 Hapi-auth-jwt2
Hapi-auth-jwt2 是 Hapi 框架的一个插件,用于实现 JWT Token 鉴权。它使用 JSON Web Tokens 的标准,为 Hapi 应用程序提供身份验证和授权功能。
Hapi-auth-jwt2 插件提供了很多配置选项,包括 JWT 的加密算法、密钥、有效期等。
如何使用 Hapi-auth-jwt2 实现 JWT Token 鉴权
下面我们来演示如何使用 Hapi-auth-jwt2 插件实现 JWT Token 鉴权,并且保护需要鉴权的路由。
安装 Hapi-auth-jwt2
首先,您需要安装 Hapi-auth-jwt2 插件。在命令行中执行以下命令:
npm install hapi-auth-jwt2 --save
创建一个 JWT Token
接下来,我们需要使用 JWT 库创建一个 JWT Token。示例代码如下:
const jwt = require('jsonwebtoken'); const token = jwt.sign({ foo: 'bar' }, 'secret'); console.log(token);
此代码使用 jsonwebtoken
库创建了一个包含 { foo: 'bar' }
载荷的 JWT Token,并使用字符串 secret
作为加密密钥。结果会在控制台中打印出 JWT Token。
配置 Hapi-auth-jwt2 插件
现在,我们需要在 Hapi 应用程序中配置 Hapi-auth-jwt2 插件。示例代码如下:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- ------- - -------------------------- ----- --- - ------------------------ -- -- ---- ---- ----- ------ - ------------- ----- ----- ----- ----------- --- -- -- -------------- -- ----- ------------------------- -- -- --- ---- ----- ---------- - - ---- --------- -------------- - ----------- --------- - -- -- -- --- ------ ----- -------- - ----- --------- -------- -- -- - -- ------------ --- ------ - ------ - -------- ---- -- - ------ - -------- ----- -- -- -- -- --- ---- --------------------------- ------ - -------------- -------- --- -- --------- -------------- ------- ------ ----- ------------- ------- - ----- ----- -- -------- ----- --------- -- -- - ------ -------- -- --- --------- -------- - --- -- ------ ----- ---------------
在这段代码中,我们首先创建了一个 Hapi 应用程序,然后注册了 Hapi-auth-jwt2 插件。
接着,我们定义了 JWT 插件选项,并使用 key
选项指定了 JWT 的加密密钥。verifyOptions
选项用于指定 JWT 校验的算法。
我们还定义了一个叫做 validate
的验证函数,用于验证 JWT Token 的有效性。如果 JWT Token 中的 foo
属性等于 'bar'
,则验证函数将返回一个对象,其中包含一个名为 isValid
的布尔属性。
最后,我们为 JWT 鉴权策略指定 jwt
插件和验证函数,并将此策略应用于 '/protected'
路由。
测试 JWT Token 鉴权
现在,如果我们想通过鉴权后的路由,我们需要在请求的 Authorization
头中加入 JWT Token。示例代码如下:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- --- - ------------------------ -- ---- --- ----- ----- ----- - ---------- ---- ----- -- ---------- -- -- ---- --- ----- ------ - --- -------------- -- ---- --- ----- --- ----- - ------- - - ----- --------------- ------- ------ ---- ------------- -------- - -------------- ------- --------- - --- -- ------ ---------------------
如果使用正确的 JWT Token,此代码将输出 Welcome to the protected route!
。
如果 JWT Token 无效或已过期,则 Hapi-auth-jwt2 插件将返回 HTTP 状态码 401 Unauthorized
。
结论
在这篇文章中,我们展示了如何使用 Hapi-auth-jwt2 插件实现 JWT Token 鉴权。我们示范了如何创建 JWT Token、配置 Hapi-auth-jwt2 插件以及如何在需要鉴权的路由中应用 JWT 鉴权策略。希望本文能对你有所帮助,让你更好地掌握 Hapi 框架的鉴权功能,并在你的项目中得到应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674d5b2fa336082f254c98f5