@microi.net/cli 5.7.7 → 5.7.9

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 (191) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/LICENSE +21 -21
  7. package/README.md +71 -71
  8. package/assets/build-meta.json +6 -6
  9. package/assets/feature-matrix.json +138 -138
  10. package/assets/logo.svg +4 -4
  11. package/cordis.patch.yml +1 -1
  12. package/package.json +1 -1
  13. package/scripts/mcp-codex-stdio-adapter.js +0 -0
  14. package/scripts/mcp-server.js +102 -101
  15. package/scripts/microi-cli.js +57 -57
  16. package/scripts/microi-codex-broker.js +450 -450
  17. package/scripts/microi-codex-router.js +0 -0
  18. package/scripts/microi-skills.meta.json +366 -366
  19. package/skills/.microi-skills-version.json +2 -2
  20. package/skills/.progressive-disclosure-manifest.json +27 -27
  21. package/skills/README.md +286 -286
  22. package/skills/ai-engine/SKILL.md +265 -265
  23. package/skills/ai-engine/agents/openai.yaml +4 -4
  24. package/skills/ai-platform-governance/SKILL.md +177 -177
  25. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  26. package/skills/app-store/SKILL.md +392 -396
  27. package/skills/app-store/agents/openai.yaml +4 -4
  28. package/skills/business-blueprint/SKILL.md +193 -193
  29. package/skills/datasource-engine/SKILL.md +90 -90
  30. package/skills/datasource-engine/agents/openai.yaml +4 -4
  31. package/skills/dos-orm/references/api-reference.md +229 -229
  32. package/skills/email-engine/SKILL.md +78 -78
  33. package/skills/email-engine/references/v8-email.md +34 -34
  34. package/skills/job-engine/SKILL.md +171 -172
  35. package/skills/job-engine/agents/openai.yaml +4 -4
  36. package/skills/message-notification/SKILL.md +155 -156
  37. package/skills/message-notification/agents/openai.yaml +5 -5
  38. package/skills/message-notification/references/contracts.md +102 -102
  39. package/skills/microi-ai-app-auth.js +652 -652
  40. package/skills/microi-ai-application/SKILL.md +102 -106
  41. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  42. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  43. package/skills/microi-client-frontend/SKILL.md +235 -240
  44. 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
  45. 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
  46. 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
  47. package/skills/microi-codex/SKILL.md +75 -75
  48. package/skills/microi-codex-installer/SKILL.md +225 -223
  49. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  50. package/skills/microi-datasource-mapping/SKILL.md +107 -111
  51. package/skills/microi-db-schema/SKILL.md +175 -175
  52. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  53. package/skills/microi-db-schema/references/core-tables.md +695 -695
  54. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  55. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  56. package/skills/microi-db-schema/references/schema.md +646 -646
  57. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  58. package/skills/microi-deployment/references/deployment-matrix.md +101 -101
  59. package/skills/microi-docs-coverage/references/capability-map.md +0 -1
  60. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  61. package/skills/microi-form-engine/SKILL.md +226 -226
  62. package/skills/microi-form-engine/references/component-catalog.md +216 -216
  63. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  64. package/skills/microi-form-layout/SKILL.md +205 -205
  65. 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
  66. package/skills/microi-frontend-sdk/SKILL.md +188 -188
  67. 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
  68. package/skills/microi-left-right-layout/SKILL.md +141 -141
  69. package/skills/microi-microservice/SKILL.md +322 -323
  70. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  71. package/skills/microi-mobile-app-quality/SKILL.md +181 -181
  72. 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
  73. 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
  74. package/skills/microi-solution-quotation/SKILL.md +78 -78
  75. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  76. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  77. package/skills/microi-sso/references/acceptance.md +49 -49
  78. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  79. package/skills/microi-sso/references/inbound.md +53 -53
  80. package/skills/microi-sso/references/outbound.md +39 -39
  81. package/skills/microi-system-delivery/SKILL.md +134 -134
  82. 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
  83. 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
  84. package/skills/microi-ui/SKILL.md +174 -174
  85. 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
  86. package/skills/microi-uniapp-frontend/SKILL.md +193 -193
  87. 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
  88. 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
  89. package/skills/microi.v8.js +1921 -1921
  90. package/skills/module-engine/SKILL.md +237 -250
  91. package/skills/module-engine/references/module-config.md +204 -204
  92. package/skills/ocr-engine/SKILL.md +113 -113
  93. package/skills/ocr-engine/agents/openai.yaml +4 -4
  94. package/skills/page-engine/SKILL.md +180 -191
  95. 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
  96. 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
  97. package/skills/performance-testing/SKILL.md +221 -221
  98. package/skills/playwright-e2e/SKILL.md +197 -197
  99. 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
  100. 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
  101. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  102. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  103. package/skills/print-engine/SKILL.md +259 -259
  104. package/skills/production-readonly-audit/SKILL.md +41 -41
  105. package/skills/report-engine/SKILL.md +71 -71
  106. package/skills/report-engine/agents/openai.yaml +4 -4
  107. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  108. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  109. package/skills/search-engine/SKILL.md +75 -75
  110. package/skills/search-engine/agents/openai.yaml +4 -4
  111. package/skills/spider-engine/SKILL.md +190 -190
  112. package/skills/system-observability/SKILL.md +238 -238
  113. package/skills/system-observability/references/memory-incident-triage.md +70 -70
  114. package/skills/translate-engine/SKILL.md +140 -140
  115. package/skills/translate-engine/agents/openai.yaml +4 -4
  116. package/skills/ui-design/SKILL.md +191 -191
  117. package/skills/ui-design/assets/templates/MCI-DESIGN.md +198 -198
  118. package/skills/ui-design/references/design-pattern-library.md +184 -184
  119. package/skills/ui-design/references/mci-design-contract.md +163 -163
  120. 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
  121. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +137 -137
  122. 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
  123. 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
  124. 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
  125. 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
  126. 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
  127. 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
  128. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  129. package/skills/unity-integration/SKILL.md +155 -155
  130. package/skills/unity-integration/agents/openai.yaml +4 -4
  131. package/skills/unity-integration/references/ai-app-delivery.md +103 -103
  132. package/skills/unity-integration/references/sdk-api.md +82 -82
  133. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  134. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  135. package/skills/v8-cache-pattern/SKILL.md +306 -306
  136. package/skills/v8-crud-api/SKILL.md +175 -175
  137. 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
  138. 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
  139. package/skills/v8-debugging/SKILL.md +284 -284
  140. package/skills/v8-explorer-tree/SKILL.md +228 -228
  141. package/skills/v8-export-import/SKILL.md +209 -209
  142. 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
  143. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  144. 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
  145. package/skills/v8-file-upload/SKILL.md +256 -263
  146. 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
  147. 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
  148. package/skills/v8-formengine-http/SKILL.md +219 -219
  149. package/skills/v8-frontend-events/SKILL.md +178 -178
  150. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  151. package/skills/v8-frontend-events/references/bluetooth-print.md +246 -246
  152. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  153. package/skills/v8-http-integration/SKILL.md +182 -182
  154. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  155. 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
  156. package/skills/v8-image-processing/SKILL.md +190 -190
  157. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  158. package/skills/v8-image-processing/references/api-reference.md +623 -623
  159. package/skills/v8-menu-buttons/SKILL.md +180 -180
  160. 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
  161. 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
  162. 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
  163. package/skills/v8-mongodb/SKILL.md +192 -192
  164. package/skills/v8-mq-mqtt/SKILL.md +175 -176
  165. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  166. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  167. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  168. package/skills/v8-saas-multi-tenant/SKILL.md +219 -219
  169. package/skills/v8-security/SKILL.md +168 -168
  170. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +198 -198
  171. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -158
  172. package/skills/v8-sql-query/SKILL.md +302 -302
  173. package/skills/v8-table-event/SKILL.md +144 -144
  174. 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
  175. 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
  176. package/skills/v8-tcp-integration/SKILL.md +147 -147
  177. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  178. package/skills/v8-template-engine/SKILL.md +167 -167
  179. package/skills/v8-utilities/SKILL.md +90 -90
  180. package/skills/v8-utilities/references/client-api-index.md +143 -143
  181. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  182. package/skills/v8-utilities/references/server-api-index.md +188 -188
  183. package/skills/v8-workflow/SKILL.md +216 -243
  184. 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
  185. package/skills/vision-engine/SKILL.md +159 -159
  186. package/skills/vision-engine/agents/openai.yaml +4 -4
  187. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  188. package/skills/workspace-conventions/SKILL.md +261 -261
  189. 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
  190. 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
  191. 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 自动映射为吾码管理员能力。