FreeKit.Identity 模块文档
1. 模块概述
FreeKit.Identity 是一个功能完整的身份认证与授权模块,提供用户管理、组织管理、权限管理等核心功能,支持多租户架构,适用于企业级应用系统。
1.1 核心功能
- 用户管理:用户注册、登录、个人资料管理、密码重置
- 组织管理:组织机构(部门)管理、岗位管理
- 权限管理:角色管理、权限分配、授权管理
- 认证与授权:JWT令牌认证、基于角色的访问控制
- 在线用户管理:实时在线用户监控
- 访问密钥管理:API访问密钥的生成与管理
- 请求日志:用户操作日志记录
1.2 技术架构
- 基于 ASP.NET Core 构建
- 使用 FreeSql 作为 ORM 框架
- 支持多租户架构
- 集成 JWT 认证
- 采用 MediatR 实现命令和查询分离
2. 核心实体
2.1 用户相关实体
- IdentityUser:用户基本信息
- IdentityRole:角色信息
- IdentityUserRole:用户与角色关联
- IdentityUserClaim:用户声明
- IdentityRoleClaim:角色声明
- IdentityUserLogin:第三方登录与账号绑定信息,可复用承载 GitHub、Gitee、QQ、微信
2.2 组织相关实体
- OrgUnit:组织机构(部门)
- Position:岗位
- UserOrgUnit:用户与部门关联
- UserPosition:用户与岗位关联
2.3 认证相关实体
- UserAccessToken:用户访问令牌
- RefreshToken:刷新令牌
- UserAccessKey:API访问密钥
- UserAccessKeyLog:API访问密钥使用日志
2.4 权限相关实体
- Permission:权限
- PermissionGrant:权限授权
2.5 其他实体
- OnlineUser:在线用户
- RequestLog:请求日志
- UserShortcut:用户快捷方式
- KitApp:应用
3. 核心功能模块
3.1 认证模块
3.1.1 登录流程
- 用户输入用户名/邮箱和密码
- 系统验证用户凭据
- 验证用户状态(是否激活、是否冻结)
- 生成JWT访问令牌和刷新令牌
- 返回令牌信息给客户端
3.1.2 注册流程
- 用户提交注册信息
- 系统验证信息合法性
- 创建用户账号
- 生成初始密码
- 发送激活邮件(可选)
3.1.3 令牌管理
- 访问令牌:用于API认证,有效期较短
- 刷新令牌:用于刷新访问令牌,有效期较长
- 令牌撤销:支持手动撤销令牌
3.2 用户管理模块
3.2.1 用户CRUD操作
- 创建用户
- 查询用户列表
- 更新用户信息
- 删除用户
3.2.2 个人资料管理
- 更新个人信息
- 修改密码
- 上传头像
3.3 组织管理模块
3.3.1 组织机构管理
- 创建部门
- 编辑部门信息
- 部门层级管理
- 部门负责人设置
3.3.2 岗位管理
- 创建岗位
- 编辑岗位信息
- 岗位编制管理
- 主管岗位设置
3.4 权限管理模块
3.4.1 角色管理
- 创建角色
- 编辑角色信息
- 设置默认角色
- 角色权限分配
3.4.2 权限管理
- 创建权限
- 权限层级管理
- 权限分类(目录、菜单、元素、API)
3.4.3 授权管理
- 角色授权
- 用户授权
- 权限继承
3.5 在线用户管理
- 实时在线用户监控
- 用户会话管理
- 强制用户下线
3.6 访问密钥管理
- 生成访问密钥
- 密钥状态管理
- 密钥使用日志
3.7 请求日志管理
- 记录用户操作日志
- 日志查询与分析
- 异常操作监控
4. API参考
详细的API接口参考请查看 APIReference 文件。
5. 配置与部署
5.1 配置项
- JWT配置:密钥、过期时间等
- 密码策略:复杂度要求、过期时间等
- 多租户配置:是否启用多租户
- 日志配置:日志级别、存储方式等
5.2 部署方式
- 独立部署:作为独立的身份服务
- 集成部署:与其他模块一起部署
- Docker部署:容器化部署
6. 使用示例
6.1 登录示例
// 登录请求
var loginCommand = new LoginCommand("admin", "Password123!");
var token = await mediator.Send(loginCommand);
// 使用令牌
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
6.2 创建用户示例
// 创建用户请求
var createUserCommand = new CreateUserCommand
{
UserName = "user1",
Email = "user1@example.com",
Password = "Password123!",
Name = "User One"
};
var user = await mediator.Send(createUserCommand);
6.3 分配角色示例
// 分配角色请求
var assignRoleCommand = new AssignRoleCommand
{
UserId = userId,
RoleIds = new List<Guid> { roleId1, roleId2 }
};
await mediator.Send(assignRoleCommand);
7. 最佳实践
7.1 安全最佳实践
- 使用HTTPS保护API通信
- 实施密码复杂度要求
- 定期轮换访问密钥
- 限制登录尝试次数
- 启用多因素认证(可选)
7.2 性能最佳实践
- 使用缓存减少数据库查询
- 优化令牌验证过程
- 合理设置令牌过期时间
- 批量操作减少API调用
7.3 维护最佳实践
- 定期清理过期令牌
- 监控异常登录行为
- 备份用户数据
- 记录关键操作日志
8. 常见问题与解决方案
8.1 登录失败
- 检查用户名和密码是否正确
- 检查用户状态是否激活
- 检查账号是否被冻结
8.2 权限不足
- 检查用户是否拥有相应权限
- 检查角色权限配置是否正确
- 检查权限继承关系
8.3 令牌过期
- 使用刷新令牌获取新的访问令牌
- 检查令牌过期时间配置
- 实现自动刷新令牌机制
9. 未来规划
- 支持更多认证方式(OAuth2、OpenID Connect等)
- 实现细粒度权限控制
- 集成第三方身份提供商
- 增强安全审计功能
- 提供更多的用户管理功能