identity4系列————持久化配置篇[五]

博客 分享
0 208
张三
张三 2022-08-28 11:03:43
悬赏:0 积分 收藏

identity4 系列————持久化配置篇[五]

前言

上面已经介绍了3个例子了,并且介绍了如何去使用identity。

但是在前面的例子中,我们使用的都是在内存中操作,那么正式上线可能需要持久到数据库中。

这里值得说明的是,并不一定一定要持久化到数据库中,场景不一样,需求就不一样。

那么看下如何持久化吧。

正文

例子位置:https://github.com/IdentityServer/IdentityServer4/tree/main/samples/Quickstarts/5_EntityFramework

  1. 安装对应的库

IdentityServer4.EntityFramework

dotnet add package IdentityServer4.EntityFramework

安装对应的:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

官网中例子使用了sql server localdb。 那么需要安装 Microsoft.EntityFrameworkCore.SqlServer.

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

identity server 的配置在这,那么我们处理的应该就是这么一部分。

改成下面这样:

var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;const string connectionString = @"Data Source=(LocalDb)\MSSQLLocalDB;database=IdentityServer4.Quickstart.EntityFramework-4.0.0;trusted_connection=yes;";var  builder = services.AddIdentityServer()	.AddTestUsers(TestUsers.Users)	.AddConfigurationStore(options =>	{		options.ConfigureDbContext = b => b.UseSqlServer(connectionString,			sql => sql.MigrationsAssembly(migrationsAssembly));	})	.AddOperationalStore(options =>	{		options.ConfigureDbContext = b => b.UseSqlServer(connectionString,			sql => sql.MigrationsAssembly(migrationsAssembly));	});
  1. 这样配置暂时没有很大的用处,因为:

The IdentityServer4.EntityFramework.Storage package contains entity classes that map from IdentityServer’s models.

IdentityServer4.EntityFramework.Storage 存储的是实体类,相当于是code first,那么这个得做迁移了。

dotnet tool install --global dotnet-efdotnet add package Microsoft.EntityFrameworkCore.Design

加入工具和相应的库。

注:这里就不解释太多了,后面介绍ef code first 会介绍其中的原理之类的

然后做好迁移。

dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDbdotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb

这样那么数据库就创建好了。

然后初始化一些数据:

private void InitializeDatabase(IApplicationBuilder app){	using (var  serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())	{		serviceScope.ServiceProvider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();		var context = serviceScope.ServiceProvider.GetRequiredService<ConfigurationDbContext>();		context.Database.Migrate();		if (!context.Clients.Any())		{			foreach (var client in Config.Clients)			{				context.Clients.Add(client.ToEntity());			}			context.SaveChanges();		}		if (!context.IdentityResources.Any())		{			foreach (var resource in Config.IdentityResources)			{				context.IdentityResources.Add(resource.ToEntity());			}			context.SaveChanges();		}		if (!context.ApiScopes.Any())		{			foreach (var scope in Config.ApiScopes)			{				context.ApiScopes.Add(scope.ToEntity());			}			context.SaveChanges();		}	}}

然后启动后就有了。

下一节介绍如何持久化用户数据,然后下下节,介绍各个表。

posted @ 2022-08-28 10:43 敖毛毛 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员