Hapi 框架中使用 jwks-rsa 插件验证 JWT 令牌

在 Web 应用程序中,JWT(JSON Web Token)是一种常用的认证和授权机制。它使用 JSON 格式对用户进行身份验证并授权访问资源。在验证 JWT 令牌时,我们需要使用一些工具和库来确保它们是有效的,并且没有被篡改或伪造。在 Hapi 框架中,我们可以使用 jwks-rsa 插件来验证 JWT 令牌的签名。

什么是 jwks-rsa 插件?

jwks-rsa 插件是一个 Hapi 插件,用于验证 JWT 令牌的签名。它通过使用公钥密钥对来验证 JWT 令牌的签名,确保它们是有效的并且没有被篡改或伪造。它还支持从远程 JWKS(JSON Web Key Set)端点获取公钥,以便在验证 JWT 令牌时使用。

如何使用 jwks-rsa 插件验证 JWT 令牌?

使用 jwks-rsa 插件验证 JWT 令牌需要以下步骤:

  1. 安装 jwks-rsa 插件
npm install @hapi/jwks-rsa
  1. 注册 jwks-rsa 插件
const Hapi = require('@hapi/hapi');
const Jwt = require('@hapi/jwt');
const JwksRsa = require('@hapi/jwks-rsa');

const server = new Hapi.Server({
  port: 3000,
});

const init = async () => {
  await server.register([
    Jwt,
    {
      plugin: JwksRsa,
      options: {
        cache: true,
        rateLimit: true,
        jwksRequestsPerMinute: 5,
        jwksUri: 'https://example.com/.well-known/jwks.json',
      },
    },
  ]);
};

init();

在上面的代码中,我们注册了 Jwt 和 jwks-rsa 插件,并将 jwks-rsa 插件配置为使用远程 JWKS 端点 https://example.com/.well-known/jwks.json

  1. 配置路由
const routes = [
  {
    method: 'GET',
    path: '/',
    options: {
      auth: {
        strategies: ['jwt'],
        access: {
          scope: ['user'],
        },
      },
      handler: (request, h) => {
        return 'Hello, world!';
      },
    },
  },
];

server.route(routes);

在上面的代码中,我们定义了一个 GET 路由,并使用 auth 选项来指定使用 JWT 认证和授权。我们还指定了 scope 选项来限制访问该路由的用户必须具有 user 范围。

  1. 创建 JWT 令牌
const Jwt = require('@hapi/jwt');
const token = Jwt.token.generate({
  aud: 'https://example.com/api',
  iss: 'https://example.com/',
  scope: ['user'],
});

在上面的代码中,我们使用 @hapi/jwt 库创建了一个 JWT 令牌,并指定了 audissscope 声明。

  1. 发送 JWT 令牌

在发送 JWT 令牌时,我们需要将其添加到 HTTP 请求的 Authorization 头部中。例如:

  1. 验证 JWT 令牌
const Jwt = require('@hapi/jwt');
const decoded = Jwt.token.decode(token);
const verified = await server.auth.test('jwt', {
  credentials: decoded.payload,
});

在上面的代码中,我们使用 @hapi/jwt 库解码 JWT 令牌,并使用 server.auth.test() 方法验证 JWT 令牌的签名和范围。如果 JWT 令牌有效并且具有正确的范围,verified 将为 true

总结

在本文中,我们介绍了如何使用 jwks-rsa 插件验证 JWT 令牌的签名。我们学习了如何安装 jwks-rsa 插件、注册插件、配置路由、创建 JWT 令牌、发送 JWT 令牌和验证 JWT 令牌。通过使用 jwks-rsa 插件,我们可以轻松地验证 JWT 令牌并确保它们是有效的。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c11b5eadd4f0e0ffb0f29e