跳到主要内容

Identity 身份认证模块

Identity 模块是 FreeKit 的"身份与访问"中枢,基于 ASP.NET Core Identity 构建。它不只是一个用户表,而是一组围绕身份主体 IdentityUser 内聚的子域:认证、用户资料、角色、权限、租户、组织架构、设备、双因素、安全密钥、社交登录、个性化

模块边界与子域

子域承载的业务能力关键服务接口
认证密码/邮箱验证码登录、注册、注销、刷新 Token、管理员模拟IAccountService · ITokenHandler
用户资料跨身份查询、当前用户资料/头像/改密/改用户名IUserService · IProfileService
角色角色定义、默认/公开/静态角色、数据范围IRoleService
权限权限树、赋权(用户/角色/岗位)、权限检查IPermissionService · IPermissionManager
租户租户隔离、切换、邀请成员ITenantService
组织架构部门树、岗位、员工档案与调岗/锁定IOrgUnitService · IPositionService · IEmployeeService
设备 / 2FA设备信任、新设备风控、双因素验证IUserLoginDeviceManager · ITwoStepVerificationService
安全AccessKey、在线用户、Token 吊销、请求日志IUserAccessKeyService · IOnlineUserService
社交登录OAuth2 绑定/解绑/登录、OpenIddict 客户端IOAuth2Service · IOAuth2AdminService
个性化快捷菜单、表格列设置IUserShortcutService · ITableColumnSettingService

横切能力(文件存储、设置系统、通用附件、数据字典)单独文档见 Infrastructure 开发指南

关系概览

关键边界:没有独立的"用户 CRUD"。 创建用户走注册(AccountService)、资料修改走 ProfileService、员工维度走 EmployeeControllerUserController 仅提供只读查询。用户生命周期被有意拆分到不同职责边界,见 领域能力指南

快速开始

1. 注册服务

// Program.cs
builder.Services.AddFreeKitIdentity();

2. 配置数据库

{
"ConnectionStrings": {
"DefaultDB": "0",
"MySql": "Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=freekit;Charset=utf8mb4"
}
}

3. 启动服务

dotnet run --project src/Services/Identity/FreeKit.Identity.Host

4. 访问 Swagger

启动后访问:https://localhost:7002/kit_api/swagger

架构概览

设计要点速览

角色与数据范围

角色是权限的容器,本身不定义权限。IdentityRole 区分默认角色(注册自动分配)、公开角色(其他用户可见)、静态角色(内置不可删)。DataScope 控制角色可触及的数据边界:

说明
All全部数据
OrgWithChild本部门及子部门
Org仅本部门
Self仅自己

权限树与解析

权限点通过 PermissionType 分层:Folder(目录) / Menu(菜单) / Element(按钮) / Api(后端接口)。权限树在启动时扫描控制器 [Authorize]/[KitAuthorize] 自动同步,与代码强一致;解析时查 PermissionGrant 的 U/R/P(用户/角色/岗位)三来源合并判定(详见 领域能力指南 的"权限"子域)。

租户隔离

多租户通过中间件 IdentityTenantResolver 在请求期确定当前租户,解析优先级为 X-Tenant-Id 请求头 > JWT tenant_id 声明。切换租户会重新签发 Token 并写入新 tenant_id

设备与双因素

设备指纹基于 UserAgent 的 SHA256 哈希(IP 变化不影响识别)。受信设备 + 无 2FA 直接放行;未受信设备按 Device.NewDeviceModenotify/verify)决策;开启 2FA 始终要求验证码。信任默认 180 天(Device:TrustExpireDays)后过期。

持久化

Identity 的表(如 identity_user / identity_role / identity_tenant / identity_org_unit / identity_permission / identity_user_access_key / identity_user_login_device 等)由 FreeSql 在启动时 SyncStructure 自动建表,无需手工维护。完整表清单请直接查看源码 FreeKit.Identity/Models

相关文档