@builder6/oidc 3.2.1 → 3.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +256 -3
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -1,11 +1,264 @@
1
1
  # Builder6 OIDC Client Module
2
2
 
3
+ Builder6 OIDC 客户端模块为 Builder6 平台提供 OpenID Connect (OIDC) 身份认证集成功能,支持通过外部身份提供者(IdP)进行单点登录(SSO)和用户认证。
3
4
 
4
- ## Environment Variables
5
+ ## 功能特性
5
6
 
6
- ```shell
7
+ - **OpenID Connect 认证**: 支持标准的 OIDC 认证流程
8
+ - **单点登录 (SSO)**: 与企业身份提供者集成实现 SSO
9
+ - **多种认证流程**: 支持授权码流程(Authorization Code Flow)
10
+ - **用户信息同步**: 自动同步 OIDC 提供者的用户信息
11
+ - **会话管理**: 管理用户会话和令牌刷新
12
+ - **移动端支持**: 检测移动设备并提供优化的登录体验
13
+ - **安全令牌处理**: 安全地处理访问令牌和刷新令牌
14
+
15
+ ## 安装
16
+
17
+ ```bash
18
+ npm install @builder6/oidc
19
+ ```
20
+
21
+
22
+
23
+ ```bash
24
+ yarn add @builder6/oidc
25
+ ```
26
+
27
+ ## 环境变量
28
+
29
+ ### OIDC 基本配置
30
+
31
+ ```bash
32
+ # 启用 OIDC 认证
7
33
  B6_OIDC_ENABLED=true
34
+
35
+ # OIDC 提供者的 Issuer URL
8
36
  B6_OIDC_ISSUER=https://id.steedos.cn/realms/master
37
+
38
+ # OIDC 客户端 ID
9
39
  B6_OIDC_CLIENT_ID=steedos-oidc-public
