NestJs 集成 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 方法中对验证后的用户数据进行处理。

posted @   楚小九  阅读(122)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示