用途
该技能用于在 ABP Framework 与 OpenIddict 组合下实现 OAuth 2.0 授权模式。适用场景包括:实现基于权限的授权、配置基于角色的访问控制(RBAC)、向令牌添加自定义声明、保护 API 端点、实现多租户授权、配置 OAuth 2.0 流程。
主要能力
ABP 权限系统
- 定义权限:在 Domain.Shared 中通过静态类定义权限常量,支持父子层级(如 Default、Create、Edit、Delete、Export、ViewAll、Cancel、Manage)。
- 注册权限定义:通过 PermissionDefinitionProvider 的 Define 方法添加权限组与子权限,并可指定 multiTenancySide(如 Host 专属权限)。
在 AppService 中使用授权
- 声明式授权:使用 [Authorize] 特性标注类或方法,指定所需权限;[AllowAnonymous] 用于公开访问。
- 命令式授权:通过 AuthorizationService.CheckAsync 或 IsGrantedAsync 在代码中按条件检查权限(如所有者、分配用户、状态等)。
- 策略授权:在 ConfigureServices 中通过 AddAuthorization 定义策略(RequireRole、RequireAssertion),并在 AppService 中以 [Authorize(Policy = "...")] 使用。
基于角色的访问控制
- 通过 IDataSeedContributor 种子默认角色(如 Admin、Doctor、Receptionist),并使用 IPermissionManager.SetForRoleAsync 为角色分配权限。
自定义声明
- 实现 IAbpClaimsPrincipalContributor 向令牌添加自定义声明(如 doctor_id、specialization)。
- 在模块中通过 AbpClaimsServiceOptions.RequestedClaims 注册所需声明。
- 通过 CurrentUser.FindClaim 访问自定义声明。
多租户授权
- 在权限定义中通过 multiTenancySide 区分 Tenant 与 Host 侧权限。
- 跨租户数据访问:使用 IDataFilter.Disable<IMultiTenant>() 并校验当前租户上下文。
OpenIddict 配置
- AuthServer 设置:PreConfigure<OpenIddictBuilder> 添加验证(AddAudiences、UseLocalServer、UseAspNetCore);配置 AbpOpenIddictOptions 的开发加密与签名证书;配置 OpenIddictServerOptions 的 Scopes(offline_access、profile、email、clinic_api)。
- API Host JWT 配置:AddAuthentication 与 AddJwtBearer,设置 Authority、RequireHttpsMetadata、Audience 及 TokenValidationParameters(ValidateIssuer、ValidateAudience、ValidateLifetime、ClockSkew)。
安全最佳实践
- 授权中的输入验证:校验 ID、处理实体不存在、执行授权检查。
- 审计日志:使用 [Audited] 启用审计,[DisableAuditing] 对特定方法禁用。
质量检查清单
- 为所有功能定义权限;建立权限层级;为角色种子适当权限;所有变更端点具有 [Authorize];为领域数据添加自定义声明;正确配置多租户权限;为敏感操作启用审计日志;正确配置令牌验证。
使用方式
该技能以代码示例与模式说明的形式提供,需在 ABP Framework 项目中按示例实现权限定义、权限注册、AppService 授权、角色种子、自定义声明、多租户授权及 OpenIddict/JWT 配置。
适用场景
适用于使用 ABP Framework 与 OpenIddict 构建需要 OAuth 2.0 授权、权限控制、RBAC、自定义声明或多租户隔离的后端服务。
限制
资料未提供该技能的安装命令、依赖版本、收费或价格信息,暂未提供。