/// <summary>
        /// init identity data base
        /// </summary>
        /// <param name="app"></param>
        public static void InitializeIdentityDatabase(this 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();
                foreach (var item in context.Clients)
                {
                    context.Clients.Remove(item);
                }
                foreach (var item in context.IdentityResources)
                {
                    context.IdentityResources.Remove(item);
                }
                foreach (var item in context.ApiResources)
                {
                    context.ApiResources.Remove(item);
                }
                context.SaveChanges();
                if (!context.Clients.Any())
                {
                    foreach (var client in IdentityConfig.GetClients())
                    {
                        context.Clients.Add(client.ToEntity());
                    }
                    context.SaveChanges();
                }

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

                if (!context.ApiResources.Any())
                {
                    foreach (var resource in IdentityConfig.GetApis())
                    {
                        context.ApiResources.Add(resource.ToEntity());
                    }
                    context.SaveChanges();
                }
            }
        }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <CodenationContext>();
            services.AddScoped <IResourceOwnerPasswordValidator, PasswordValidatorService>();
            services.AddScoped <IProfileService, UserProfileService>();
            var builder = services.AddIdentityServer()
                          .AddInMemoryIdentityResources(IdentityConfig.GetIdentityResources())
                          .AddInMemoryApiResources(IdentityConfig.GetApis())
                          .AddInMemoryClients(IdentityConfig.GetClients())
                          .AddProfileService <UserProfileService>();

            if (Environment.IsDevelopment())
            {
                builder.AddDeveloperSigningCredential();
            }
            else
            {
                throw new Exception("ambiente de produção precisa de chave real");
            }
        }
Exemple #3
0
        public void ConfigureServices(IServiceCollection services)
        {
            //configuração de contexto
            services.AddDbContext <CodenationContext>();
            //adicionar scoped interfaces - services - classe de validação de senha e usuário
            services.AddScoped <IResourceOwnerPasswordValidator, PasswordValidatorService>();
            services.AddScoped <IProfileService, UserProfileService>();
            //start classe identityconfig
            var builder = services.AddIdentityServer()
                          .AddInMemoryIdentityResources(IdentityConfig.GetIdentityResources())
                          .AddInMemoryApiResources(IdentityConfig.GetApis())
                          .AddInMemoryClients(IdentityConfig.GetClients())
                          .AddProfileService <UserProfileService>();

            //ambiente
            if (Environment.IsDevelopment())
            {
                builder.AddDeveloperSigningCredential();
            }
            else
            {
                throw new Exception("ambiente de produção precisa de chave real");
            }
        }