Skip to content
bitzorcas
中EN

Concept

安全架构概述

从认证、授权、租户隔离、请求完整性、数据保护和审计理解 BitzOrcas 的纵深防御。

Last updated

BitzOrcas 的安全边界不止登录接口。一个请求要进入业务 Handler,至少要经过传输保护、身份认证、租户解析、授权决策和审计;持久化层还会继续执行租户过滤、软删除与并发检查。

TLS / Forwarded Headers / CORS / Security Headers
│
▼
JWT / HMAC / API Key / SCIM Bearer authentication
│
▼
current caller → tenant resolution → optional impersonation
│
▼
HTTP authorization + Mediator authorization decision
│
▼
data scope + ORM tenant filter + audit trail

传输与浏览器边界

认证主体

可信租户

资源授权与数据范围

持久化隔离与审计

安全能力

主题解决的问题
认证用户、应用调用者和 SCIM provisioner 如何证明身份
授权RBAC、App Scope、ABAC、ReBAC 与 Feature 如何组合决策
CORS 与安全头浏览器来源、代理和响应头边界
操作员代入Host 操作员如何在有期限、有审计的条件下代入用户或租户
Webhook 签名入站/出站 webhook 的完整性与防重放
双因素认证TOTP、FIDO2、恢复码与受信设备
数据保护密钥持久化、敏感配置与静态数据保护
生产检查清单发布前的配置、密钥、网络和运维证据

五条边界规则

认证结果只建立身份

JWT 有效或 API Key 匹配不表示可以执行任意动作。认证生成 CurrentUser 的 caller type、tenant、roles、permissions 或 scopes,授权管线再判断资源与动作。

客户端不能自行选择租户

tenant_id 必须来自可信 Claim、应用凭证、Host 映射或受控作业作用域。Header 和 Path 只可作为与已认证身份一致的确认信号。详见多租户深入解析。

拒绝优先,默认拒绝

授权决策中任一策略 Deny 都会阻断请求;没有策略 Allow 也会拒绝。依赖故障不能悄悄变成允许。

密钥不使用弱默认值

JWT issuer、audience 和签名密钥缺失时启动失败。API Key 与 SCIM token 在运行态只保存 SHA-256 hash。HMAC secret 仍需由受管配置提供,并按客户端轮换和撤销。

安全操作必须可追溯

认证失败、授权决策、代入、敏感操作、密钥管理和异常都要带租户、真实操作人、CorrelationId 与 TraceId。日志不能记录凭证明文。

威胁与防线

威胁主要防线仍需运维保障
JWT 被盗短有效期、issuer/audience、零 ClockSkew、kid 密钥轮换TLS、撤销策略、终端安全
HMAC 重放timestamp、nonce、method/path/query/body hash 签名多实例 Redis nonce store、密钥轮换
API Key 泄露hash 比对、固定时间比较、租户与 scope 绑定只展示一次、撤销、最小 scope
租户越权可信租户解析、授权资源、ORM filter主键/批量/复杂查询契约测试
权限配置缺失deny 优先、无 Allow 即拒绝、Unavailable adapterreadiness、告警与审计监控
浏览器跨站调用token-based auth、CORS、安全头精确 Origin 清单、TLS、前端存储策略

开发新功能时

  1. 给 Command/Query 声明资源和动作,不把权限判断散在 Handler。
  2. 从可信上下文取得租户和调用者,不信任 DTO 中的所有权字段。
  3. 为列表读取应用 DataScope,再叠加 ORM 租户过滤。
  4. 对密钥、token、个人信息和业务敏感字段定义日志/审计脱敏规则。
  5. 测试匿名、无权限、跨租户、代入过期、依赖不可用和缓存失效场景。

如何阅读本章

先从认证和授权建立 caller、resource、action 的基本模型,再学习 CORS/代理边界与 Data Protection。需要支持人员代入、MFA 或 Webhook 时,分别进入相应专题;部署评审最后以生产安全清单汇总证据。每一页都区分框架已交付原语、Host 组合责任和仍需业务模块完成的策略,避免把一个接口或字段误认为端到端能力。

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%