feat(auth): 添加统一 API 和 PC 认证端点
- 新增 API 端 JWT 登录、refresh token 轮换和退出登录流程 - 新增 refresh token 实体、DbSet 配置和 EF Core 迁移 - 新增 PC 端授权码登录、本地全局 token 刷新、登出和鉴权服务 - 扩展统一端点模型,支持宿主过滤、角色鉴权、OpenAPI 元数据和 DI 服务处理器 - API 启用 JwtBearer 认证、Swagger UI 和认证端点注册 - PC 端注册认证服务,并按宿主过滤桌面拦截端点
This commit is contained in:
@@ -1,8 +1,3 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia_Services.Core;
|
||||
|
||||
namespace Avalonia_Services.Extensions
|
||||
@@ -75,6 +70,7 @@ namespace Avalonia_Services.Extensions
|
||||
{
|
||||
// 查找匹配的端点(忽略大小写 + 方法匹配)
|
||||
var endpoint = _endpoints.Endpoints.FirstOrDefault(e =>
|
||||
e.SupportsHost(EndpointHostTarget.Pc) &&
|
||||
string.Equals(e.Pattern, path, StringComparison.OrdinalIgnoreCase) &&
|
||||
string.Equals(e.HttpMethod, method, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
@@ -108,7 +104,18 @@ namespace Avalonia_Services.Extensions
|
||||
return RouteResult.Success(ctx.ResponseBody, ctx);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(endpoint.Policy))
|
||||
if (endpoint.Roles.Count > 0)
|
||||
{
|
||||
var authorized = await _authService.AuthorizeAsync(user, $"roles:{string.Join(',', endpoint.Roles)}");
|
||||
if (!authorized)
|
||||
{
|
||||
ctx.StatusCode = 403;
|
||||
ctx.StatusMessage = "Forbidden";
|
||||
ctx.ResponseBody = new { success = false, error = "Forbidden" };
|
||||
return RouteResult.Success(ctx.ResponseBody, ctx);
|
||||
}
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(endpoint.Policy))
|
||||
{
|
||||
var authorized = await _authService.AuthorizeAsync(user, endpoint.Policy);
|
||||
if (!authorized)
|
||||
|
||||
Reference in New Issue
Block a user