@microi.net/cli 5.7.8 → 5.8.0
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.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/assets/build-meta.json +6 -6
- package/assets/feature-matrix.json +138 -138
- package/assets/logo.svg +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-codex-stdio-adapter.js +0 -0
- package/scripts/mcp-server.js +113 -112
- package/scripts/microi-cli.js +57 -57
- package/scripts/microi-codex-broker.js +450 -450
- package/scripts/microi-codex-router.js +0 -0
- package/scripts/microi-skills.meta.json +364 -364
- package/skills/.microi-skills-version.json +2 -2
- package/skills/README.md +286 -286
- package/skills/ai-engine/SKILL.md +265 -265
- package/skills/ai-engine/agents/openai.yaml +4 -4
- package/skills/ai-platform-governance/SKILL.md +177 -177
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
- package/skills/app-store/SKILL.md +396 -396
- package/skills/app-store/agents/openai.yaml +4 -4
- package/skills/business-blueprint/SKILL.md +193 -193
- package/skills/datasource-engine/SKILL.md +90 -90
- package/skills/datasource-engine/agents/openai.yaml +4 -4
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +78 -78
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +172 -172
- package/skills/job-engine/agents/openai.yaml +4 -4
- package/skills/message-notification/SKILL.md +156 -156
- package/skills/message-notification/agents/openai.yaml +5 -5
- package/skills/message-notification/references/contracts.md +102 -102
- package/skills/microi-ai-app-auth.js +652 -652
- package/skills/microi-ai-application/SKILL.md +106 -106
- package/skills/microi-ai-application/agents/openai.yaml +4 -4
- package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
- package/skills/microi-client-frontend/SKILL.md +237 -237
- package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +144 -144
- package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +196 -196
- package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +167 -167
- package/skills/microi-codex/SKILL.md +72 -70
- package/skills/microi-codex-installer/SKILL.md +225 -223
- package/skills/microi-codex-installer/agents/openai.yaml +7 -7
- package/skills/microi-datasource-mapping/SKILL.md +108 -108
- package/skills/microi-db-schema/SKILL.md +175 -175
- package/skills/microi-db-schema/agents/openai.yaml +4 -4
- package/skills/microi-db-schema/references/core-tables.md +695 -695
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +202 -202
- package/skills/microi-db-schema/references/schema.md +646 -646
- package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
- package/skills/microi-deployment/references/deployment-matrix.md +101 -101
- package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
- package/skills/microi-form-engine/SKILL.md +226 -226
- package/skills/microi-form-engine/references/component-catalog.md +216 -216
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-form-layout/SKILL.md +205 -205
- package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -235
- package/skills/microi-frontend-sdk/SKILL.md +188 -188
- package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +176 -176
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +323 -323
- package/skills/microi-microservice/references/runtime-delivery.md +278 -278
- package/skills/microi-mobile-app-quality/SKILL.md +181 -181
- package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +213 -213
- package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +128 -128
- package/skills/microi-solution-quotation/SKILL.md +78 -78
- package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
- package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
- package/skills/microi-sso/references/acceptance.md +49 -49
- package/skills/microi-sso/references/configuration-and-security.md +53 -53
- package/skills/microi-sso/references/inbound.md +53 -53
- package/skills/microi-sso/references/outbound.md +39 -39
- package/skills/microi-system-delivery/SKILL.md +134 -134
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +193 -193
- package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +189 -189
- package/skills/microi-ui/SKILL.md +174 -174
- package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
- package/skills/microi-uniapp-frontend/SKILL.md +193 -193
- package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +225 -225
- package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +154 -154
- package/skills/microi.v8.js +1921 -1921
- package/skills/module-engine/SKILL.md +250 -250
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/ocr-engine/SKILL.md +113 -113
- package/skills/ocr-engine/agents/openai.yaml +4 -4
- package/skills/page-engine/SKILL.md +182 -182
- package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +234 -234
- package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +60 -60
- package/skills/performance-testing/SKILL.md +221 -221
- package/skills/playwright-e2e/SKILL.md +197 -197
- package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +173 -173
- package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +183 -183
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
- package/skills/print-engine/SKILL.md +259 -259
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +71 -71
- package/skills/report-engine/agents/openai.yaml +4 -4
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/search-engine/agents/openai.yaml +4 -4
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +238 -238
- package/skills/system-observability/references/memory-incident-triage.md +70 -70
- package/skills/translate-engine/SKILL.md +140 -140
- package/skills/translate-engine/agents/openai.yaml +4 -4
- package/skills/ui-design/SKILL.md +191 -191
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +198 -198
- package/skills/ui-design/references/design-pattern-library.md +184 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +137 -137
- package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -235
- package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
- package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -238
- package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -194
- package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
- package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +117 -117
- package/skills/uniapp-mall-assets/SKILL.md +176 -176
- package/skills/unity-integration/SKILL.md +155 -155
- package/skills/unity-integration/agents/openai.yaml +4 -4
- package/skills/unity-integration/references/ai-app-delivery.md +103 -103
- package/skills/unity-integration/references/sdk-api.md +82 -82
- package/skills/unity-integration/references/toolbox-migration.md +66 -66
- package/skills/unity-integration/references/webgl-hosting.md +57 -57
- package/skills/v8-cache-pattern/SKILL.md +306 -306
- package/skills/v8-crud-api/SKILL.md +175 -175
- package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +226 -226
- package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -49
- package/skills/v8-debugging/SKILL.md +284 -284
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-export-import/SKILL.md +209 -209
- package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +211 -211
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
- package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +42 -42
- package/skills/v8-file-upload/SKILL.md +263 -263
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +101 -101
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +150 -150
- package/skills/v8-formengine-http/SKILL.md +219 -219
- package/skills/v8-frontend-events/SKILL.md +178 -178
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +246 -246
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
- package/skills/v8-http-integration/SKILL.md +182 -182
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
- package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +44 -44
- package/skills/v8-image-processing/SKILL.md +190 -190
- package/skills/v8-image-processing/agents/openai.yaml +4 -4
- package/skills/v8-image-processing/references/api-reference.md +623 -623
- package/skills/v8-menu-buttons/SKILL.md +180 -180
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
- package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
- package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +104 -104
- package/skills/v8-mongodb/SKILL.md +192 -192
- package/skills/v8-mq-mqtt/SKILL.md +176 -176
- package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
- package/skills/v8-saas-multi-tenant/SKILL.md +219 -219
- package/skills/v8-security/SKILL.md +168 -168
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +198 -198
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -158
- package/skills/v8-sql-query/SKILL.md +302 -302
- package/skills/v8-table-event/SKILL.md +144 -144
- package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +197 -197
- package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +46 -46
- package/skills/v8-tcp-integration/SKILL.md +147 -147
- package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
- package/skills/v8-template-engine/SKILL.md +167 -167
- package/skills/v8-utilities/SKILL.md +90 -90
- package/skills/v8-utilities/references/client-api-index.md +143 -143
- package/skills/v8-utilities/references/platform-http-routes.md +83 -83
- package/skills/v8-utilities/references/server-api-index.md +188 -188
- package/skills/v8-workflow/SKILL.md +243 -243
- package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -180
- package/skills/vision-engine/SKILL.md +159 -159
- package/skills/vision-engine/agents/openai.yaml +4 -4
- package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
- package/skills/workspace-conventions/SKILL.md +261 -261
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +208 -208
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +216 -216
- package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +27 -27
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
# 验收、商城发布与交付结论
|
|
2
|
-
|
|
3
|
-
## 分层证据
|
|
4
|
-
|
|
5
|
-
| 层 | 最低证据 |
|
|
6
|
-
|---|---|
|
|
7
|
-
| 源码 | 协议/安全原语测试,静态扫描无 Secret/Token 日志 |
|
|
8
|
-
| 后端构建 | 隔离输出 `dotnet build` 成功,不覆盖共享运行目录 |
|
|
9
|
-
| 前端构建 | 现代包和项目要求的兼容包完成 |
|
|
10
|
-
| 应用包 | 可重复生成;Name/AppId/Version、DDL、字段数、菜单、空数据集、35 个接口引擎源码同源与 ResourcePolicies 校验 |
|
|
11
|
-
| 官方商城 | `microi_itdos` 发布后回读 `sys_microistore` 与官方资源 API;状态、版本、包哈希一致 |
|
|
12
|
-
| 目标租户 | 安装/升级任务终态 `Succeeded`,再读真实表、字段、菜单、安装版本 |
|
|
13
|
-
| 运行时 | Capabilities、Discovery/Metadata/JWKS 和实际使用端点命中已部署程序集 |
|
|
14
|
-
| 浏览器 | 登录入口、弹窗 Origin、URL 清理、管理页 7 Tab、秘密无明文 |
|
|
15
|
-
| 伙伴联调 | 登录/拒绝/过期/重放/退出/停用/角色变化/轮换 |
|
|
16
|
-
| 多节点 | state、code、ticket、session、撤销和缓存跨节点一致 |
|
|
17
|
-
|
|
18
|
-
## 官方应用发布
|
|
19
|
-
|
|
20
|
-
1. 使用官方 `microi_itdos`,核对绑定 `https://api.itdos.com` 与 `OsClient=iTdos`。
|
|
21
|
-
2. 在发布源更新真实 `diy_sso`、字段、表单 Tabs 和菜单视图并回读。
|
|
22
|
-
3. 导出精确菜单/表和 35 个接口引擎,不带连接数据、用户绑定、Secret、证书或示例账号;接口源码必须与 `Microi-V8-Engine/.../SSO身份联邦` 逐字同源。
|
|
23
|
-
4. AppId 固定 `app.microi.sso`,PublisherType 为官方应用;34 个核心 Key 为 `Managed/Platform`,`sso_event_hook` 为 `CreateIfMissing/Tenant`。
|
|
24
|
-
5. 发布后从官方资源 API 读取 `app.microi.sso.json`,校验 SHA-256、版本、1 菜单、1 表、64 字段、35 个接口引擎及策略。
|
|
25
|
-
6. 官方 iTdos 是发布源,安装任务被“发布源不允许安装”拒绝是保护性终态;不要绕过或伪装成成功。
|
|
26
|
-
7. 普通目标租户才执行安装/更新,并轮询后台任务到终态。Pending/Running/入队不算成功。
|
|
27
|
-
|
|
28
|
-
## 协议负向用例
|
|
29
|
-
|
|
30
|
-
- OIDC:state/nonce/PKCE 错、code 重放、issuer/audience 错、未知 kid、过期 token、refresh 重放、回调前缀攻击。
|
|
31
|
-
- SAML:签名错、过期、Audience/Destination/InResponseTo 错、Request/Assertion 重放、错误证书、未授权 ACS。
|
|
32
|
-
- CAS:ticket 重放、service 不同、过期 ticket、错误租户、CAS 失败响应。
|
|
33
|
-
- 通用:跨租户连接、停用用户、停用连接、SSRF 私网/回环、访问密钥会话授权、匿名读取 `diy_sso`。
|
|
34
|
-
|
|
35
|
-
## 结论措辞
|
|
36
|
-
|
|
37
|
-
只有真实伙伴和多节点验收也通过,才能说“该协议连接已可生产使用”。
|
|
38
|
-
|
|
39
|
-
- 包已发布但 Server/Client 未部署:写“官方配置包已发布,运行时代码待部署”。
|
|
40
|
-
- 端点冒烟通过但无真实 IdP/SP:写“协议端点已验证,伙伴联调待完成”。
|
|
41
|
-
- 官方源安装被保护性拒绝:写“发布源保护生效,不构成普通租户安装证据”。
|
|
42
|
-
- 因用户未授权输入密码而无法浏览器登录:写明 UI 登录后验收未完成,不用接口/源码代替视觉证据。
|
|
43
|
-
|
|
44
|
-
## 404 与应用缺失回归
|
|
45
|
-
|
|
46
|
-
- 客户端能力发现和登录完成只允许调用 `/apiengine/{ApiEngineKey}?OsClient=`;固定业务不得新增 `/api/ApiEngine/Run` 依赖。
|
|
47
|
-
- 在未安装 `app.microi.sso` 的租户调用通用入口,应返回结构化“接口引擎不存在”;不能返回 `/api/Sso/Capabilities` 路由 404。
|
|
48
|
-
- 安装后回读 35 个 `sys_apiengine` 行并刷新缓存,再验证 `sso_capabilities` 为 `Code=1`,并验证 24 个 `sso_http_*` 的 `ApiAddress`、`ResponseType=HTTP` 与 Managed 策略。
|
|
49
|
-
- 所有 `Sso*Controller.cs`、`/api/Sso/Capabilities`、`LegacyCapabilities`、`CompleteLogin`、`RotateClientSecret` 与 `/api/SysUser/SsoPengrui` 必须保持删除;`/api/Sso/Begin`、`CompleteAuthorization` 与回调地址只允许作为接口引擎 `ApiAddress` 存在。
|
|
1
|
+
# 验收、商城发布与交付结论
|
|
2
|
+
|
|
3
|
+
## 分层证据
|
|
4
|
+
|
|
5
|
+
| 层 | 最低证据 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| 源码 | 协议/安全原语测试,静态扫描无 Secret/Token 日志 |
|
|
8
|
+
| 后端构建 | 隔离输出 `dotnet build` 成功,不覆盖共享运行目录 |
|
|
9
|
+
| 前端构建 | 现代包和项目要求的兼容包完成 |
|
|
10
|
+
| 应用包 | 可重复生成;Name/AppId/Version、DDL、字段数、菜单、空数据集、35 个接口引擎源码同源与 ResourcePolicies 校验 |
|
|
11
|
+
| 官方商城 | `microi_itdos` 发布后回读 `sys_microistore` 与官方资源 API;状态、版本、包哈希一致 |
|
|
12
|
+
| 目标租户 | 安装/升级任务终态 `Succeeded`,再读真实表、字段、菜单、安装版本 |
|
|
13
|
+
| 运行时 | Capabilities、Discovery/Metadata/JWKS 和实际使用端点命中已部署程序集 |
|
|
14
|
+
| 浏览器 | 登录入口、弹窗 Origin、URL 清理、管理页 7 Tab、秘密无明文 |
|
|
15
|
+
| 伙伴联调 | 登录/拒绝/过期/重放/退出/停用/角色变化/轮换 |
|
|
16
|
+
| 多节点 | state、code、ticket、session、撤销和缓存跨节点一致 |
|
|
17
|
+
|
|
18
|
+
## 官方应用发布
|
|
19
|
+
|
|
20
|
+
1. 使用官方 `microi_itdos`,核对绑定 `https://api.itdos.com` 与 `OsClient=iTdos`。
|
|
21
|
+
2. 在发布源更新真实 `diy_sso`、字段、表单 Tabs 和菜单视图并回读。
|
|
22
|
+
3. 导出精确菜单/表和 35 个接口引擎,不带连接数据、用户绑定、Secret、证书或示例账号;接口源码必须与 `Microi-V8-Engine/.../SSO身份联邦` 逐字同源。
|
|
23
|
+
4. AppId 固定 `app.microi.sso`,PublisherType 为官方应用;34 个核心 Key 为 `Managed/Platform`,`sso_event_hook` 为 `CreateIfMissing/Tenant`。
|
|
24
|
+
5. 发布后从官方资源 API 读取 `app.microi.sso.json`,校验 SHA-256、版本、1 菜单、1 表、64 字段、35 个接口引擎及策略。
|
|
25
|
+
6. 官方 iTdos 是发布源,安装任务被“发布源不允许安装”拒绝是保护性终态;不要绕过或伪装成成功。
|
|
26
|
+
7. 普通目标租户才执行安装/更新,并轮询后台任务到终态。Pending/Running/入队不算成功。
|
|
27
|
+
|
|
28
|
+
## 协议负向用例
|
|
29
|
+
|
|
30
|
+
- OIDC:state/nonce/PKCE 错、code 重放、issuer/audience 错、未知 kid、过期 token、refresh 重放、回调前缀攻击。
|
|
31
|
+
- SAML:签名错、过期、Audience/Destination/InResponseTo 错、Request/Assertion 重放、错误证书、未授权 ACS。
|
|
32
|
+
- CAS:ticket 重放、service 不同、过期 ticket、错误租户、CAS 失败响应。
|
|
33
|
+
- 通用:跨租户连接、停用用户、停用连接、SSRF 私网/回环、访问密钥会话授权、匿名读取 `diy_sso`。
|
|
34
|
+
|
|
35
|
+
## 结论措辞
|
|
36
|
+
|
|
37
|
+
只有真实伙伴和多节点验收也通过,才能说“该协议连接已可生产使用”。
|
|
38
|
+
|
|
39
|
+
- 包已发布但 Server/Client 未部署:写“官方配置包已发布,运行时代码待部署”。
|
|
40
|
+
- 端点冒烟通过但无真实 IdP/SP:写“协议端点已验证,伙伴联调待完成”。
|
|
41
|
+
- 官方源安装被保护性拒绝:写“发布源保护生效,不构成普通租户安装证据”。
|
|
42
|
+
- 因用户未授权输入密码而无法浏览器登录:写明 UI 登录后验收未完成,不用接口/源码代替视觉证据。
|
|
43
|
+
|
|
44
|
+
## 404 与应用缺失回归
|
|
45
|
+
|
|
46
|
+
- 客户端能力发现和登录完成只允许调用 `/apiengine/{ApiEngineKey}?OsClient=`;固定业务不得新增 `/api/ApiEngine/Run` 依赖。
|
|
47
|
+
- 在未安装 `app.microi.sso` 的租户调用通用入口,应返回结构化“接口引擎不存在”;不能返回 `/api/Sso/Capabilities` 路由 404。
|
|
48
|
+
- 安装后回读 35 个 `sys_apiengine` 行并刷新缓存,再验证 `sso_capabilities` 为 `Code=1`,并验证 24 个 `sso_http_*` 的 `ApiAddress`、`ResponseType=HTTP` 与 Managed 策略。
|
|
49
|
+
- 所有 `Sso*Controller.cs`、`/api/Sso/Capabilities`、`LegacyCapabilities`、`CompleteLogin`、`RotateClientSecret` 与 `/api/SysUser/SsoPengrui` 必须保持删除;`/api/Sso/Begin`、`CompleteAuthorization` 与回调地址只允许作为接口引擎 `ApiAddress` 存在。
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
# 配置、Secret、安全与迁移
|
|
2
|
-
|
|
3
|
-
## diy_sso 分组
|
|
4
|
-
|
|
5
|
-
- `basic`:Key、名称、方向、协议、启用、排序。
|
|
6
|
-
- `oidc`:Issuer/Discovery/端点、Client、Scope、精确 Redirect URI。
|
|
7
|
-
- `saml`:Entity ID、Metadata、SSO/SLO、ACS。
|
|
8
|
-
- `cas`:Server URL、版本。
|
|
9
|
-
- `mapping`:Subject/Account/Name/Email/Role Claim、JSON 映射、JIT。
|
|
10
|
-
- `security`:Secret/证书设置 Key、签名/加密、PKCE/nonce、生命周期、私网开关。
|
|
11
|
-
- `legacy`:旧 Server/Client API、TokenName、GetTokenType。
|
|
12
|
-
|
|
13
|
-
`diy_sso` 是管理员专用平台表。匿名能力接口只投影 ConnectionKey、名称、协议、图标、说明和发起地址;旧兼容投影只允许同源 `/api/` 路径与安全 Token 参数名。
|
|
14
|
-
|
|
15
|
-
匿名投影由 `sso_capabilities` / `sso_legacy_capabilities` 接口引擎提供;任何 Controller 都不得直接查询并返回 `diy_sso`。公开协议地址由 `sso_http_*` Managed 接口引擎拥有,可信原子再通过 StopHttp 的 `sso_connection_runtime` 取得最小运行投影。客户端能力类接口统一调用 `/apiengine/{ApiEngineKey}?OsClient=`;标准伙伴协议使用应用声明的 `ApiAddress`,其中 `{OsClient}`、`{ConnectionKey}` 由动态路由安全提取并覆盖同名外部参数。
|
|
16
|
-
|
|
17
|
-
## Secret 与证书
|
|
18
|
-
|
|
19
|
-
- `ClientSecretSettingKey` 等字段只存 `mci_system_setting` Key。
|
|
20
|
-
- 第三方 Client Secret 和私钥证书使用后端 Secret 存储,不出现在日志、导出、包、浏览器或 MCP 回读。
|
|
21
|
-
- 吾码对外 OIDC Client Secret 只存专用密码哈希;不能用 AES/DES 代替验证哈希。
|
|
22
|
-
- SAML 验签/加密公开证书与签名/解密私钥严格区分用途。
|
|
23
|
-
- 证书/签名 Key 轮换要有新旧重叠、伙伴确认、撤销和回滚窗口。
|
|
24
|
-
|
|
25
|
-
## 网络和 URL
|
|
26
|
-
|
|
27
|
-
所有外部 Discovery、JWKS、Metadata、Token、UserInfo 地址先过 HTTPS/SSRF 检查。默认拒绝回环、私网、链路本地、带用户信息 URL 和 DNS 重绑定;内网 IdP 只能由管理员显式开启并用网络出口白名单补强。
|
|
28
|
-
|
|
29
|
-
Redirect/Logout/ACS/CAS service 使用规范化后的绝对 URL 精确比较。不要允许通配符、子域后缀、前缀或 fragment。反向代理下使用可信外部 Origin,不能根据任意 Host/Header 构造安全回调。
|
|
30
|
-
|
|
31
|
-
## 账号与角色
|
|
32
|
-
|
|
33
|
-
默认 `BoundOnly`。JIT 需要:
|
|
34
|
-
|
|
35
|
-
- 稳定 Subject 与账号唯一性。
|
|
36
|
-
- 非管理员默认角色。
|
|
37
|
-
- 外部角色到 RoleId 的显式 allowlist。
|
|
38
|
-
- 离职、禁用、角色收回与冲突处理。
|
|
39
|
-
- 创建、匹配、拒绝和变更审计。
|
|
40
|
-
|
|
41
|
-
这些规则由 Managed `sso_resolve_federated_identity` 编排。JIT 创建最终调用精确受限的 `V8.Method.CreateFederatedUser` 原子,并用平台专用带盐密码哈希写入不可登录的随机初始密码;不得回退到 DES,也不得把外部角色名直接写成平台 RoleId。
|
|
42
|
-
|
|
43
|
-
不能把外部 `admin` 字符串、邮箱域或昵称直接解释为平台管理员。
|
|
44
|
-
|
|
45
|
-
## LegacyToken 迁移
|
|
46
|
-
|
|
47
|
-
1. 盘点旧 `ClientSsoApi/ServerSsoApi/TokenName` 和使用系统。
|
|
48
|
-
2. 为每个系统选择 OIDC、SAML2 或 CAS 并建立新连接。
|
|
49
|
-
3. 并行验证登录/退出和账号映射;新入口默认标准协议。
|
|
50
|
-
4. URL 中的旧 Token 读取后立即清理,不写 Referer、日志或分析平台。
|
|
51
|
-
5. 迁移完成后停用旧行;不要继续给新系统复制 LegacyToken。
|
|
52
|
-
|
|
53
|
-
旧兼容只允许调用同源 `/api/`,绝不把 DiyToken POST 到管理员配置的任意绝对 URL。浏览器只处理 `LegacyCapabilities` 已返回连接中明确登记的 `TokenName`;不得恢复“只要 URL 出现 `?token=` 就自动登录”的无配置旁路。
|
|
1
|
+
# 配置、Secret、安全与迁移
|
|
2
|
+
|
|
3
|
+
## diy_sso 分组
|
|
4
|
+
|
|
5
|
+
- `basic`:Key、名称、方向、协议、启用、排序。
|
|
6
|
+
- `oidc`:Issuer/Discovery/端点、Client、Scope、精确 Redirect URI。
|
|
7
|
+
- `saml`:Entity ID、Metadata、SSO/SLO、ACS。
|
|
8
|
+
- `cas`:Server URL、版本。
|
|
9
|
+
- `mapping`:Subject/Account/Name/Email/Role Claim、JSON 映射、JIT。
|
|
10
|
+
- `security`:Secret/证书设置 Key、签名/加密、PKCE/nonce、生命周期、私网开关。
|
|
11
|
+
- `legacy`:旧 Server/Client API、TokenName、GetTokenType。
|
|
12
|
+
|
|
13
|
+
`diy_sso` 是管理员专用平台表。匿名能力接口只投影 ConnectionKey、名称、协议、图标、说明和发起地址;旧兼容投影只允许同源 `/api/` 路径与安全 Token 参数名。
|
|
14
|
+
|
|
15
|
+
匿名投影由 `sso_capabilities` / `sso_legacy_capabilities` 接口引擎提供;任何 Controller 都不得直接查询并返回 `diy_sso`。公开协议地址由 `sso_http_*` Managed 接口引擎拥有,可信原子再通过 StopHttp 的 `sso_connection_runtime` 取得最小运行投影。客户端能力类接口统一调用 `/apiengine/{ApiEngineKey}?OsClient=`;标准伙伴协议使用应用声明的 `ApiAddress`,其中 `{OsClient}`、`{ConnectionKey}` 由动态路由安全提取并覆盖同名外部参数。
|
|
16
|
+
|
|
17
|
+
## Secret 与证书
|
|
18
|
+
|
|
19
|
+
- `ClientSecretSettingKey` 等字段只存 `mci_system_setting` Key。
|
|
20
|
+
- 第三方 Client Secret 和私钥证书使用后端 Secret 存储,不出现在日志、导出、包、浏览器或 MCP 回读。
|
|
21
|
+
- 吾码对外 OIDC Client Secret 只存专用密码哈希;不能用 AES/DES 代替验证哈希。
|
|
22
|
+
- SAML 验签/加密公开证书与签名/解密私钥严格区分用途。
|
|
23
|
+
- 证书/签名 Key 轮换要有新旧重叠、伙伴确认、撤销和回滚窗口。
|
|
24
|
+
|
|
25
|
+
## 网络和 URL
|
|
26
|
+
|
|
27
|
+
所有外部 Discovery、JWKS、Metadata、Token、UserInfo 地址先过 HTTPS/SSRF 检查。默认拒绝回环、私网、链路本地、带用户信息 URL 和 DNS 重绑定;内网 IdP 只能由管理员显式开启并用网络出口白名单补强。
|
|
28
|
+
|
|
29
|
+
Redirect/Logout/ACS/CAS service 使用规范化后的绝对 URL 精确比较。不要允许通配符、子域后缀、前缀或 fragment。反向代理下使用可信外部 Origin,不能根据任意 Host/Header 构造安全回调。
|
|
30
|
+
|
|
31
|
+
## 账号与角色
|
|
32
|
+
|
|
33
|
+
默认 `BoundOnly`。JIT 需要:
|
|
34
|
+
|
|
35
|
+
- 稳定 Subject 与账号唯一性。
|
|
36
|
+
- 非管理员默认角色。
|
|
37
|
+
- 外部角色到 RoleId 的显式 allowlist。
|
|
38
|
+
- 离职、禁用、角色收回与冲突处理。
|
|
39
|
+
- 创建、匹配、拒绝和变更审计。
|
|
40
|
+
|
|
41
|
+
这些规则由 Managed `sso_resolve_federated_identity` 编排。JIT 创建最终调用精确受限的 `V8.Method.CreateFederatedUser` 原子,并用平台专用带盐密码哈希写入不可登录的随机初始密码;不得回退到 DES,也不得把外部角色名直接写成平台 RoleId。
|
|
42
|
+
|
|
43
|
+
不能把外部 `admin` 字符串、邮箱域或昵称直接解释为平台管理员。
|
|
44
|
+
|
|
45
|
+
## LegacyToken 迁移
|
|
46
|
+
|
|
47
|
+
1. 盘点旧 `ClientSsoApi/ServerSsoApi/TokenName` 和使用系统。
|
|
48
|
+
2. 为每个系统选择 OIDC、SAML2 或 CAS 并建立新连接。
|
|
49
|
+
3. 并行验证登录/退出和账号映射;新入口默认标准协议。
|
|
50
|
+
4. URL 中的旧 Token 读取后立即清理,不写 Referer、日志或分析平台。
|
|
51
|
+
5. 迁移完成后停用旧行;不要继续给新系统复制 LegacyToken。
|
|
52
|
+
|
|
53
|
+
旧兼容只允许调用同源 `/api/`,绝不把 DiyToken POST 到管理员配置的任意绝对 URL。浏览器只处理 `LegacyCapabilities` 已返回连接中明确登记的 `TokenName`;不得恢复“只要 URL 出现 `?token=` 就自动登录”的无配置旁路。
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
# 外部身份源登录吾码
|
|
2
|
-
|
|
3
|
-
## 目标流程
|
|
4
|
-
|
|
5
|
-
外部身份源只证明主体身份。回调完成后按当前租户查找绑定/受控 JIT 用户,重新确认 `sys_user` 仍启用,再签发 DiyToken。菜单、表、字段、角色、部门与数据范围不从外部 Token 直接继承。
|
|
6
|
-
|
|
7
|
-
## OIDC RP
|
|
8
|
-
|
|
9
|
-
必须覆盖:
|
|
10
|
-
|
|
11
|
-
- Authorization Code;公共客户端使用 PKCE S256。
|
|
12
|
-
- 随机 state、nonce、短时效、一次性消费和原始 Origin 绑定。
|
|
13
|
-
- Discovery 与 JWKS 的 HTTPS、SSRF、issuer 一致性和缓存更新。
|
|
14
|
-
- id_token 签名、算法、issuer、audience、有效期、nonce;必要时再请求 UserInfo。
|
|
15
|
-
- code 不能写日志、URL 清理、回调错误不泄露 Token/Secret。
|
|
16
|
-
- `client_secret_basic`、`client_secret_post` 或 `none` 与伙伴注册一致。
|
|
17
|
-
|
|
18
|
-
禁止 Implicit、Password Grant、宽松回调前缀、关闭签名或仅解码 JWT 不验签。
|
|
19
|
-
|
|
20
|
-
## SAML SP
|
|
21
|
-
|
|
22
|
-
必须覆盖:
|
|
23
|
-
|
|
24
|
-
- SP Metadata、AuthnRequest、RelayState、ACS 与可选 SLO。
|
|
25
|
-
- 浏览器回调使用 `/api/Sso/SamlCallback`,Assertion Consumer Service 使用 `/api/Sso/SamlAcs`。
|
|
26
|
-
- Response/Assertion 签名、Destination、Issuer、Audience、时间窗口、InResponseTo。
|
|
27
|
-
- Request ID 与 Assertion/Response 重放保护。
|
|
28
|
-
- 加密断言时使用本租户解密私钥;验签只用伙伴公开证书。
|
|
29
|
-
- NameID/Claim 到稳定 Subject 的明确规则。
|
|
30
|
-
|
|
31
|
-
不能因为伙伴证书配置困难而在生产关闭签名校验。
|
|
32
|
-
|
|
33
|
-
## CAS Client
|
|
34
|
-
|
|
35
|
-
- service 必须是精确、受控的吾码回调 URL。
|
|
36
|
-
- CAS 1.0 `/validate`、2.0 `/serviceValidate`、3.0 `/p3/serviceValidate` 按配置解析。
|
|
37
|
-
- Service Ticket 单次使用、短时效、绑定 service;失败响应不能当作用户属性。
|
|
38
|
-
- CAS 根地址生产使用 HTTPS,并经过 SSRF 检查。
|
|
39
|
-
|
|
40
|
-
## 用户解析顺序
|
|
41
|
-
|
|
42
|
-
1. 规范化 `OsClient`、连接方向和协议。
|
|
43
|
-
2. 提取稳定 Subject;拒绝空值、控制字符和不稳定昵称。
|
|
44
|
-
3. 先查 `mci_user_external_identity` 的精确绑定。
|
|
45
|
-
4. `BoundOnly` 未绑定即拒绝;`JitMatch/JitCreate` 仅按已审核映射运行。
|
|
46
|
-
5. 重新读取 `sys_user`,确认未删除、未停用。
|
|
47
|
-
6. 签发 DiyToken,写不含凭据的 SSO 审计。
|
|
48
|
-
|
|
49
|
-
步骤 2–5 固定由 `sso_resolve_federated_identity` 执行;`sso_http_oidc_callback`、`sso_http_saml_acs`、`sso_http_cas_callback` 只通过 `RunSsoProtocol` 取得已经验签、归一化且不含原始 Token/断言的 Claim。步骤 6 由 `sso_complete_login` 编排并调用一次性票据/DiyToken 原子。禁止为 OIDC、SAML、CAS 恢复 Controller 或各复制一套用户查询、JIT 和角色映射。
|
|
50
|
-
|
|
51
|
-
## 浏览器回调
|
|
52
|
-
|
|
53
|
-
弹窗消息必须同时校验 `event.source`、精确 `event.origin`、消息类型和 ConnectionKey。回调只传 90 秒左右的一次性票据;登录页再用该票据换 DiyToken。不要通过 `postMessage('*')`、URL fragment 或 Query 传 DiyToken。
|
|
1
|
+
# 外部身份源登录吾码
|
|
2
|
+
|
|
3
|
+
## 目标流程
|
|
4
|
+
|
|
5
|
+
外部身份源只证明主体身份。回调完成后按当前租户查找绑定/受控 JIT 用户,重新确认 `sys_user` 仍启用,再签发 DiyToken。菜单、表、字段、角色、部门与数据范围不从外部 Token 直接继承。
|
|
6
|
+
|
|
7
|
+
## OIDC RP
|
|
8
|
+
|
|
9
|
+
必须覆盖:
|
|
10
|
+
|
|
11
|
+
- Authorization Code;公共客户端使用 PKCE S256。
|
|
12
|
+
- 随机 state、nonce、短时效、一次性消费和原始 Origin 绑定。
|
|
13
|
+
- Discovery 与 JWKS 的 HTTPS、SSRF、issuer 一致性和缓存更新。
|
|
14
|
+
- id_token 签名、算法、issuer、audience、有效期、nonce;必要时再请求 UserInfo。
|
|
15
|
+
- code 不能写日志、URL 清理、回调错误不泄露 Token/Secret。
|
|
16
|
+
- `client_secret_basic`、`client_secret_post` 或 `none` 与伙伴注册一致。
|
|
17
|
+
|
|
18
|
+
禁止 Implicit、Password Grant、宽松回调前缀、关闭签名或仅解码 JWT 不验签。
|
|
19
|
+
|
|
20
|
+
## SAML SP
|
|
21
|
+
|
|
22
|
+
必须覆盖:
|
|
23
|
+
|
|
24
|
+
- SP Metadata、AuthnRequest、RelayState、ACS 与可选 SLO。
|
|
25
|
+
- 浏览器回调使用 `/api/Sso/SamlCallback`,Assertion Consumer Service 使用 `/api/Sso/SamlAcs`。
|
|
26
|
+
- Response/Assertion 签名、Destination、Issuer、Audience、时间窗口、InResponseTo。
|
|
27
|
+
- Request ID 与 Assertion/Response 重放保护。
|
|
28
|
+
- 加密断言时使用本租户解密私钥;验签只用伙伴公开证书。
|
|
29
|
+
- NameID/Claim 到稳定 Subject 的明确规则。
|
|
30
|
+
|
|
31
|
+
不能因为伙伴证书配置困难而在生产关闭签名校验。
|
|
32
|
+
|
|
33
|
+
## CAS Client
|
|
34
|
+
|
|
35
|
+
- service 必须是精确、受控的吾码回调 URL。
|
|
36
|
+
- CAS 1.0 `/validate`、2.0 `/serviceValidate`、3.0 `/p3/serviceValidate` 按配置解析。
|
|
37
|
+
- Service Ticket 单次使用、短时效、绑定 service;失败响应不能当作用户属性。
|
|
38
|
+
- CAS 根地址生产使用 HTTPS,并经过 SSRF 检查。
|
|
39
|
+
|
|
40
|
+
## 用户解析顺序
|
|
41
|
+
|
|
42
|
+
1. 规范化 `OsClient`、连接方向和协议。
|
|
43
|
+
2. 提取稳定 Subject;拒绝空值、控制字符和不稳定昵称。
|
|
44
|
+
3. 先查 `mci_user_external_identity` 的精确绑定。
|
|
45
|
+
4. `BoundOnly` 未绑定即拒绝;`JitMatch/JitCreate` 仅按已审核映射运行。
|
|
46
|
+
5. 重新读取 `sys_user`,确认未删除、未停用。
|
|
47
|
+
6. 签发 DiyToken,写不含凭据的 SSO 审计。
|
|
48
|
+
|
|
49
|
+
步骤 2–5 固定由 `sso_resolve_federated_identity` 执行;`sso_http_oidc_callback`、`sso_http_saml_acs`、`sso_http_cas_callback` 只通过 `RunSsoProtocol` 取得已经验签、归一化且不含原始 Token/断言的 Claim。步骤 6 由 `sso_complete_login` 编排并调用一次性票据/DiyToken 原子。禁止为 OIDC、SAML、CAS 恢复 Controller 或各复制一套用户查询、JIT 和角色映射。
|
|
50
|
+
|
|
51
|
+
## 浏览器回调
|
|
52
|
+
|
|
53
|
+
弹窗消息必须同时校验 `event.source`、精确 `event.origin`、消息类型和 ConnectionKey。回调只传 90 秒左右的一次性票据;登录页再用该票据换 DiyToken。不要通过 `postMessage('*')`、URL fragment 或 Query 传 DiyToken。
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
# 吾码向第三方提供登录
|
|
2
|
-
|
|
3
|
-
## 共同边界
|
|
4
|
-
|
|
5
|
-
先验证当前交互式 DiyToken,再生成第三方协议票据。访问密钥会话不能替代用户交互授权。外部 Client/SP/service 只能读取按 Scope/映射允许的最小资料,不能获得 DiyToken、菜单权限对象或内部角色策略。
|
|
6
|
-
|
|
7
|
-
## OIDC Provider
|
|
8
|
-
|
|
9
|
-
应提供:
|
|
10
|
-
|
|
11
|
-
- Discovery、JWKS、Authorize、Token、UserInfo。
|
|
12
|
-
- 机密客户端认证与公共客户端 PKCE S256。
|
|
13
|
-
- 一次性授权码,绑定 ClientId、Redirect URI、Scope、PKCE、用户、租户和过期时间。
|
|
14
|
-
- 签名 id_token,校验 nonce;按客户端派生 pairwise subject。
|
|
15
|
-
- 高熵不透明 Access/Refresh Token;仅保存哈希索引。
|
|
16
|
-
- Refresh Token rotation/reuse detection,family 撤销。
|
|
17
|
-
- Introspection、Revocation、RP-Initiated Logout 与精确 post-logout redirect。
|
|
18
|
-
|
|
19
|
-
Client Secret 轮换动作只显示一次明文,持久化 PBKDF2-SHA256 哈希。签名 Key 必须有 `kid`,轮换时保留验证重叠窗口。
|
|
20
|
-
|
|
21
|
-
对外 Claim 固定由 `sso_outbound_claims` 从启用用户与连接白名单生成;24 个 `sso_http_*` Managed 端点通过 `RunSsoProtocol` 把同一投影编码成 OIDC/SAML/CAS 响应。Client Secret 轮换由 `sso_rotate_client_secret` 编排,并调用精确受限的可信原子生成一次性明文与持久哈希,不能恢复为 Controller 定制动作。
|
|
22
|
-
|
|
23
|
-
## SAML IdP
|
|
24
|
-
|
|
25
|
-
应提供 IdP Metadata、SSO、签名 Response/Assertion、可选加密和 SLO。必须校验 SP Entity ID、ACS、Destination、AuthnRequest 签名/重放;Attribute 只来自白名单映射。每个伙伴独立证书/配置,不把私钥放进应用包或前端。
|
|
26
|
-
|
|
27
|
-
## CAS Server
|
|
28
|
-
|
|
29
|
-
应提供 `/login`、CAS 1.0 `/validate`、CAS 2.0 `/serviceValidate`、CAS 3.0 `/p3/serviceValidate` 和 `/logout`。Service Ticket 必须:
|
|
30
|
-
|
|
31
|
-
- 随机、短时、单次使用。
|
|
32
|
-
- 绑定当前租户、连接、用户和精确 service。
|
|
33
|
-
- 校验成功才返回用户属性;CAS 1.0 使用协议规定的 yes/no 文本。
|
|
34
|
-
|
|
35
|
-
当前不实现 CAS Proxy Ticket;需要代理链时先评估改用 OIDC。
|
|
36
|
-
|
|
37
|
-
## 授权页面
|
|
38
|
-
|
|
39
|
-
第三方发起 Authorize/SAML/CAS 登录后,若没有有效 Provider Session,先跳到吾码登录页;登录成功回到一次性 handoff。页面必须说明目标系统、请求 Scope 和退出影响。即使后续加入 Consent,仍不能把第三方请求的任意 Scope 自动映射为吾码管理员能力。
|
|
1
|
+
# 吾码向第三方提供登录
|
|
2
|
+
|
|
3
|
+
## 共同边界
|
|
4
|
+
|
|
5
|
+
先验证当前交互式 DiyToken,再生成第三方协议票据。访问密钥会话不能替代用户交互授权。外部 Client/SP/service 只能读取按 Scope/映射允许的最小资料,不能获得 DiyToken、菜单权限对象或内部角色策略。
|
|
6
|
+
|
|
7
|
+
## OIDC Provider
|
|
8
|
+
|
|
9
|
+
应提供:
|
|
10
|
+
|
|
11
|
+
- Discovery、JWKS、Authorize、Token、UserInfo。
|
|
12
|
+
- 机密客户端认证与公共客户端 PKCE S256。
|
|
13
|
+
- 一次性授权码,绑定 ClientId、Redirect URI、Scope、PKCE、用户、租户和过期时间。
|
|
14
|
+
- 签名 id_token,校验 nonce;按客户端派生 pairwise subject。
|
|
15
|
+
- 高熵不透明 Access/Refresh Token;仅保存哈希索引。
|
|
16
|
+
- Refresh Token rotation/reuse detection,family 撤销。
|
|
17
|
+
- Introspection、Revocation、RP-Initiated Logout 与精确 post-logout redirect。
|
|
18
|
+
|
|
19
|
+
Client Secret 轮换动作只显示一次明文,持久化 PBKDF2-SHA256 哈希。签名 Key 必须有 `kid`,轮换时保留验证重叠窗口。
|
|
20
|
+
|
|
21
|
+
对外 Claim 固定由 `sso_outbound_claims` 从启用用户与连接白名单生成;24 个 `sso_http_*` Managed 端点通过 `RunSsoProtocol` 把同一投影编码成 OIDC/SAML/CAS 响应。Client Secret 轮换由 `sso_rotate_client_secret` 编排,并调用精确受限的可信原子生成一次性明文与持久哈希,不能恢复为 Controller 定制动作。
|
|
22
|
+
|
|
23
|
+
## SAML IdP
|
|
24
|
+
|
|
25
|
+
应提供 IdP Metadata、SSO、签名 Response/Assertion、可选加密和 SLO。必须校验 SP Entity ID、ACS、Destination、AuthnRequest 签名/重放;Attribute 只来自白名单映射。每个伙伴独立证书/配置,不把私钥放进应用包或前端。
|
|
26
|
+
|
|
27
|
+
## CAS Server
|
|
28
|
+
|
|
29
|
+
应提供 `/login`、CAS 1.0 `/validate`、CAS 2.0 `/serviceValidate`、CAS 3.0 `/p3/serviceValidate` 和 `/logout`。Service Ticket 必须:
|
|
30
|
+
|
|
31
|
+
- 随机、短时、单次使用。
|
|
32
|
+
- 绑定当前租户、连接、用户和精确 service。
|
|
33
|
+
- 校验成功才返回用户属性;CAS 1.0 使用协议规定的 yes/no 文本。
|
|
34
|
+
|
|
35
|
+
当前不实现 CAS Proxy Ticket;需要代理链时先评估改用 OIDC。
|
|
36
|
+
|
|
37
|
+
## 授权页面
|
|
38
|
+
|
|
39
|
+
第三方发起 Authorize/SAML/CAS 登录后,若没有有效 Provider Session,先跳到吾码登录页;登录成功回到一次性 handoff。页面必须说明目标系统、请求 Scope 和退出影响。即使后续加入 Consent,仍不能把第三方请求的任意 Scope 自动映射为吾码管理员能力。
|