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 adapter | readiness、告警与审计监控 |
| 浏览器跨站调用 | token-based auth、CORS、安全头 | 精确 Origin 清单、TLS、前端存储策略 |
开发新功能时
- 给 Command/Query 声明资源和动作,不把权限判断散在 Handler。
- 从可信上下文取得租户和调用者,不信任 DTO 中的所有权字段。
- 为列表读取应用
DataScope,再叠加 ORM 租户过滤。 - 对密钥、token、个人信息和业务敏感字段定义日志/审计脱敏规则。
- 测试匿名、无权限、跨租户、代入过期、依赖不可用和缓存失效场景。
如何阅读本章
先从认证和授权建立 caller、resource、action 的基本模型,再学习 CORS/代理边界与 Data Protection。需要支持人员代入、MFA 或 Webhook 时,分别进入相应专题;部署评审最后以生产安全清单汇总证据。每一页都区分框架已交付原语、Host 组合责任和仍需业务模块完成的策略,避免把一个接口或字段误认为端到端能力。
- 01/14
现代多租户认证体系:JWT、API Key 与上下文注入
深入解析 BitzOrcas.Modern 企业级认证架构,掌握 ClaimsPrincipal 解析、API Key 高速验签、ICurrentUser 与 ICurrentTenant 统一上下文注入。
- 02/14
细粒度资源与动作授权:IAuthorizedRequest 实践
告别粗糙混乱的 Role 角色硬编码!深入解析 BitzOrcas.Modern 基于资源与动作(Resource-Action)的细粒度授权引擎,掌握 IAuthorizedRequest 声明与动态决策。
- 03/14
CORS、可信代理与安全响应头
从浏览器同源策略、可信代理拓扑和响应头三个边界配置并验证 API 入口安全。
- 04/14
Data Protection 与共享密钥环
理解 ASP.NET Core Data Protection 的用途隔离、Redis 密钥环、失效模式和滚动发布验证。
- 05/14
Secret、签名密钥与许可证材料
管理 JWT、HMAC、Webhook、数据库、对象存储、OAuth、Data Protection 与运行时许可证的完整生命周期。
- 06/14
多因素认证与风险挑战
讲透 TOTP 登录挑战、FIDO2、邮件/短信 OTP、恢复码、受信设备以及风险驱动策略的真实实现边界。
- 07/14
敏感操作再认证(Step-Up)
登录 MFA 回答不了「还是你本人吗」。Step-Up 再认证为每个敏感操作单独校验身份:全局中间件唯一强制点、三层策略模型、六种因子复用既有验证内核。
- 08/14
再认证快速接入
把一个业务端点接入敏感操作再认证的三条路径:管理页零代码自建策略行、[RequireStepUp] 声明基线、资金类一次性票据;含每步验证点与预期失败修复。
- 09/14
再认证契约参考
敏感操作再认证全部公开表面:十条端点、挑战与验证 JSON 契约、三类 403 ProblemDetails、18 个错误码、StepUpOptions 配置键与限流配额。逐项对照源码核验。
- 10/14
再认证前端接入
第一方 SPA 的再认证协议实现:403 拦截重放守卫四条规则、验证对话框状态机、凭据仅内存红线与 SDK 用法。业务代码零感知。
- 11/14
再认证灰度与运维
AuditOnly 观察期先行再切强制的灰度顺序、阈值调优指引、Runbook 要点与三类典型故障的排查:Redis 不可用、版本键缺失告警、GrantPurposeMismatch 上升。
- 12/14
用户代理与租户切入
区分同租户用户模拟登录与跨租户 Tenant Impersonation,说明直接签发、TabScoped/SiteWide 交接、逐请求撤销、敏感动作限制和审计边界。
- 13/14
Webhook 签名、重放防护与幂等消费
按当前 Webhooks 契约实现 HMAC-SHA256 验签,并补齐时间窗、事件去重、密钥轮换和失败证据。
- 14/14
生产安全检查与交付证据
用启动门禁、负向契约、攻击面验证和恢复演练完成生产安全验收,而不是口头勾选清单。