文章目录
- 一、OneAuthCenter简介
- 二、技术栈
- 三、项目架构
- 四、核心功能
-
- 1、客户端集成库(OneAuthCenter.Client)
-
- [1.1 一行代码集成认证](#1.1 一行代码集成认证)
- [1.2 3 种配置方式](#1.2 3 种配置方式)
- [1.3 自动 JWT 验证](#1.3 自动 JWT 验证)
- [1.4 灵活的授权策略](#1.4 灵活的授权策略)
- [1.5 开箱即用的示例](#1.5 开箱即用的示例)
- 2、认证功能
-
- [2.1 用户注册与登录](#2.1 用户注册与登录)
- [2.2 JWT Token 生成和验证](#2.2 JWT Token 生成和验证)
- [2.3 完整的 Scope 权限验证](#2.3 完整的 Scope 权限验证)
- [2.4 刷新令牌机制](#2.4 刷新令牌机制)
- [2.5 完整的 Token 可用性验证](#2.5 完整的 Token 可用性验证)
- [2.6 令牌撤销和登出](#2.6 令牌撤销和登出)
- [3、OAuth 2.0 支持](#3、OAuth 2.0 支持)
- [4、OpenID Connect 支持](#4、OpenID Connect 支持)
- [5、 用户管理](#5、 用户管理)
- 6、客户端管理
- 7、安全特性
- 五、安装运行
- 六、数据库支持
- [七、API 端点](#七、API 端点)
-
- [1、认证 API (/api/auth)](#1、认证 API (/api/auth))
- [2、OAuth 2.0 API (/oauth)](#2、OAuth 2.0 API (/oauth))
- [3、用户管理 API (/api/user)](#3、用户管理 API (/api/user))
- [4、客户端管理 API (/api/client)](#4、客户端管理 API (/api/client))
- 八、使用示例
- [九、 源码](#九、 源码)
一、OneAuthCenter简介
OneAuthCenter 是基于 .NET 9 打造的企业级 OAuth 2.0 / OpenID Connect 认证中心,采用 DDD 分层架构,为分布式系统提供统一、安全、可扩展的身份认证与授权能力。
项目同时提供 客户端集成库(OneAuthCenter.Client),支持一行代码完成接入,自动处理 JWT 验证、Scope 校验和授权策略。
二、技术栈
- .NET 9 - 应用框架
- ASP.NET Core - Web API 框架
- Entity Framework Core 9 - ORM
- 多数据库支持 - SQL Server / MySQL / PostgreSQL / SQLite / Oracle
- JWT Bearer Authentication - RSA 签名认证
- BCrypt.Net - 密码哈希
- Swashbuckle (Swagger) - API 文档
三、项目架构
本项目采用经典的四层架构设计,并提供客户端集成库:
bash
OneAuthCenter/
├── src/ # 源代码目录
│ ├── Extensions/ # 🆕 扩展包源(Extensions Packages)
│ │ ├── OneAuthCenter.Client/ # 客户端集成库(可独立发布为 NuGet 包)
│ │ │ ├── Options/ # 配置选项
│ │ │ ├── Extensions/ # 扩展方法
│ │ │ └── README.md # 客户端使用文档
│ │ └── README.md # 扩展包说明
│ │
│ ├── examples/ # 🆕 集成示例项目
│ │ ├── OrdersApi/ # 订单 API 示例
│ │ └── README.md # 示例使用说明
│ │
│ └── NoUI/ # 后端项目(无UI)
│ ├── OneAuthCenter.Domain/ # 领域层
│ │ ├── Entities/ # 实体模型
│ │ │ ├── User.cs # 用户实体
│ │ │ ├── Client.cs # OAuth 客户端实体
│ │ │ ├── RefreshToken.cs # 刷新令牌实体
│ │ │ ├── AuthorizationCode.cs # 授权码实体
│ │ │ ├── Scope.cs # 作用域实体
│ │ │ └── UserConsent.cs # 用户同意记录实体
│ │ └── Repositories/ # 仓储接口
│ │ ├── IUserRepository.cs
│ │ ├── IClientRepository.cs
│ │ ├── IRefreshTokenRepository.cs
│ │ ├── IAuthorizationCodeRepository.cs
│ │ ├── IScopeRepository.cs
│ │ └── IUserConsentRepository.cs
│ │
│ ├── OneAuthCenter.Application/ # 应用层
│ │ ├── DTOs/ # 数据传输对象
│ │ │ ├── Auth/ # 认证相关 DTO
│ │ │ ├── OAuth/ # OAuth 相关 DTO
│ │ │ ├── Client/ # 客户端相关 DTO
│ │ │ └── User/ # 用户相关 DTO
│ │ └── Services/ # 服务接口和实现
│ │ ├── ITokenService.cs # JWT Token 服务接口
│ │ ├── IAuthService.cs # 认证服务接口
│ │ ├── IOAuthService.cs # OAuth 服务接口
│ │ ├── IClientService.cs # 客户端服务接口
│ │ ├── IUserService.cs # 用户服务接口
│ │ └── Implementations/ # 服务实现
│ │
│ ├── OneAuthCenter.Infrastructure/ # 基础设施层
│ │ ├── Data/ # 数据访问
│ │ │ ├── AuthDbContext.cs # EF Core 数据库上下文
│ │ │ └── DbInitializer.cs # 数据库初始化器
│ │ ├── Configuration/ # 配置类
│ │ │ └── DatabaseSettings.cs # 数据库配置
│ │ ├── Extensions/ # 扩展方法
│ │ │ └── ServiceCollectionExtensions.cs
│ │ ├── Repositories/ # 仓储实现
│ │ │ ├── UserRepository.cs
│ │ │ ├── ClientRepository.cs
│ │ │ ├── RefreshTokenRepository.cs
│ │ │ ├── AuthorizationCodeRepository.cs
│ │ │ ├── ScopeRepository.cs
│ │ │ └── UserConsentRepository.cs
│ │ └── Services/ # 基础设施服务
│ │ └── TokenService.cs # JWT Token 生成和验证
│ │
│ └── OneAuthCenter.API/ # API 层(表现层)
│ ├── Controllers/ # API 控制器
│ │ ├── AuthController.cs # 认证控制器
│ │ ├── OAuthController.cs # OAuth 2.0 控制器
│ │ ├── ClientController.cs # 客户端管理控制器
│ │ └── UserController.cs # 用户管理控制器
│ ├── Program.cs # 应用程序入口
│ └── appsettings.json # 配置文件(含 Swagger 配置)
│
├── database-examples/ # 数据库配置示例
├── README.md # 项目说明文档
├── SETUP.md # 安装配置指南
├── DATABASE_CONFIG.md # 数据库配置指南
├── PROJECT_STRUCTURE.md # 项目结构详解
├── IDENTITYSERVER_CONCEPTS.md # IdentityServer4 核心概念详解
├── JWT_CERTIFICATE.md # JWT 证书配置指南
├── CORS_TOKEN_CONFIG.md # CORS 和 Token 配置指南
└── CHANGELOG.md # 更新日志
四、核心功能
1、客户端集成库(OneAuthCenter.Client)
1.1 一行代码集成认证
- builder.Services.AddOneAuthCenter()
1.2 3 种配置方式
- 代码配置(适合开发环境)
- 配置文件(适合生产环境)
- 带 Scope 验证(快速配置)
1.3 自动 JWT 验证
- 自动从认证中心获取 JWKS
- 自动验证 Token 签名
- 自动验证 Issuer 和 Audience
1.4 灵活的授权策略
- 基于 Scope 的授权
- 基于 Role 的授权
- 自定义策略
1.5 开箱即用的示例
- OrdersApi 示例项目
- 完整的使用文档
- 最佳实践指南
2、认证功能
2.1 用户注册与登录
2.2 JWT Token 生成和验证
- 开发环境自动生成密钥并保存到 tempkey.rsa(类似 IdentityServer4 的 tempkey.jwk)
- 应用重启后自动加载密钥,Token 不会失效
- 动态 Issuer - 自动从 HTTP 请求获取(无需配置)
- 生产环境使用证书文件(RSA 签名)
2.3 完整的 Scope 权限验证
- OpenID Connect 标准 scopes(openid, profile, email, phone, address)
- UserInfo 端点根据 scope 返回对应信息
- Token 中包含 scope claims
2.4 刷新令牌机制
2.5 完整的 Token 可用性验证
- Access Token 黑名单机制(JWT 撤销)
- Refresh Token 撤销和过期检查
- Token 唯一标识符 (jti claim)
- 自动清理过期的黑名单记录
2.6 令牌撤销和登出
3、OAuth 2.0 支持
- 授权码流程 (Authorization Code Flow)
- 客户端凭证流程 (Client Credentials Flow)
- 密码流程 (Resource Owner Password Credentials Flow)
- 刷新令牌流程 (Refresh Token Flow)
- PKCE 支持 (Proof Key for Code Exchange)
4、OpenID Connect 支持
- ID Token 生成
- UserInfo 端点
- Discovery 端点 (/.well-known/openid-configuration)
- JWKS 端点 (/.well-known/jwks.json) - 公钥发布
- Token Revocation 端点 (/oauth/revocation) - RFC 7009
- Token Introspection 端点 (/oauth/introspect) - RFC 7662
- End Session 端点 (/oauth/endsession) - 标准登出
5、 用户管理
- 用户 CRUD 操作
- 角色管理
- 密码修改
- 用户状态管理
6、客户端管理
- OAuth 客户端注册
- 客户端配置管理
- 密钥重置
- 授权类型和作用域配置
7、安全特性
- RSA 非对称加密签名(类似 IdentityServer4)
- 开发环境自动生成临时密钥
- 生产环境支持证书文件
- 支持 JWKS 公钥发布
- BCrypt 密码哈希(自适应、防彩虹表)
- JWT Token 黑名单机制(超越 IdentityServer4)
- PKCE (Proof Key for Code Exchange)
- 用户同意管理
- 令牌过期和轮换
- 客户端凭证验证
- 标准 Token 撤销和自省
五、安装运行
1、配置数据库连接
编辑 OneAuthCenter.API/appsettings.json,配置要使用的数据库(以SQLServer为例):
json
{
"DatabaseSettings": {
"DatabaseType": "SqlServer", // 可选: SqlServer, MySql, PostgreSql, Sqlite
"ConnectionStrings": {
"SqlServer": "Server=127.0.0.1;Database=OneAuthCenterDb;Trusted_Connection=True;User Id=username;Password=password;",
"MySql": "Server=localhost;Database=OneAuthCenterDb;User=root;Password=yourpassword;",
"PostgreSql": "Host=localhost;Database=OneAuthCenterDb;Username=postgres;Password=yourpassword;",
"Sqlite": "Data Source=OneAuthCenter.db"
}
}
}
2、创建数据库迁移
bash
cd src/NoUI/OneAuthCenter.API
dotnet ef migrations add InitialCreate --project ../OneAuthCenter.Infrastructure --context AuthDbContext
3、应用数据库迁移
bash
dotnet ef database update --project ../OneAuthCenter.Infrastructure --context AuthDbContext
4、运行项目
bash
dotnet run
5、访问 Swagger UI
打开浏览器访问:https://localhost:5001 或 http://localhost:5000
六、数据库支持
OneAuthCenter 支持多种数据库,通过配置文件即可切换:
| 数据库 | 状态 | 推荐场景 |
|---|---|---|
| SQL Server | ✅ 默认 | 企业级应用 |
| MySQL | ✅ 支持 | Web 应用 |
| PostgreSQL | ✅ 支持 | 企业级应用 |
| SQLite | ✅ 支持 | 开发/测试/小型应用 |
| Oracle Database | ✅ 支持 | 企业级应用 |
快速切换数据库:
json
{
"DatabaseSettings": {
"DatabaseType": "MySql" // 修改这里即可切换
}
}
七、API 端点
1、认证 API (/api/auth)
- POST /api/auth/register - 用户注册
- POST /api/auth/login - 用户登录
- POST /api/auth/refresh - 刷新令牌
- POST /api/auth/revoke - 撤销令牌
- POST /api/auth/logout - 用户登出
2、OAuth 2.0 API (/oauth)
- GET /oauth/authorize - OAuth 授权端点
- POST /oauth/consent - 用户同意端点
- POST /oauth/token - Token 端点
- GET /oauth/.well-known/openid-configuration - OpenID Connect 发现端点
3、用户管理 API (/api/user)
- GET /api/user/me - 获取当前用户信息
- GET /api/user/userinfo - OpenID Connect UserInfo 端点
- GET /api/user - 获取所有用户(需管理员权限)
- GET /api/user/{id} - 获取指定用户
- PUT /api/user/{id} - 更新用户信息
- DELETE /api/user/{id} - 删除用户(需管理员权限)
- POST /api/user/change-password - 修改密码
4、客户端管理 API (/api/client)
- GET /api/client - 获取所有客户端(需管理员权限)
- GET /api/client/{clientId} - 获取指定客户端(需管理员权限)
- POST /api/client - 创建客户端(需管理员权限)
- PUT /api/client/{clientId} - 更新客户端(需管理员权限)
- DELETE /api/client/{clientId} - 删除客户端(需管理员权限)
- POST /api/client/{clientId}/reset-secret - 重置客户端密钥(需管理员权限)
八、使用示例
1、用户注册
bash
POST /api/auth/register
Content-Type: application/json
{
"username": "testuser",
"email": "test@example.com",
"password": "Password123!",
"fullName": "测试用户"
}
2、用户登录
bash
POST /api/auth/login
Content-Type: application/json
{
"username": "testuser",
"password": "Password123!"
}
响应:
bash
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "DRgb4TvHZe1qJZQbZ...",
"tokenType": "Bearer",
"expiresIn": 3600,
"scope": "openid profile email"
}
3、OAuth 2.0 授权码流程
步骤 1:获取授权码
bash
GET /oauth/authorize?
response_type=code
&client_id=client_app
&redirect_uri=https://client.example.com/callback
&scope=openid profile email
&state=xyz
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
&code_challenge_method=S256
Authorization: Bearer {access_token}
步骤 2:交换授权码获取令牌
bash
POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=授权码
&redirect_uri=https://client.example.com/callback
&client_id=client_app
&client_secret=client_secret
&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
4、刷新令牌
bash
POST /api/auth/refresh
Content-Type: application/json
{
"refreshToken": "DRgb4TvHZe1qJZQbZ..."
}
九、 源码
Gitcode: https://gitcode.com/bjzhang75/OneAuthCenter
源码下载:源码下载