Пример #1
0
        /// <summary>
        /// Applies the IS resource configuration seed
        /// </summary>
        /// <param name="context">
        /// DbContext for the IdentityServer configuration data
        /// </param>
        /// <param name="env">App environment</param>
        /// <param name="logger">App logger</param>
        /// <param name="settings">App settings</param>
        /// <param name="clientSettings">Client settings</param>
        /// <returns></returns>
        public async Task EnsureSeedData(ConfigurationDbContext context, IHostingEnvironment env,
                                         ILogger <ConfigurationDbContext> logger,
                                         IOptions <AppSettings> settings,
                                         IOptions <ClientSettings> clientSettings)
        {
            var appSettings       = settings.Value;
            var clientUrlSettings = clientSettings.Value;

            Console.WriteLine("Seeding database...");

            if (!context.Clients.Any())
            {
                Console.WriteLine("Clients being populated");
                foreach (var client in Config.GetClients(clientUrlSettings).ToList())
                {
                    await context.Clients.AddAsync(client.ToEntity());
                }
                await context.SaveChangesAsync();
            }
            else
            {
                Console.WriteLine("Clients already populated");
            }

            if (!context.IdentityResources.Any())
            {
                Console.WriteLine("IdentityResources being populated");
                foreach (var resource in Config.GetIdentityResources().ToList())
                {
                    await context.IdentityResources.AddAsync(resource.ToEntity());
                }
                await context.SaveChangesAsync();
            }
            else
            {
                Console.WriteLine("IdentityResources already populated");
            }

            if (!context.ApiResources.Any())
            {
                Console.WriteLine("ApiResources being populated");
                foreach (var resource in Config.GetApis().ToList())
                {
                    await context.ApiResources.AddAsync(resource.ToEntity());
                }
                await context.SaveChangesAsync();
            }
            else
            {
                Console.WriteLine("ApiResources already populated");
            }

            Console.WriteLine("Done seeding database.");
            Console.WriteLine();
        }
