CoreIdent 0.4:针对 .NET 10+ 的全新重写

发布: (2025年12月13日 GMT+8 15:01)
6 min read
原文: Dev.to

Source: Dev.to

CoreIdent 0.4:面向 .NET 10+ 的全新重写

嗨,.NET 社区!我有一个重大更新要分享,关于 CoreIdent0.4 版是一次完整的重写,从零开始基于 .NET 10 构建,并重新制定了目标和愿景。

如果你一直在关注 0.3.x 系列(Phase 2、Phase 3、ID token 等),可能会想:为什么要重新开始? 让我来解释一下。

🔄 为什么要重写?

0.3.x 代码库让我学到了很多关于身份/认证库真正需求的东西,也暴露了一些根本性的局限:

  • 仅支持对称密钥 – HS256 适合演示,但生产环境需要 RS256/ES256 并配合正确的 JWKS 发布。
  • 密码优先 – 行业正向无密码方向发展;我们应该引领而不是跟随。
  • .NET 9 的限制 – .NET 10 带来了原生 Passkey 支持、更好的度量以及我们想利用的认证 API 改进。
  • 测试基础设施债务 – 测试设置变得笨重;我们需要从一开始就拥有可复用的 fixture。

与其在 0.3.x 上进行补丁,我决定在正确的基础上重新构建。

遗留说明:如果需要,0.3.x 代码库已在 legacy-0.3.x-main 标签下保留。

新的愿景

CoreIdent 0.4 旨在成为一个 全方位的认证工具包——不仅是 OAuth 服务器,而是覆盖以下所有场景的单一解决方案:

场景描述
嵌入式认证为 ASP.NET Core 应用提供即插即用的认证
外部提供者集成 Google、Microsoft、GitHub 等
身份服务器完整的 OAuth 2.0 / OIDC 功能
客户端库为 MAUI、WPF、Blazor、控制台应用提供安全认证

关键转变:无密码优先。电子邮件魔法链接和 Passkey 成为主要认证方式,密码仅作后备。

当前可用功能

CoreIdent 0.4 已具备坚实的 OAuth/OIDC 基础。

Token 端点(/auth/token

  • client_credentials 授权
  • refresh_token 授权(支持轮换 + 盗用检测)
  • authorization_code 授权(强制 PKCE)
  • password 授权(已废弃;会记录警告)

授权流程

  • /auth/authorize 端点配合同意 UI
  • /auth/consent 用于用户授权管理
  • 完整的 PKCE 强制执行

标准合规

  • Token 撤销(RFC 7009)
  • Token 细查(RFC 7662)
  • OIDC 发现/.well-known/openid-configuration
  • JWKS 发布/.well-known/jwks.json)——仅公开密钥

非对称密钥支持

生产就绪的 RS256 与 ES256 签名:

builder.Services.AddSigningKey(o => o.UseRsa("/path/to/private-key.pem"));
// or
builder.Services.AddSigningKey(o => o.UseEcdsa("/path/to/ec-key.pem"));

可插拔持久化

  • 默认使用内存存储(适合开发/测试)
  • 生产环境提供 EF Core 实现:
builder.Services.AddDbContext(options =>
    options.UseSqlite(connectionString));
builder.Services.AddEntityFrameworkCoreStores();

测试基础设施

tests/ 目录下的可复用 fixture 与构建器:

  • CoreIdentTestFixture 用于集成测试
  • Fluent 构建器用于客户端、用户、作用域
  • 用于 JWT 验证的断言扩展

🚀 快速入门

下面是一个约 10 行代码的最小 OAuth 服务器示例:

using CoreIdent.Core.Extensions;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCoreIdent(o =>
{
    o.Issuer = "https://issuer.example";
    o.Audience = "https://resource.example";
});

builder.Services.AddSigningKey(o => o.UseRsa("/path/to/private-key.pem"));

var app = builder.Build();
app.MapCoreIdentEndpoints();
app.Run();

它为你提供了:

  • 多授权方式的 Token 端点
  • OIDC 发现 + JWKS
  • 带同意的授权码流程

接下来计划

路线图聚焦于让 CoreIdent 成为真正的“一站式”解决方案。

无密码认证

  • 电子邮件魔法链接
  • Passkey(利用 .NET 10 原生支持)

外部提供者

  • Google、Microsoft、GitHub
  • 为社区贡献者准备的干净提供者抽象层

客户端库

CoreIdent.Client —— 在任何 .NET 应用中都可使用

  • 平台特定实现:MAUI(SecureStorage)、WPF(DPAPI)、Blazor WASM

开发者体验

  • 项目模板
  • 更友好的错误信息
  • OpenTelemetry 度量集成

📚 文档

所有规划与实现文档均在仓库中:

🤝 参与贡献

CoreIdent 使用 MIT 许可证,欢迎贡献。如果你感兴趣:

  • 查看 仓库
  • 阅读当前任务的 DEVPLAN
  • 运行集成测试以熟悉代码库
  • 提交 Issue 或 PR!

我们的目标是构建大家都渴望的身份系统——开放、模块化、对开发者友好。

以往文章

如果你跟随了 0.3.x 的历程:

感谢你的关注。让我们一起打造伟大的东西吧!

Back to Blog

相关文章

阅读更多 »

Payload 中的自定义 auth

Payload 中自定义身份验证的封面图像 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads...