JWT认证

简介: JWT认证

安装必要依赖包

$ pnpm add @nestjs/jwt passport-jwt
$ pnpm add -D @types/passport-jwt点击复制复制失败已复制


编写JWT实现策略

参考官方示例代码即可,此处是我的实现:

import { Inject, Injectable, UnauthorizedException } from '@nestjs/common';
import { ConfigType } from '@nestjs/config';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { CommonConfigRegister } from '../../config/registers/common.register';
import { JwtExtraPayload } from '../interfaces/jwt-extra-payload.interface';
import { JwtPayload } from '../interfaces/jwt-payload.interface';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(
    @Inject(CommonConfigRegister.KEY)
    private readonly commonConfig: ConfigType<typeof CommonConfigRegister>
  ) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      ignoreExpiration: false,
      secretOrKey: commonConfig.jwtSecret
    });
  }
  /**
   * jwt 验证
   * @param payload jwt解析后的原始荷载
   * @returns 需要的用户信息
   */
  validate(payload: JwtPayload & JwtExtraPayload): JwtPayload {
    if (payload.exp * 1000 < Date.now()) throw new UnauthorizedException();
    return { uuid: payload.uuid, role: payload.role };
  }
}点击复制复制失败已复制


module文件中声明

auth.module.ts 文件中声明:

import { Global, Module } from '@nestjs/common';
import { ConfigType } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { CommonConfigRegister } from '../config/registers/common.register';
import { UserModule } from '../user/user.module';
import { JwtStrategy } from './strategies/jwt.strategy';
@Global()
@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'jwt' }),
    JwtModule.registerAsync({
      useFactory: (commonConfig: ConfigType<typeof CommonConfigRegister>) => ({
        secret: commonConfig.jwtSecret,
        signOptions: { expiresIn: commonConfig.jwtExpiresIn }
      }),
      inject: [CommonConfigRegister.KEY]
    })
  ],
  providers: [JwtStrategy],
  exports: [JwtStrategy, JwtModule, PassportModule.register({ defaultStrategy: 'jwt' })]
})
export class AuthModule {}点击复制复制失败已复制


提示

我这里将 jwt 设置成了默认验证策略,官方并没有这么干。


使用

@UseGuards(AuthGuard())
@Controller('admin/devices')
export class DeviceAdminController {}点击复制复制失败已复制


提示

因为我们将 jwt 设置成了默认策略,所以不需要指定策略名称,如没有设置默认策略,则需要用如下写法:

@UseGuards(AuthGuard('jwt'))
@Controller('admin/devices')
export class DeviceAdminController {}点击复制复制失败已复制


或者是按照官方建议,封装 JwtAuthGuard ,如下所示:

import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}点击复制复制失败已复制


然后这样使用:

@UseGuards(JwtAuthGuard)
@Controller('admin/devices')
export class DeviceAdminController {}
目录
相关文章
|
5月前
|
安全 Java Spring
Spring Security+jwt实现认证
Spring Security+jwt实现认证
|
2月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
129 0
|
2月前
|
存储 JSON 安全
从入门到精通:Python中的OAuth与JWT,打造无懈可击的认证体系🔒
【8月更文挑战第4天】构建现代Web和移动应用时,用户认证与授权至关重要。Python集成OAuth和JWT技术,能轻松实现安全认证。本文从OAuth基础入手,介绍如何使用`requests-oauthlib`库简化流程,再到JWT进阶应用,利用`PyJWT`库生成及验证令牌。最后,探讨如何结合两者,创建无缝认证体验。通过代码示例,由浅入深地引导读者掌握构建坚固应用认证体系的方法。
59 2
|
5月前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
187 0
|
18天前
|
安全 Java 数据安全/隐私保护
|
29天前
|
JSON 安全 数据安全/隐私保护
Python 安全性大揭秘:OAuth 与 JWT,不只是认证,更是信任的传递
【9月更文挑战第4天】在数字化时代,确保应用安全至关重要。Python 作为广泛使用的编程语言,提供了强大的安全认证工具,如 OAuth 和 JWT。OAuth 是一种授权框架,允许第三方应用在有限权限下访问用户资源;JWT 则是一种自包含的数据传输格式,用于安全地传递声明。通过合理配置和使用这些技术,可以有效提升应用安全性,保障用户数据安全。正确管理和定期更新密钥、严格测试 JWT 的生成与验证等最佳实践,对于构建安全可靠的应用至关重要。不断学习新威胁,是维护应用安全的永恒课题。
39 2
|
2月前
|
JSON 安全 数据安全/隐私保护
Python 安全性大揭秘:OAuth 与 JWT,不只是认证,更是信任的传递
【8月更文挑战第6天】在数字化时代,Python 通过 OAuth 和 JWT 筑牢应用安全防线。OAuth 是一种授权框架,允许第三方应用在用户授权下安全访问资源;JWT 则是一种自包含的声明传输格式,确保通信安全。两者结合使用,能有效进行身份验证及授权管理。然而,密钥管理和 JWT 有效期设置等仍是挑战,需谨慎处理以保障整体安全性。正确配置这些工具和技术,可为用户提供既安全又便捷的服务体验。
34 7
|
2月前
|
JSON 安全 数据安全/隐私保护
Python安全新篇章:OAuth与JWT携手,开启认证与授权的新时代
【8月更文挑战第6天】随着互联网应用的发展,安全认证与授权变得至关重要。本文介绍OAuth与JWT两种关键技术,并展示如何结合它们构建安全系统。OAuth允许用户授权第三方应用访问特定信息,无需分享登录凭证。JWT是一种自包含的信息传输格式,用于安全地传递信息。通过OAuth认证用户并获取JWT,可以验证用户身份并保护数据安全,为用户提供可靠的身份验证体验。
35 6
|
2月前
|
JSON 人工智能 算法
Golang 搭建 WebSocket 应用(四) - jwt 认证
Golang 搭建 WebSocket 应用(四) - jwt 认证
41 0
|
2月前
|
JSON 安全 数据安全/隐私保护
Python认证新风尚:OAuth遇上JWT,安全界的时尚Icon👗
【8月更文挑战第5天】在日益重视数据安全与隐私保护的互联网时代,Python 作为一种流行的 Web 开发语言,其认证机制不断演进。OAuth 2.0 与 JSON Web Tokens (JWT) 成为两大热门安全认证方案,既能保障数据安全传输,又能简化用户认证流程。OAuth 2.0 通过角色分配(如资源拥有者、客户端等)实现授权,而 JWT 则以自我包含式令牌简化认证过程。在 Python 中,可以利用 Flask-OAuthlib 和 PyJWT 等库轻松实现这两种认证方式。
24 0

热门文章

最新文章

下一篇
无影云桌面