Пример #2
0
        public async Task SeedAsync()
        {
            try
            {
                Config config = await GetConfig();

                if (!_context.Clients.Any())
                {
                    _logger.LogInformation("Clients being populated");
                    foreach (IdentityServer4.Models.Client client in config.Clients)
                    {
                        _context.Clients.Add(client.ToEntity());
                    }
                    await _context.SaveChangesAsync();
                }
                else
                {
                    _logger.LogInformation("Clients already populated");
                }

                if (!_context.IdentityResources.Any())
                {
                    _logger.LogInformation("IdentityResources being populated");
                    foreach (IdentityServer4.Models.IdentityResource resource in config.IdentityResources)
                    {
                        _context.IdentityResources.Add(resource.ToEntity());
                    }
                    await _context.SaveChangesAsync();
                }
                else
                {
                    _logger.LogInformation("IdentityResources already populated");
                }

                if (!_context.ApiResources.Any())
                {
                    _logger.LogInformation("ApiResources being populated");
                    foreach (IdentityServer4.Models.ApiResource resource in config.ApiResources)
                    {
                        _context.ApiResources.Add(resource.ToEntity());
                    }
                    await _context.SaveChangesAsync();
                }
                else
                {
                    _logger.LogInformation("ApiResources already populated");
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, "SeedAsync");
            }
        }
        public async Task SeedAsync(ConfigurationDbContext context, IConfiguration configuration)
        {
            //callbacks urls from config:
            var clientUrls = new Dictionary <string, string>();

            clientUrls.Add(configuration["Clients:WebClient1:ClientId"], configuration["Clients:WebClient1:ClientUri"]);
            clientUrls.Add(configuration["Clients:WebClient2:ClientId"], configuration["Clients:WebClient2:ClientUri"]);
            clientUrls.Add(configuration["Clients:ApiClient1:ClientId"], configuration["Clients:ApiClient1:ClientUri"]);
            clientUrls.Add(configuration["Clients:ApiClient2:ClientId"], configuration["Clients:ApiClient2:ClientUri"]);

            if (!context.Clients.Any())
            {
                foreach (var client in Config.GetClients(clientUrls))
                {
                    context.Clients.Add(client.ToEntity());
                }
                await context.SaveChangesAsync();
            }

            if (!context.IdentityResources.Any())
            {
                foreach (var resource in Config.GetResources())
                {
                    context.IdentityResources.Add(resource.ToEntity());
                }
                await context.SaveChangesAsync();
            }

            if (!context.ApiResources.Any())
            {
                foreach (var api in Config.GetApis())
                {
                    context.ApiResources.Add(api.ToEntity());
                }

                await context.SaveChangesAsync();
            }

            if (!context.ApiScopes.Any())
            {
                foreach (var scope in Config.GetApiScopes())
                {
                    context.ApiScopes.Add(scope.ToEntity());
                }
                await context.SaveChangesAsync();
            }
        }
        public async Task SeedAsync(ConfigurationDbContext context, IConfiguration configuration)
        {
            if (!context.Clients.Any())
            {
                foreach (var client in Config.GetClients(configuration))
                {
                    context.Clients.Add(client.ToEntity());
                }
                await context.SaveChangesAsync();
            }

            if (!context.IdentityResources.Any())
            {
                foreach (var resource in Config.IdentityResources)
                {
                    context.IdentityResources.Add(resource.ToEntity());
                }
                await context.SaveChangesAsync();
            }

            // register scopes before resources see: http://docs.identityserver.io/en/latest/topics/resources.html
            // To migrate to v4 you need to split up scope and resource registration, typically by first registering all your scopes
            if (!context.ApiScopes.Any())
            {
                foreach (var api in Config.ApiScopes)
                {
                    context.ApiScopes.Add(api.ToEntity());
                }

                await context.SaveChangesAsync();
            }

            //register resources after scopes see: http://docs.identityserver.io/en/latest/topics/resources.html
            if (!context.ApiResources.Any())
            {
                foreach (var api in Config.ApiResources)
                {
                    context.ApiResources.Add(api.ToEntity());
                }

                await context.SaveChangesAsync();
            }
        }
        /// <summary>
        /// Creates sample clients, scopes and resources
        /// </summary>
        /// <param name="context">Database context</param>
        /// <param name="configuration">Application configuration provider</param>
        /// <returns>Task object representing the asynchronous operation</returns>
        public async Task SeedAsync(ConfigurationDbContext context, IConfiguration configuration)
        {
            var clientUrl = configuration.GetValue <string>("WeatherApiClient");

            if (!context.Clients.Any())
            {
                foreach (var client in Config.Clients(clientUrl))
                {
                    await context.Clients.AddAsync(client.ToEntity());
                }

                await context.SaveChangesAsync();
            }
            else
            {
                var oldRedirects = (await context.Clients.Include(c => c.RedirectUris)
                                    .ToListAsync())
                                   .SelectMany(c => c.RedirectUris)
                                   .Where(ru => ru.RedirectUri.EndsWith("/o2c.html"))
                                   .ToList();

                if (oldRedirects.Any())
                {
                    foreach (var redirectUri in oldRedirects)
                    {
                        redirectUri.RedirectUri = redirectUri.RedirectUri.Replace("/o2c.html", "/oauth2-redirect.html");
                        context.Update(redirectUri.Client);
                    }
                    await context.SaveChangesAsync();
                }
            }

            if (!context.IdentityResources.Any())
            {
                foreach (var resource in Config.Resources())
                {
                    await context.IdentityResources.AddAsync(resource.ToEntity());
                }

                await context.SaveChangesAsync();
            }

            if (!context.ApiResources.Any())
            {
                foreach (var api in Config.Apis())
                {
                    await context.ApiResources.AddAsync(api.ToEntity());
                }

                await context.SaveChangesAsync();
            }

            if (!context.ApiScopes.Any())
            {
                foreach (var scope in Config.Scopes())
                {
                    await context.ApiScopes.AddAsync(scope.ToEntity());
                }

                await context.SaveChangesAsync();
            }
        }