10
- B6_OIDC_CLIENT_SECRET=none
40
+
41
+ # OIDC 客户端密钥(如果是机密客户端)
42
+ B6_OIDC_CLIENT_SECRET=your-client-secret
43
+
44
+ # 重定向 URI(回调地址)
45
+ B6_OIDC_REDIRECT_URI=http://localhost:5100/api/v6/oidc/callback
46
+
47
+ # 登出后重定向 URI
48
+ B6_OIDC_POST_LOGOUT_REDIRECT_URI=http://localhost:5100
49
+ ```
50
+
51
+ ### 高级配置
52
+
53
+ ```bash
54
+ # OIDC 作用域(空格分隔)
55
+ B6_OIDC_SCOPE=openid profile email
56
+
57
+ # 响应类型
58
+ B6_OIDC_RESPONSE_TYPE=code
59
+
60
+ # 启用 PKCE(公共客户端推荐)
61
+ B6_OIDC_PKCE_ENABLED=true
62
+
63
+ # ID 令牌签名算法
64
+ B6_OIDC_ID_TOKEN_SIGNED_RESPONSE_ALG=RS256
65
+
66
+ # 用户信息端点认证方法
67
+ B6_OIDC_USERINFO_SIGNED_RESPONSE_ALG=RS256
68
+ ```
69
+
70
+ ## 使用示例
71
+
72
+ ### 在 NestJS 应用中集成
73
+
74
+ ```typescript
75
+ import { Module } from '@nestjs/common';
76
+ import { OidcModule } from '@builder6/oidc';
77
+
78
+ @Module({
79
+ imports: [OidcModule],
80
+ })
81
+ export class AppModule {}
82
+ ```
83
+
84
+ ### OIDC 认证流程
85
+
86
+ 1. **发起登录**: 用户访问登录页面
87
+ 2. **重定向到 IdP**: 应用重定向到 OIDC 提供者
88
+ 3. **用户认证**: 用户在 IdP 上完成认证
89
+ 4. **回调处理**: IdP 重定向回应用的回调地址
90
+ 5. **令牌交换**: 应用使用授权码交换访问令牌
91
+ 6. **用户信息获取**: 获取用户信息并创建会话
92
+
93
+ ### 登录按钮示例
94
+
95
+ ```html
96
+ <!-- 前端登录按钮 -->
97
+ <a href="/api/v6/oidc/auth">使用 OIDC 登录</a>
98
+ ```
99
+
100
+ ### 在控制器中使用 OIDC 服务
101
+
102
+ ```typescript
103
+ import { OidcService } from '@builder6/oidc';
104
+
105
+ constructor(private oidcService: OidcService) {}
106
+
107
+ // 发起 OIDC 认证
108
+ @Get('auth')
109
+ async initiateAuth(@Res() res: Response) {
110
+ const authUrl = await this.oidcService.getAuthorizationUrl();
111
+ res.redirect(authUrl);
112
+ }
113
+
114
+ // 处理回调
115
+ @Get('callback')
116
+ async handleCallback(@Query('code') code: string, @Req() req: Request) {
117
+ const tokens = await this.oidcService.getTokens(code);
118
+ const userInfo = await this.oidcService.getUserInfo(tokens.access_token);
119
+
120
+ // 创建用户会话
121
+ req.session.user = userInfo;
122
+
123
+ return { success: true, user: userInfo };
124
+ }
125
+
126
+ // 登出
127
+ @Get('logout')
128
+ async logout(@Req() req: Request, @Res() res: Response) {
129
+ const logoutUrl = await this.oidcService.getLogoutUrl(
130
+ req.session.id_token
131
+ );
132
+ req.session.destroy();
133
+ res.redirect(logoutUrl);
134
+ }
135
+ ```
136
+
137
+ ## API 端点
138
+
139
+ 模块提供以下主要 API 端点:
140
+
141
+ - **GET `/api/v6/oidc/auth`**: 发起 OIDC 认证流程
142
+ - **GET `/api/v6/oidc/callback`**: OIDC 回调处理端点
143
+ - **GET `/api/v6/oidc/logout`**: OIDC 登出端点
144
+ - **GET `/api/v6/oidc/userinfo`**: 获取当前用户信息
145
+
146
+ ## 支持的 OIDC 提供者
147
+
148
+ 该模块兼容任何符合 OpenID Connect 规范的身份提供者,包括但不限于:
149
+
150
+ - **Keycloak**: 开源身份和访问管理解决方案
151
+ - **Auth0**: 商业身份平台
152
+ - **Okta**: 企业级身份管理
153
+ - **Azure AD**: Microsoft Azure Active Directory
154
+ - **Google Identity**: Google 身份服务
155
+ - **自定义 OIDC 服务器**: 任何符合 OIDC 标准的服务
156
+
157
+ ## 配置示例
158
+
159
+ ### Keycloak 配置
160
+
161
+ ```bash
162
+ B6_OIDC_ENABLED=true
163
+ B6_OIDC_ISSUER=https://keycloak.example.com/realms/myrealm
164
+ B6_OIDC_CLIENT_ID=builder6-client
165
+ B6_OIDC_CLIENT_SECRET=your-secret
166
+ B6_OIDC_REDIRECT_URI=http://localhost:5100/api/v6/oidc/callback
167
+ ```
168
+
169
+ ### Auth0 配置
170
+
171
+ ```bash
172
+ B6_OIDC_ENABLED=true
173
+ B6_OIDC_ISSUER=https://your-tenant.auth0.com
174
+ B6_OIDC_CLIENT_ID=your-client-id
175
+ B6_OIDC_CLIENT_SECRET=your-client-secret
176
+ B6_OIDC_REDIRECT_URI=http://localhost:5100/api/v6/oidc/callback
177
+ ```
178
+
179
+ ### Azure AD 配置
180
+
181
+ ```bash
182
+ B6_OIDC_ENABLED=true
183
+ B6_OIDC_ISSUER=https://login.microsoftonline.com/your-tenant-id/v2.0
184
+ B6_OIDC_CLIENT_ID=your-application-id
185
+ B6_OIDC_CLIENT_SECRET=your-client-secret
186
+ B6_OIDC_REDIRECT_URI=http://localhost:5100/api/v6/oidc/callback
11
187
  ```
188
+
189
+ ## 移动端支持
190
+
191
+ 模块使用 `ismobilejs` 检测移动设备,并可以为移动端提供定制的登录体验:
192
+
193
+ ```typescript
194
+ import { isMobile } from '@builder6/oidc';
195
+
196
+ if (isMobile(req)) {
197
+ // 提供移动端优化的登录流程
198
+ }
199
+ ```
200
+
201
+ ## 安全特性
202
+
203
+ - **PKCE 支持**: 增强公共客户端的安全性
204
+ - **State 参数**: 防止 CSRF 攻击
205
+ - **Nonce 验证**: 防止重放攻击
206
+ - **令牌验证**: 自动验证 ID 令牌签名
207
+ - **安全存储**: 令牌安全存储在服务器端会话中
208
+
209
+ ## 依赖项
210
+
211
+ ### 主要依赖
212
+
213
+ - `openid-client`: ^5.7.1 - OpenID Connect 客户端库
214
+ - `ejs`: ^3.1.10 - 模板引擎
215
+ - `ismobilejs`: ^1.1.1 - 移动设备检测
216
+ - `lodash`: ^4.17.21 - 工具函数库
217
+ - `request-ip`: ^3.3.0 - IP 地址获取
218
+
219
+ ### Peer Dependencies
220
+
221
+ - `@builder6/core`: ^3.0.10 - 核心功能模块
222
+ - `@nestjs/common`: ^11.0.0 - NestJS 核心
223
+ - `@nestjs/core`: ^11.0.0 - NestJS 核心
224
+ - `@nestjs/swagger`: ^11.0.7 - API 文档
225
+
226
+ ## 开发
227
+
228
+ ### 构建
229
+
230
+ ```bash
231
+ npm run build
232
+ ```
233
+
234
+ ### 监听模式
235
+
236
+ ```bash
237
+ npm run build:watch
238
+ ```
239
+
240
+ ### 格式化代码
241
+
242
+ ```bash
243
+ npm run format
244
+ ```
245
+
246
+ ## 使用场景
247
+
248
+ - **企业 SSO**: 与企业身份提供者集成实现单点登录
249
+ - **社交登录**: 通过 Google、Microsoft 等社交账号登录
250
+ - **多租户应用**: 支持多个 OIDC 租户配置
251
+ - **零信任架构**: 基于 OIDC 的现代身份认证架构
252
+
253
+ ## 故障排查
254
+
255
+ ### 常见问题
256
+
257
+ 1. **重定向 URI 不匹配**: 确保 `B6_OIDC_REDIRECT_URI` 与 IdP 中配置的回调 URL 完全一致
258
+ 2. **CORS 错误**: 确保 IdP 允许应用的域名
259
+ 3. **令牌验证失败**: 检查 IdP 的签名算法配置
260
+ 4. **用户信息获取失败**: 确保请求的作用域包含必要的用户信息
261
+
262
+ ## License
263
+
264
+ MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builder6/oidc",
3
- "version": "3.2.1",
3
+ "version": "3.2.12",
4
4
  "main": "dist/index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -27,5 +27,5 @@
27
27
  "publishConfig": {
28
28
  "access": "public"
29
29
  },
30
- "gitHead": "da86657f07eb4bf3124bb090c6bc1b76b2cebeb0"
30
+ "gitHead": "6d6e13fed8d4b3c6de14f84dcb6287c5661ea6f6"
31
31
  }