引言
JSON Web Token,简称 JWT,是一个开放标准(RFC 7519),用于在对信息进行安全传输时,将信息进行加密和签名。它使用普遍可用的加密算法进行加密,使用 Base64 编码进行转换,可以在不同的平台(用户端、服务器端)之间安全地传递信息,让安全传输变得更加简便。本文将介绍如何在 Hapi 框架中使用 hapi-auth-jwt2 对 JWT 进行验证。
Hapi 简介
Hapi 是一个 Node.js 框架,它采用插件机制,可以让开发者方便地添加更多的功能。它的设计理念是帮助开发者构建可复用、高度组合的 API 和 Web 应用程序。
hapi-auth-jwt2 简介
hapi-auth-jwt2 是 Hapi 框架中的一个插件,它提供了验证 JWT 的功能。它使用标准的 JSON Web Tokens,并利用 Hapi 插件机制进行验证。
安装 hapi-auth-jwt2
使用 npm 安装 hapi-auth-jwt2:
npm install hapi-auth-jwt2 --save
设置验证策略
使用 hapi-auth-jwt2 进行 JWT 验证的第一步是设置验证策略。验证策略主要包括验证函数和 JWT 密钥。
// www.javascriptcn.com code example
const Hapi = require('@hapi/hapi');
const JWT = require('jsonwebtoken');
const HapiJwtAuth = require('hapi-auth-jwt2');
const server = Hapi.server({
port: 8000,
host: 'localhost'
});
const validateJWT = async (decoded, request) => {
// parsed token
console.log('Validation success...');
console.log(decoded);
return { isValid: true };
};
const init = async () => {
await server.register(HapiJwtAuth);
server.auth.strategy('jwt', 'jwt', {
key: 'secret-key',
validate: validateJWT,
verifyOptions: {
algorithms: [ 'HS256' ]
}
});
server.auth.default('jwt');
await server.start();
console.log(`Server running on ${server.info.uri}`);
};在以上代码中,我们首先导入必要的依赖项,然后定义验证方法 validateJWT 和 JWT 验证策略,最后将策略设置为默认的验证策略,启动服务器。需要注意的是,在 hapi-auth-jwt2 插件中,使用 auth.strategy() 将自定义的验证策略添加到服务器实例中,并将名称设置为 jwt。调用 auth.default() 方法设置默认验证策略。
生成 JWT
在 Hapi 框架中,我们可以使用 jsonwebtoken 组件来生成 JWT。下面的示例代码展示了如何生成一个 JWT:
// www.javascriptcn.com code example
const JWT_SECRET = 'MySuperSecretKey';
const createToken = () => {
const payloadValues = {
username: 'myusername',
email: 'test@test.com',
};
const token = JWT.sign(payloadValues, JWT_SECRET, { expiresIn: '1h' });
return token;
};在 createToken() 方法中,我们定义了 payloadValues 对象,它将在生成 JWT 时包含在负载(payload)中。我们还指定了 JWT_SECRET 密钥及过期时间 expiresIn,用于控制该 JWT 的有效期。最后,我们返回生成的 JWT。
测试 JWT 验证
在你的应用程序中,可以使用以下示例代码测试 JWT 的验证:
// www.javascriptcn.com code example
const token = createToken();
const requestOptions = {
method: 'GET',
url: '/example',
headers: {
authorization: `Bearer ${token}`
}
};
const response = await server.inject(requestOptions);调用 createToken() 方法以生成一个 JWT,并将其作为 Bearer 认证标头传递到请求的 authorization 中。然后将请求的 URL 发送到服务器,并获取服务器的响应结果。如果 JWT 有效,服务器将响应成功。否则,将返回未经授权的错误。
小结
使用 hapi-auth-jwt2 插件可以让我们在 Hapi 框架中方便地实现 JWT 验证。在本文中,我们为您介绍了如何使用 hapi-auth-jwt2 插件来设置 JWT 验证策略、生成 JWT 以及测试 JWT 验证。您可以使用这些步骤来在 Hapi 应用程序中实现与 JWT 相关的功能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d01102e46428fe9ec9bd9b