Files
seclusion/apps/api/src/app.module.ts
charilezhou 90513e8278 feat: 实现完整的 OIDC Provider 功能
- 后端:基于 node-oidc-provider 实现 OIDC Provider
  - 支持 authorization_code、refresh_token、client_credentials 授权类型
  - Redis adapter 存储会话数据,Prisma adapter 存储持久化数据
  - 客户端管理 CRUD API(创建、更新、删除、重新生成密钥)
  - 交互 API(登录、授权确认、中止)
  - 第一方应用自动跳过授权确认页面
  - 使用 cuid2 生成客户端 ID

- 前端:OIDC 客户端管理界面
  - 客户端列表表格(支持分页、排序)
  - 创建/编辑弹窗(支持所有 OIDC 配置字段)
  - OIDC 交互页面(登录表单、授权确认表单)

- 共享类型:添加 OIDC 相关 TypeScript 类型定义

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:22:32 +08:00

50 lines
1.6 KiB
TypeScript

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { ClassModule } from './class/class.module';
import { CaptchaModule } from './common/captcha/captcha.module';
import { CryptoModule } from './common/crypto/crypto.module';
import { EmailCodeModule } from './common/email-code/email-code.module';
import { MailModule } from './common/mail/mail.module';
import { RedisModule } from './common/redis/redis.module';
import { StorageModule } from './common/storage/storage.module';
import { FileModule } from './file/file.module';
import { OidcModule } from './oidc/oidc.module';
import { PermissionModule } from './permission/permission.module';
import { PrismaModule } from './prisma/prisma.module';
import { StudentModule } from './student/student.module';
import { TeacherModule } from './teacher/teacher.module';
import { UserModule } from './user/user.module';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
// 优先级:本地 > 应用级
envFilePath: ['.env.local', '.env'],
}),
PrismaModule,
RedisModule,
CryptoModule,
CaptchaModule,
MailModule,
EmailCodeModule,
StorageModule,
FileModule,
AuthModule,
UserModule,
PermissionModule,
OidcModule,
// 教学管理模块
TeacherModule,
ClassModule,
StudentModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}