跳到主要内容

IGeekFan.FreeKit.AuthClient

用于在其他系统中对接 OpenIddict 认证中心,实现单点登录。

功能概览

功能说明
Token 验证对接 OpenIddict 认证中心的 Token 验证
单点登录多应用统一认证
配置扩展OpenIddictValidationOptions 配置项
自动注册自动注册认证服务到 DI 容器

快速开始

1. 安装包

dotnet add package IGeekFan.FreeKit.AuthClient

2. 注册服务

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

3. 启用中间件

// Program.cs
app.UseAuthentication();
app.UseAuthorization();

4. 配置

{
"OpenIddictValidation": {
"Authority": "https://auth.example.com",
"ClientId": "your-client-id",
"ClientSecret": "your-client-secret",
"RequireHttpsMetadata": false
}
}

配置项说明

属性说明默认值
Authority认证中心地址必填
ClientId客户端 ID必填
ClientSecret客户端密钥必填
RequireHttpsMetadata是否要求 HTTPStrue
ScopeName请求的 Scopeopenid profile

工作原理

完整示例

前端应用接入

var builder = WebApplication.CreateBuilder(args);

// 注册认证服务
builder.Services.AddFreeKitValidation();

// 添加授权策略
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("ApiScope", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireClaim("scope", "api");
});
});

var app = builder.Build();

// 启用认证中间件
app.UseAuthentication();
app.UseAuthorization();

// 受保护的 API
app.MapGet("/api/profile", async (HttpContext ctx) =>
{
var user = ctx.User;
return Results.Ok(new
{
Name = user.Identity?.Name,
Claims = user.Claims.Select(c => new { c.Type, c.Value })
});
}).RequireAuthorization("ApiScope");

app.Run();

多应用对接

// 应用 A
builder.Services.AddFreeKitValidation();
builder.Configuration.AddJsonFile("appsettings.AppA.json");

// 应用 B
builder.Services.AddFreeKitValidation();
builder.Configuration.AddJsonFile("appsettings.AppB.json");

微服务间调用

// 服务间调用时携带 Token
public class ExternalApiService
{
private readonly HttpClient _httpClient;
private readonly ITokenService _tokenService;

public async Task<string> CallExternalApiAsync()
{
var token = await _tokenService.GetAccessTokenAsync();
_httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);

var response = await _httpClient.GetAsync("https://api.example.com/data");
return await response.Content.ReadAsStringAsync();
}
}

与 Auth 模块的关系

组件说明
Auth.Center认证中心,颁发 Token
Auth.Client客户端库,验证 Token
业务服务使用 Client 验证请求

故障排查

问题解决方案
401 Unauthorized检查 Authority 地址是否正确
Token 验证失败检查 ClientId 和 ClientSecret
CORS 错误在认证中心配置客户端域名
HTTPS 错误开发环境设置 RequireHttpsMetadata: false
Scope 不足检查认证中心配置的 Scope

相关文档