跳到主要内容

IGeekFan.OpenIddict.FreeSql

OpenIddict 的 FreeSql 存储层实现,为 OpenIddict 提供基于 FreeSql ORM 的持久化支持。是 KitSSO 认证服务(FreeKit.Auth.Host)的核心依赖。

NuGet 包

dotnet add package IGeekFan.OpenIddict.FreeSql

依赖

  • OpenIddict.Core 7.5.0 — OAuth2/OIDC 协议框架
  • FreeSql 3.5.310 — ORM
  • FreeSql.Repository 3.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

字段类型说明
IdGuid主键
ClientIdstring?客户端标识(唯一索引)
ClientSecretstring?客户端密钥
ConsentTypestring?explicit / implicit
DisplayNamestring?显示名称
Permissionsstring?权限列表(JSON 数组)
RedirectUrisstring?回调地址(JSON 数组)
Requirementsstring?要求列表(JSON 数组)
Typestring?confidential / public

OpenIddictAuthorization

字段类型说明
IdGuid主键
ApplicationIdGuid?关联应用
Scopesstring?授权的 scope(JSON 数组)
Statusstring?valid / invalid
Subjectstring?用户 ID

OpenIddictScope

字段类型说明
IdGuid主键
Namestring?Scope 名称(唯一索引)
DisplayNamestring?显示名称
Descriptionstring?描述
Resourcesstring?关联资源(JSON 数组)

OpenIddictToken

字段类型说明
IdGuid主键
ApplicationIdGuid?关联应用
Subjectstring?用户 ID
Typestring?令牌类型
Statusstring?valid / revoked
CreationDateDateTime?创建时间
ExpirationDateDateTime?过期时间

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));
}
}

相关文档