认证授权实现
HiMind 工业互联网平台(HMX)采用自定义 Token 颁发与验证机制,结合 OAuth 2.0 协议思想,实现了轻量、高效、可扩展的统一认证授权体系。平台通过扩展支持短信验证码、第三方社交登录等常见业务场景,原生支持基于 Token 的交互访问,可直接作为小程序、移动 App 等各类客户端的统一认证服务端。核心设计如下:
Token 颁发
平台通过 TokenAsync 方法实现自定义 Token 颁发流程:
- 支持图形验证码、数学公式验证码等多种验证方式
- 基于用户 ID + 密码进行身份校验
- Token 采用分布式缓存(Redis)存储会话状态,支持高性能访问
csharp
/// <summary>
/// 获取登录令牌(基于用户ID + 密码)
/// </summary>
[AllowAnonymous]
public async Task<string> TokenAsync(FetchTokenInput input)
{
// 1. 验证码校验
if (!await ValidateCaptchaAsync(input))
throw new HmxException("验证码校验失败");
// 2. 用户身份校验
var user = await ValidateUserAsync(input.UserId, input.Password);
// 3. 获取或创建用户会话 Token
var userToken = await GetOrCreateUserTokenAsync(input.UserId);
// 4. 缓存 Token 到 Redis(支持分布式会话)
await DistributedCache.SetAsync($"user:token:{input.UserId}", userToken);
return userToken.CToken;
}Token 验证
平台通过 ASP.NET Core 拦截器(IAsyncActionFilter) 实现统一的 Token 验证与工作单元管理:
csharp
public class UnitOfWorkFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// 1. 获取请求上下文中的客户端信息
var client = context.HttpContext.SmartFindClient();
// 2. 开启工作单元(事务管理)
using (var umgr = UnitOfWorkManager.Begin(attribute.Scope, attribute.IsolationLevel))
{
// 3. 自定义授权验证(Token 校验、权限判断等)
await Authorize(context);
// 4. 执行真正的业务逻辑
await next();
// 5. 提交事务
umgr.Complete();
}
}
}技术架构优势
- 轻量高效:不依赖第三方认证框架,减少外部依赖和配置复杂度
- 灵活可控:Token 生成、存储、验证全流程自主可控,便于定制化扩展
- 高性能:基于 Redis 分布式缓存存储 Token 会话,支持水平扩展
- 事务集成:将认证授权与工作单元(UnitOfWork)无缝集成,确保数据一致性
与 OAuth 2.0 协议的关系
HMX 平台虽然采用自定义 Token 机制,但在设计思想上遵循 OAuth 2.0 核心规范:
- Token 作为访问凭证,支持 Bearer Token 标准请求头传递方式
- 支持 Token 有效期管理、刷新机制等核心能力
- 可根据业务需要,平滑演进到标准 OAuth 2.0 认证中心方案
技术架构总结
| 能力维度 | HMX .NET 10 实现 |
|---|---|
| Token 颁发 | 自定义 TokenAsync 方法 |
| Token 存储 | Redis 分布式缓存 |
| Token 验证 | IAsyncActionFilter 拦截器 + Authorize 方法 |
| 事务管理 | UnitOfWorkManager 工作单元 |
| 验证码支持 | 图形验证码 + 数学公式验证码 |
| 扩展能力 | 支持短信登录、社交登录等第三方认证 |