IGeekFan.OpenIddict.FreeSql
OpenIddict 的 FreeSql 存储层实现,为 OpenIddict 提供基于 FreeSql ORM 的持久化支持。是 KitSSO 认证服务(FreeKit.Auth.Host)的核心依赖。
NuGet 包
dotnet add package IGeekFan.OpenIddict.FreeSql
依赖
OpenIddict.Core7.5.0 — OAuth2/OIDC 协议框架FreeSql3.5.310 — ORMFreeSql.Repository3.5.310 — 仓储模式
支持 .NET 8 和 .NET 10 双目标框架。
特性
- 完整实现 OpenIddict 4 个 Store 接口
- 集合字段自动 JSON 序列化/反序列化
- 支持 FreeSql CodeFirst 自动建表
- Store 使用
IBaseRepository<T, Guid>仓储模式
快速接入
1. 添加引用
<PackageReference Include="IGeekFan.OpenIddict.FreeSql" Version="1.0.0" />
2. 注册 OpenIddict
using IGeekFan.OpenIddict.FreeSql;
services.AddOpenIddict()
.AddCore(options => options.AddFreeSqlStores())
.AddServer(options =>
{
options.SetAuthorizationEndpointUris("/connect/authorize")
.SetTokenEndpointUris("/connect/token");
options.AllowAuthorizationCodeFlow()
.AllowRefreshTokenFlow();
options.UseAspNetCore()
.EnableAuthorizationEndpointPassthrough()
.EnableTokenEndpointPassthrough();
});
3. 同步表结构
IFreeSql fsql = app.Services.GetRequiredService<IFreeSql>();
fsql.SyncOpenIddictTables();
扩展方法
| 方法 | 调用位置 | 说明 |
|---|---|---|
AddFreeSqlStores() | AddCore() 内 | 注册 4 个 FreeSql Store |
SyncOpenIddictTables() | 应用启动 | CodeFirst 同步表结构 |
AddFreeSqlStores() 内部执行:
// 注册实体类型
builder.SetDefaultApplicationEntity<OpenIddictApplication>();
builder.SetDefaultAuthorizationEntity<OpenIddictAuthorization>();
builder.SetDefaultScopeEntity<OpenIddictScope>();
builder.SetDefaultTokenEntity<OpenIddictToken>();
// 替换 Store 实现
builder.ReplaceApplicationStore<..., FreeSqlOpenIddictApplicationStore>();
builder.ReplaceAuthorizationStore<..., FreeSqlOpenIddictAuthorizationStore>();
builder.ReplaceScopeStore<..., FreeSqlOpenIddictScopeStore>();
builder.ReplaceTokenStore<..., FreeSqlOpenIddictTokenStore>();
4 个 Store 实现
FreeSqlOpenIddictApplicationStore
管理客户端应用(表 open_iddict_application):Create / Delete / Update / FindById / FindByClientId / Count / List
FreeSqlOpenIddictAuthorizationStore
管理用户授权记录(表 open_iddict_authorization):Create / Delete / FindBySubject / Prune
FreeSqlOpenIddictScopeStore
管理 Scope 定义(表 open_iddict_scope):Create / Delete / FindByName / List / GetResources
FreeSqlOpenIddictTokenStore
管理 Token 生命周期(表 open_iddict_token):Create / Find / Revoke / Prune,支持 Authorization Code / Access Token / Refresh Token
实体说明
OpenIddictApplication
| 字段 | 类型 | 说明 |
|---|---|---|
Id | Guid | 主键 |
ClientId | string? | 客户端标识(唯一索引) |
ClientSecret | string? | 客户端密钥 |
ConsentType | string? | explicit / implicit |
DisplayName | string? | 显示名称 |
Permissions | string? | 权限列表(JSON 数组) |
RedirectUris | string? | 回调地址(JSON 数组) |
Requirements | string? | 要求列表(JSON 数组) |
Type | string? | confidential / public |
OpenIddictAuthorization
| 字段 | 类型 | 说明 |
|---|---|---|
Id | Guid | 主键 |
ApplicationId | Guid? | 关联应用 |
Scopes | string? | 授权的 scope(JSON 数组) |
Status | string? | valid / invalid |
Subject | string? | 用户 ID |
OpenIddictScope
| 字段 | 类型 | 说明 |
|---|---|---|
Id | Guid | 主键 |
Name | string? | Scope 名称(唯一索引) |
DisplayName | string? | 显示名称 |
Description | string? | 描述 |
Resources | string? | 关联资源(JSON 数组) |
OpenIddictToken
| 字段 | 类型 | 说明 |
|---|---|---|
Id | Guid | 主键 |
ApplicationId | Guid? | 关联应用 |
Subject | string? | 用户 ID |
Type | string? | 令牌类型 |
Status | string? | valid / revoked |
CreationDate | DateTime? | 创建时间 |
ExpirationDate | DateTime? | 过期时间 |
Store 实现模式
public class FreeSqlOpenIddictApplicationStore
: IOpenIddictApplicationStore<OpenIddictApplication>
{
private readonly IBaseRepository<OpenIddictApplication, Guid> Repository;
public FreeSqlOpenIddictApplicationStore(
IBaseRepository<OpenIddictApplication, Guid> repository)
{
Repository = repository
?? throw new ArgumentNullException(nameof(repository));
}
}
相关文档
- KitSSO Auth 服务概览 — 基于此包构建的完整 OAuth2 认证服务
- 优化建议记录 — Store 优化与已知问题记录