首页 > 其他分享 >NestJs 集成 OIDC

NestJs 集成 OIDC

时间:2023-07-14 17:11:20浏览次数:28  
标签:集成 nestjs auth NestJs passport import OIDC oidc

要将 OIDC 集成到 NestJS 中,可以按照以下步骤进行操作:

首先,确保已经安装了 @nestjs/passport 和 passport 这两个依赖包,以便使用 Passport 和 OIDC 策略。

npm install --save @nestjs/passport passport

然后,安装用于 OIDC 的 Passport 策略包。这里以 passport-openidconnect 为例。

npm install --save passport-openidconnect

创建一个 OIDC 策略文件,比如 oidc.strategy.ts,并将以下代码添加到文件中:

import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { OpenIdConnectStrategy } from 'passport-openidconnect';

@Injectable()
export class OidcStrategy extends PassportStrategy(OpenIdConnectStrategy, 'oidc') {
  constructor() {
    super({
      issuer: 'https://your-oidc-provider.com', // OIDC 提供者的 URL
      clientID: 'your-client-id', // 您的客户端 ID
      clientSecret: 'your-client-secret', // 您的客户端密钥
      callbackURL: 'http://localhost:3000/auth/oidc/callback', // OIDC 验证成功后的回调 URL
      scope: 'openid profile', // 请求的 OIDC 范围
    });
  }

  async validate(accessToken: string, refreshToken: string, profile: any) {
    // 在此处处理验证后的用户数据
    return profile;
  }
}

添加策略到控制器或模块中,以便使用该策略:

import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { OidcStrategy } from './oidc.strategy';

@Controller('auth')
export class AuthController {
  constructor(private readonly oidcStrategy: OidcStrategy) {}

  @Get('oidc')
  @UseGuards(AuthGuard('oidc'))
  async oidcAuth() {
    // 这里不需要执行任何操作,只需使用 @UseGuards() 注解来应用 OIDC 策略即可
  }

  @Get('oidc/callback')
  @UseGuards(AuthGuard('oidc'))
  async oidcCallback() {
    // 这里不需要执行任何操作,只需使用 @UseGuards() 注解来应用 OIDC 策略即可
  }
}

最后,将 OIDC 模块添加到应用程序的根模块中:

import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { AuthController } from './auth.controller';
import { OidcStrategy } from './oidc.strategy';

@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'oidc' }),
  ],
  controllers: [AuthController],
  providers: [OidcStrategy],
})
export class AppModule {}

完成上述步骤后,NestJS 应用程序就可以使用 OIDC 策略进行认证了。可以通过访问 /auth/oidc 路径来启动 OIDC 认证流程,当验证成功后,将会重定向到 /auth/oidc/callback 路径并返回验证后的用户数据。您可以在 validate 方法中对验证后的用户数据进行处理。

标签:集成,nestjs,auth,NestJs,passport,import,OIDC,oidc
From: https://www.cnblogs.com/xiaojiuwow/p/17554449.html

相关文章

  • 5.3 集成学习 - Boosting与AdaBoost
    1Boosting方法的基本思想在集成学习的“弱分类器集成”领域,除了降低方差来降低整体泛化误差的装袋法Bagging,还有专注于降低整体偏差来降低泛化误差的提升法Boosting。相比起操作简单、大道至简的Bagging算法,Boosting算法在操作和原理上的难度都更大,但由于专注于偏差降低,Boosting......
  • 集成测试最全详解,看完必须懂了
    什么是集成测试集成测试(IntegrationTesting),也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它最简单的形式是:把两个已经测试过的单元组合成一个组件,测试......
  • nestjs入门学习 | day2
    nestjs入门学习|day2day2:nest基础知识点学习:中间件、异常过滤器、守卫、管道、拦截器中间件Nest中间件可以是一个函数,也可以是一个带有@Injectable()装饰器的类,且该类应该实现NestMiddleware接口,而函数没有任何特殊要求。如下是一个日志中间件的简单示例:import{......
  • nestjs入门学习 | day1
    nestjs入门学习|day1day1:为什么要用nestjs,和egg区别对比nest项目初始化,了解目录结构nestcli命令了解nest基础知识点学习:控制器、服务、模块为什么要用nestjs,和egg区别对比官网介绍Nest提供了一种开箱即用的应用程序架构,允许开发人员和团队创建高度可测试、可扩展......
  • 【NestJS系列】从Nest CLI开始入门
    初识NestJSNest是一个渐进的Node.js框架,它可以在TypeScript和JavaScript(ES6、ES7、ES8)之上构建高效、可伸缩的企业级服务器端应用程序。Nest基于TypeScript编写并且结合了OOP(面向对象编程),FP(函数式编程)和FRP(函数式响应编程)的相关理念。在设计上的很多灵感来自于......
  • 13-MongoDB 集成:如何在响应式应用中访问 NoSQL 数据库
    上一讲开始,我们进入了响应式数据访问这一模块的学习,并且引出了Spring家族中专门用于实现数据访问的SpringData框架及其响应式版本。我们知道SpringData支持多种响应式Repository用来构建全栈响应式编程模型,而MongoDB就是其中具有代表性的一种数据存储库。今天,我就将结......
  • SpringBoot 集成和使用 Dubbo
    Dubbo是阿里开源的产品,采用二进制通信,相比OpenFeign的http通信,具有性能优势,可以轻松集成到SpringBoot和SpringCloud中使用,对于性能要求比较高的场景,使用比较广泛。早期的Dubbo都采用Zookeeper作为注册中心,现在基本上大家都使用Nacos作为注册中心,毕竟Dubbo和Nac......
  • VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动
    VMwareESXi7.0U3nmacOSUnlocker&OEMBIOS集成网卡驱动和NVMe驱动(集成驱动版)ESXi7U3标准版集成Intel网卡、USB网卡和NVMe驱动请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-sysin/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org2023......
  • JAVA集成velocity实现对已有模板替换(占位符变量)替换
      平时我们如果有一些简单的模板替换需求,比如有个txt文件,或者代码生成模板文件要根据传入的变量替换成具体的值就可以使用这个框架 依赖<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId>......
  • 数据采集协同架构,集成马扎克、西门子、海德汉、广数、凯恩帝、三菱、海德汉、兄弟、哈
    文章目录前言一、采集协同架构是什么?可以做什么(数控、PLC配置采集)?二、使用步骤1.打开软件,配置MQTT或者数据库(支持sqlserver、mysql等)存储转发消息规则2.配置数控系统所采集的参数、转发名称以及采集频率3.配置完成后,配置需要采集的设备清单4.设备配置完成后,系统将会自动加......