Как перенести конфигурацию кода Identity Server 6 в базу данных?

Я использую Identity Server 6 и следую различным кратким руководствам, чтобы начать работу с ним. У меня есть закодированная конфигурация (в файле Config.cs), но мой IS-сервер теперь использует поставщик конфигурации базы данных EF для MS SQL. Теперь я хочу взять закодированную конфигурацию клиента и перенести ее в свою базу данных. Я нашел статью, в которой описывается один из подходов к написанию кода, который сделает это. Код показан ниже. Однако этот код не скомпилируется в моем проекте IS 6, поскольку объект InMemoryConfig не распознается. Я предполагаю, что это связано с тем, что код, возможно, был создан для более ранней версии IS; однако, поскольку я не знаком с исходным кодом IS, я даже не знаю, с чего начать, когда дело доходит до его обновления или адаптации.

По сути, я ищу любое решение, которое автоматизирует процесс записи конфигурации кода IS 6 в базу данных IS 6 EF.

Был бы очень признателен за любые указания в правильном направлении. Заранее спасибо.

      using Duende.IdentityServer.EntityFramework.DbContexts;
using Microsoft.EntityFrameworkCore;

namespace IdentityServer
{
    public static class MigrationManager
    {
        public static IHost MigrateDatabase(this IHost host)
        {
            using (var scope = host.Services.CreateScope())
            {
                scope.ServiceProvider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();

                using (var context = scope.ServiceProvider.GetRequiredService<ConfigurationDbContext>())
                {
                    try
                    {
                        context.Database.Migrate();

                        if (!context.Clients.Any())
                        {
                            foreach (var client in InMemoryConfig.GetClients())
                            {
                                context.Clients.Add(client.ToEntity());
                            }
                            context.SaveChanges();
                        }

                        if (!context.IdentityResources.Any())
                        {
                            foreach (var resource in InMemoryConfig.GetIdentityResources())
                            {
                                context.IdentityResources.Add(resource.ToEntity());
                            }
                            context.SaveChanges();
                        }

                        if (!context.ApiScopes.Any())
                        {
                            foreach (var apiScope in InMemoryConfig.GetApiScopes())
                            {
                                context.ApiScopes.Add(apiScope.ToEntity());
                            }

                            context.SaveChanges();
                        }

                        if (!context.ApiResources.Any())
                        {
                            foreach (var resource in InMemoryConfig.GetApiResources())
                            {
                                context.ApiResources.Add(resource.ToEntity());
                            }
                            context.SaveChanges();
                        }
                    }
                    catch (Exception ex)
                    {
                        //Log errors or do anything you think it's needed
                        throw;
                    }
                }
            }

            return host;
        }
    }
}

0 ответов

Другие вопросы по тегам