在 Hapi 应用程序中使用 JWT 进行身份验证的技巧
在现代web应用中,身份验证是必不可少的组成部分。JSON Web Tokens(JWT)是用于身份验证和授权的重要工具。在Hapi平台上,它们可以通过使用hapi-auth-jwt2插件轻松集成到应用程序中。本文将介绍在Hapi应用程序中使用JWT进行身份验证的技巧和步骤。
什么是JSON Web Token(JWT)?
JSON Web Token(JWT)是一种基于JSON格式的开放标准,用于在网络应用程序和服务之间传递声明。JWT包括签名而不是加密,因此可以通过任何人读取,但只能由预期的收件人使用。JWT有三个部分:Header,Payload和Signature。
Header包含有关算法的信息,例如HS256,用于对JWT进行签名的HMAC算法。
Payload包含有关用户身份的有用信息,例如用户名。
Signature是将Header和Payload进行签名后的结果,以便验证JWT。
如何使用JWT进行身份验证?
步骤1:安装hapi-auth-jwt2插件
首先,在Hapi应用程序中使用JWT进行身份验证,您需要安装hapi-auth-jwt2插件。可以通过在终端中输入以下命令来安装该插件:
npm install hapi-auth-jwt2
步骤2:在应用程序中配置JWT策略
在安装了hapi-auth-jwt2插件之后,您需要在应用程序中配置JWT策略。要配置JWT策略,请按照以下代码示例进行操作:
const hapi = require('hapi'); const jwt = require('jsonwebtoken'); const users = require('./users'); // Fetch users data from a database or file
const plugin = { plugin: require('hapi-auth-jwt2'), options: { secret: 'abcdef123456', // Your secret key here algorithms: ['HS256'] } };
const server = hapi.server({ port: 3000, host: 'localhost' });
const init = async () => { await server.register(plugin);
-- -------------------- ---- ------- --------------------------- ------ - ---- --------------- -- ---- -- --- ------ --- -- ------- --------- ----- --------- -------- -- -- - ----- - ----------- - - -------- -- ----- --- ---- ---- --- -------- -- ---- ----- ---- - ------------ -- ---------- --- -------------------- -- ---------- --- ---------------------- -- ------ - ---- ------ -- --- ---- ------ -- ------ - ------ - -------- ----- ------------ ---- -- - -- ------ -- ----- -- --- ---- ---- --- ----- ------ - -------- ----- -- - --- -------------- ------- ------ ----- ---- -------- --------- -- -- - ----- - ---- - - ------------------------- -- ------ --- ------ ---- ------ ------- ---------- -- -------- - ----- ----- - --- ----- --------------- ------------------- ------- --- ---------------------
};
init();
以下是如何配置JWT策略的解释:
首先,我们创建一个插件对象,该对象包含我们要使用的选项。在此示例中,我们定义了一个秘密键和一个算法列表。
接下来,我们创建一个hapi服务器对象并将插件对象注册到其中。
接下来,我们使用 auth.strategy() 方法在服务器上创建一个JWT策略。在此方法中,您需要定义一个“ validate ”函数,该函数负责验证JWT。在此示例中,我们使用 JWT 中的user数据与数据库或文件中的数据进行比较。这是您根据自己的身份验证机制进行处理的地方。
最后,我们创建一个路由函数,在其中调用“ request.auth.credentials ”以获取包含用户凭据的JSON对象。您可以将该对象传递给处理程序中的任何其他函数,并将其用于用户身份验证。
步骤3:创建和签署JWT
现在,我们已经在应用程序中配置了JWT策略,接下来需要创建和签署JWT,以便在应用程序中使用它进行身份验证。可以通过按照以下示例代码在代码中创建和签署JWT:
const createToken = (user) => { const { username } = user;
return jwt.sign({ credentials: { username } }, 'abcdef123456', { expiresIn: '1h' });
};
在此示例中,我们创建了一个名为“ createToken() ”的函数,它获取一个用户对象,并使用该用户的用户名创建并签署JWT。我们使用 'abcdef123456' 作为密钥,并指定JWT的过期时间为1小时。
步骤4:通过请求向应用程序发送JWT
现在,我们已经创建了JWT并在应用程序中配置了JWT策略,接下来需要将JWT通过请求发送到应用程序,以便在其中使用它进行身份验证。可以通过按照以下示例代码将JWT添加到HTTP头中的请求中来做到这一点:
fetch('http://localhost:3000/', {
method: 'GET',
credentials: 'include',
headers: {
'Authorization': Bearer ${token}
}
});
在此示例中,我们使用管理员向其授予的JWT向服务器发送了GET请求。我们将JWT添加到HTTP头中的请求中,其中包括“ Authorization ”和“ Bearer ”选项,并设置应用程序的特定JWT。
结论
在本文中,我们介绍了在Hapi应用程序中使用JWT进行身份验证的技巧和步骤。我们通过解释什么是JSON Web Tokens(JWT),在应用程序中配置JWT策略,创建和签署JWT,以及将JWT通过请求发送到应用程序来详细说明了这些步骤。使用这些技巧和步骤,在您的Hapi应用程序中轻松地实现JWT身份验证!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6776adb76d66e0f9aa274450