public static void Performseed(ConfigurationDbContext context) { if (!context.Clients.Any()) { foreach (var client in IdentityServerConfiguration.GetClients()) { context.Clients.Add(client.ToEntity()); } context.SaveChanges(); } if (!context.IdentityResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetIdentityResources()) { context.IdentityResources.Add(resource.ToEntity()); } context.SaveChanges(); } if (!context.ApiResources.Any()) { foreach (var api in IdentityServerConfiguration.GetApiResources()) { context.ApiResources.Add(api.ToEntity()); } context.SaveChanges(); } }
public void Initialize() { if (!_configDbContext.Clients.Any()) { foreach (var client in IdentityServerConfiguration.GetClients().ToList()) { _configDbContext.Clients.Add(client.ToEntity()); } _configDbContext.SaveChanges(); } if (!_configDbContext.IdentityResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetIdentityResources().ToList()) { _configDbContext.IdentityResources.Add(resource.ToEntity()); } _configDbContext.SaveChanges(); } if (!_configDbContext.ApiResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetApiResources().ToList()) { _configDbContext.ApiResources.Add(resource.ToEntity()); } _configDbContext.SaveChanges(); } }
private static void InitializeIdentityServer(IServiceProvider provider) { var context = provider.GetRequiredService <ConfigurationDbContext>(); if (!context.Clients.Any()) { foreach (var client in IdentityServerConfiguration.GetClients()) { context.Clients.Add(client.ToEntity()); } context.SaveChanges(); } if (!context.IdentityResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetIdentityResources()) { context.IdentityResources.Add(resource.ToEntity()); } context.SaveChanges(); } if (!context.ApiResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetApis()) { context.ApiResources.Add(resource.ToEntity()); } context.SaveChanges(); } }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddIdentityServer() .AddInMemoryIdentityResources(IdentityServerConfiguration.GetIdentityResources()) .AddInMemoryApiResources(IdentityServerConfiguration.GetApis()) .AddInMemoryClients(IdentityServerConfiguration.GetClients()) .AddTestUsers(IdentityServerConfiguration.GetUsers()) .AddDeveloperSigningCredential(); }
/// <summary> /// Configures the services. /// </summary> /// <param name="services">The services.</param> public void ConfigureServices(IServiceCollection services) { /*services.AddIdentity<ApplicationUser, IdentityRole>() * .AddEntityFrameworkStores<ApplicationDbContext>() * .AddDefaultTokenProviders();*/ services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryApiResources(IdentityServerConfiguration.GetApis()) .AddInMemoryClients(IdentityServerConfiguration.GetClients()); services.AddControllersWithViews(); }
private void ConfigureIdentityServer(IServiceCollection services, string connectionString, IConfiguration configuration) { services.AddIdentityServer(c => { c.Endpoints = GetEndpointsOptions(); c.Discovery = GetDiscoveryOptions(); }) .AddInMemoryIdentityResources(IdentityServerConfiguration.GetIdentityResources()) .AddInMemoryApiResources(IdentityServerConfiguration.GetApiResources()) .AddInMemoryClients(IdentityServerConfiguration.GetClients(BuildClientUriConfigurationDictionary(Configuration))) .AddAspNetIdentity <User>() .AddDeveloperSigningCredential(); }
public async Task Initialize() { this._context.Database.Migrate(); this._persistedGrantContext.Database.Migrate(); this._configContext.Database.Migrate(); if (!this._context.Roles.Any(r => r.Name.Equals(Roles.ADMIN)) || !this._userManager.Users.Any(u => u.UserName.Equals(Roles.ADMIN))) { await this._roleManager.CreateAsync(new IdentityRole(Roles.ADMIN)); await this._roleManager.CreateAsync(new IdentityRole(Roles.USER)); await this._userManager.CreateAsync(new UserEntity { UserName = Roles.ADMIN, Email = ADMIN_EMAIL }, ADMIN_PASS); await this._userManager.AddToRoleAsync(await this._userManager.FindByNameAsync(Roles.ADMIN), Roles.ADMIN); } if (!_configContext.Clients.Any()) { foreach (var client in IdentityServerConfiguration.GetClients()) { this._configContext.Clients.Add(client.ToEntity()); } } if (!_configContext.IdentityResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetIdentityResources()) { this._configContext.IdentityResources.Add(resource.ToEntity()); } } if (!_configContext.ApiResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetApiResources()) { this._configContext.ApiResources.Add(resource.ToEntity()); } } await this._context.SaveChangesAsync(); await this._configContext.SaveChangesAsync(); await this._persistedGrantContext.SaveChangesAsync(); }
public static IServiceCollection ConfigureIdentityServer(this IServiceCollection services) { services.AddIdentityServer().AddDeveloperSigningCredential() // this adds the operational data from DB (codes, tokens, consents) .AddOperationalStore(options => { options.ConfigureDbContext = builder => builder.UseSqlServer(ConfigurationResolver.GetConfiguration().GetConnectionString("SQLServer")); // this enables automatic token cleanup. this is optional. options.EnableTokenCleanup = true; options.TokenCleanupInterval = 30; // interval in seconds }) .AddInMemoryIdentityResources(IdentityServerConfiguration.GetIdentityResources()) .AddInMemoryApiResources(IdentityServerConfiguration.GetApiResources()) .AddInMemoryClients(IdentityServerConfiguration.GetClients()) .AddAspNetIdentity <User>(); return(services); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { IdentityModelEventSource.ShowPII = true; services.AddCors(); services.AddAuthentication(); services.AddAuthorization(); services.AddIdentityServer(options => { options.UserInteraction.LoginUrl = "/Identity/Login"; options.UserInteraction.LogoutUrl = "/Identity/Logout"; }) .AddInMemoryApiResources(IdentityServerConfiguration.GetApiResources()) .AddInMemoryIdentityResources(IdentityServerConfiguration.GetIdentityResources()) .AddInMemoryClients(IdentityServerConfiguration.GetClients()) .AddInMemoryApiScopes(IdentityServerConfiguration.GetApiScopes()) .AddResourceOwnerValidator <ResourceOwnerPasswordValidator>() .AddDeveloperSigningCredential(); services.AddControllersWithViews(); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { NLog.LogManager.Configuration = new NLogLoggingConfiguration(Configuration.GetSection("NLog")); services.AddHealthChecks(); services.AddHttpClient(); services.AddDbContext <DataContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TaskAPI"))); var identityServerOptions = new Common.Options.IdentityServerOptions(); Configuration.Bind("IdentityServer", identityServerOptions); var certificatePath = Path.Combine(Directory.GetCurrentDirectory(), identityServerOptions.CertFolder, identityServerOptions.CertFile); Console.WriteLine(certificatePath); services.AddIdentityServer() .AddInMemoryIdentityResources(IdentityServerConfiguration.GetIdentityResources()) .AddInMemoryApiResources(IdentityServerConfiguration.GetApiResources(identityServerOptions.Scope)) .AddInMemoryClients(IdentityServerConfiguration.GetClients(identityServerOptions.ClientId, identityServerOptions.ClientSecret)) .AddResourceOwnerValidator <CustomResourceOwnerPasswordValidator>() .AddProfileService <CustomProfileService>() .AddDeveloperSigningCredential() /** .AddSigningCredential(new X509Certificate2(certificatePath, identityServerOptions.CertPassword)) **/ ; services.AddMvcCore().AddApiExplorer(); services .AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver { NamingStrategy = new SnakeCaseNamingStrategy() }; }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddHangfire(configuration => configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSqlServerStorage(Configuration.GetConnectionString("SqlConnection"), new SqlServerStorageOptions { CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), QueuePollInterval = TimeSpan.Zero, UseRecommendedIsolationLevel = true, DisableGlobalLocks = true })); services.AddHangfireServer(); services.AddCors(options => { options.AddPolicy(name: AllowSpecificOrigins, builder => { builder.WithOrigins("http://localhost:3000") .AllowAnyHeader() .AllowAnyMethod(); }); }); services.AddSignalR(); services.AddControllers().AddNewtonsoftJson(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore );; services.AddDbContext <ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlConnection"))); //Dev db and real db are different Reminder services.AddScoped <IAuthorizationHandler, PermissionHandler>(); services.AddSimpleInjector(container, options => { options.AddAspNetCore() .AddControllerActivation(); }); services.AddIdentity <User, Roles>(options => { options.SignIn.RequireConfirmedAccount = true; options.Tokens.EmailConfirmationTokenProvider = TokenOptions.DefaultEmailProvider; }).AddDefaultTokenProviders() .AddEntityFrameworkStores <ApplicationDbContext>(); services.AddIdentityServer() .AddJwtBearerClientAuthentication() .AddAspNetIdentity <User>() .AddInMemoryApiResources(IdentityServerConfiguration.GetApis()) .AddInMemoryClients(IdentityServerConfiguration.GetClients()) .AddDeveloperSigningCredential(); var JwtSettingsSection = Configuration.GetSection("JwtSettings"); services.Configure <JwtTokenSettings>(JwtSettingsSection); var JwtTokenSettings = JwtSettingsSection.Get <JwtTokenSettings>(); var key = Encoding.ASCII.GetBytes(JwtTokenSettings.Secret); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer("Bearer", options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters() { IssuerSigningKey = new SymmetricSecurityKey(key), ValidIssuer = JwtTokenSettings.Issuer, ValidAudience = JwtTokenSettings.Audience, ClockSkew = TimeSpan.Zero }; options.Events = new JwtBearerEvents { OnMessageReceived = context => { var accessToken = context.Request.Query["access_token"]; // If the request is for hub var path = context.HttpContext.Request.Path; if (!string.IsNullOrEmpty(accessToken) && (path.StartsWithSegments("/ingredients"))) { // Read the token out of the query string context.Token = accessToken; } return(Task.CompletedTask); } }; }); services.AddAuthorization(options => options = PermissionSettings.CreatePermissions(options) ); }
public static void Main(string[] args) { Console.Title = "Chat Api"; var host = WebHost .CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, config) => { var environment = context.HostingEnvironment; config .SetBasePath(environment.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); if (environment.IsDevelopment()) { config.AddUserSecrets <Program>(); } if (null != args) { config.AddCommandLine(args); } }) .ConfigureServices((context, services) => { var environment = context.HostingEnvironment; if (environment.IsDevelopment()) { } services .TryAddSingleton(provider => { var client = new ClientBuilder() .UseLocalhostClustering() .Configure <ClusterOptions>(options => { options.ClusterId = "dev"; options.ServiceId = "chatroom-local"; }) .ConfigureLogging(logging => { logging.AddConsole(); }) .AddSimpleMessageStreamProvider(Constants.StreamProviders.ChatRooms) .Build(); var awaiter = client.Connect().GetAwaiter(); awaiter.GetResult(); return(client); }); services .AddDbContext <ChatIdentityDbContext>(options => { options.UseSqlite(context.Configuration.GetConnectionString("Chat")); }) .AddIdentity <Customer, CustomerRole>(options => { options.User.RequireUniqueEmail = true; }) .AddEntityFrameworkStores <ChatIdentityDbContext>() .AddDefaultTokenProviders(); services .AddIdentityServer(options => { options.Endpoints = new EndpointsOptions { EnableDiscoveryEndpoint = true, EnableAuthorizeEndpoint = true, EnableCheckSessionEndpoint = true, EnableEndSessionEndpoint = true, EnableUserInfoEndpoint = true }; //options.Events.RaiseErrorEvents = true; //options.Events.RaiseSuccessEvents = true; options.UserInteraction.LoginUrl = "/account/signin"; options.UserInteraction.ConsentUrl = "/consent/confirm"; options.UserInteraction.ErrorUrl = "/account/error"; }) // https://github.com/IdentityServer/IdentityServer4/blob/44651bea9b02c992902639b21205f433aad47d03/src/IdentityServer4/src/Configuration/DependencyInjection/BuilderExtensions/Crypto.cs .AddSigninCredentials(context.Configuration.GetSection("IdentityServer:Key")) .AddAspNetIdentity <Customer>() .AddConfigurationStore(options => { options.ConfigureDbContext = database => { database.UseSqlite(context.Configuration.GetConnectionString("Identity")); }; }) .AddOperationalStore(options => { options.ConfigureDbContext = database => { database.UseSqlite(context.Configuration.GetConnectionString("Identity")); }; }); services .AddAutoMapper(options => { // action results options .CreateMap <RoomDescription, RoomCreatedResult>() .ForMember( result => result.Id, map => map.MapFrom(source => source.Id) ) .ForMember( result => result.Name, map => map.MapFrom(source => source.Name) ) .ForMember( result => result.Description, map => map.MapFrom(source => source.Description) ); options .CreateMap <RoomDescription, RoomResult>() .ForMember( result => result.Id, map => map.MapFrom(source => source.Id) ) .ForMember( result => result.Name, map => map.MapFrom(source => source.Name) ) .ForMember( result => result.Description, map => map.MapFrom(source => source.Description) ); options .CreateMap <RoomDescription, RoomDetails>() .ForMember( result => result.Id, map => map.MapFrom(source => source.Id) ) .ForMember( result => result.Name, map => map.MapFrom(source => source.Name) ) .ForMember( result => result.Description, map => map.MapFrom(source => source.Description) ); }, typeof(Program).Assembly ); services .AddMediatR( typeof(Program).Assembly ); services .AddLogging() .AddSingleton <IChatRoomRegistry, ChatRoomRegistry>() .AddWebSocketHandlers(options => { options.Register <ChatRoomWebSocketHandler>("api/chat/{room:long}"); }) .AddControllers(options => { options.EnableEndpointRouting = true; }); services .AddRazorPages(options => { //options.RootDirectory = "/Pages"; }) .SetCompatibilityVersion(CompatibilityVersion.Version_3_0); services .AddHsts(options => { options.Preload = true; options.IncludeSubDomains = true; //options.ExcludedHosts.Add("http://localhost:5000"); }) .AddHttpsRedirection(options => { options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect; options.HttpsPort = 5001; }); services .AddOidcStateDataFormatterCache() .AddAuthorization(options => options.AddPolicy( "Customers", policy => policy.RequireClaim("role", "Customer") ) ) //.AddAuthentication(IdentityConstants.ApplicationScheme) .AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.Authority = "https://localhost:5001"; options.RequireHttpsMetadata = true; options.Audience = "chat.api"; options.TokenValidationParameters.RoleClaimType = "role"; }) //.AddOpenIdConnect() ; services.ConfigureApplicationCookie(options => { options.Cookie.Name = "Chat.Identity"; }); services .AddTransient <ISigninService <Customer, long>, EntityFrameworkSigninService>(); var seed = context.Configuration.GetValue <string>("seed"); if (false == String.IsNullOrEmpty(seed)) { services.AddScoped <ConfigurationDbSetup>(); } }) .Configure(app => { var provider = app.ApplicationServices; var environment = provider.GetRequiredService <IWebHostEnvironment>(); if (environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app .UseHttpsRedirection() .UseStaticFiles() .UseWebSockets(new WebSocketOptions { KeepAliveInterval = TimeSpan.FromSeconds(30.0d), ReceiveBufferSize = 8096 }) .UseMiddleware <WebSocketsMiddleware>() .UseAuthentication() .UseIdentityServer() .UseRouting() .UseAuthorization() .UseEndpoints(routes => { routes.MapControllers(); }); }) .Build(); host.MigrateDbContext <ConfigurationDbContext>(async(context, services) => { var setup = services.GetService <ConfigurationDbSetup>(); if (null != setup) { await setup.SeedAsync( IdentityServerConfiguration.GetClients(), IdentityServerConfiguration.GetIdentityResources(), IdentityServerConfiguration.GetApiResources() ); } }); host.Run(); }
/// <summary> /// Configura os serviços do sistema /// </summary> /// <param name="services"></param> /// <returns></returns> public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddControllers().AddNewtonsoftJson(); services.AddAutofac(); services.AddApiVersioning(p => { p.DefaultApiVersion = new ApiVersion(1, 0); p.ReportApiVersions = true; p.AssumeDefaultVersionWhenUnspecified = true; }); ContainerBuilder container = new ContainerBuilder(); services.AddMvc(options => { options.Filters.Add(new HeaderFilter()); options.Filters.Add(new ProtocolFilter()); //options.Filters.Add(new ValidatorFilter()); }); services.ConfigureOptions(Configuration); // configure identity server with in-memory stores, keys, clients and scopes services.AddIdentityServer() .AddDeveloperSigningCredential() //AddSigningCredential() .AddInMemoryClients(IdentityServerConfiguration.GetClients()) .AddInMemoryIdentityResources(IdentityServerConfiguration.GetIdentityResources()) .AddInMemoryApiScopes(IdentityServerConfiguration.GetApiScopes()) .AddInMemoryApiResources(IdentityServerConfiguration.GetApiResources()) .AddResourceOwnerValidator <Application.Auth.ResourceOwnerPasswordValidator>(); //.AddLdapUsers<OpenLdapAppUser>(Configuration.GetSection("ldapActiveDirectory"), UserStore.InMemory); // Configurando o serviço de documentação do Swagger services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Sistema de recursos humanos", Version = "v1", Description = "API REST para manutenção de dados de colaboradores da Susep", }); string caminhoAplicacao = PlatformServices.Default.Application.ApplicationBasePath; string nomeAplicacao = PlatformServices.Default.Application.ApplicationName; string caminhoXmlDoc = Path.Combine(caminhoAplicacao, $"{nomeAplicacao}.xml"); c.IncludeXmlComments(caminhoXmlDoc); }); services.ConfigureOptions(Configuration); container.Populate(services); container.RegisterModule(new MediatorModuleConfiguration()); container.RegisterModule(new ApplicationModuleConfiguration(Configuration)); return(new AutofacServiceProvider(container.Build())); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); // Register the Swagger generator, defining 1 or more Swagger documents services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "The CRM Api", Version = "v1" }); }); // Register Entity Framework Core services.AddDbContext <ApplicationDbContext>( options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection")) ); // Identity services.AddIdentity <ApplicationUser, ApplicationRole>() .AddEntityFrameworkStores <ApplicationDbContext>() .AddDefaultTokenProviders(); // Identity configuration services.Configure <IdentityOptions>(options => { options.Password.RequireDigit = false; options.Password.RequireLowercase = false; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequiredLength = 6; options.Password.RequiredUniqueChars = 1; }); // Register Common Services services.AddHttpContextAccessor(); services.AddTransient <ICurrentUserService, CurrentUserService>(); services.AddTransient <IImageUploadService, ImageUploadPhysicalService>(); services.AddTransient <ITokenCreationService, TokenCreationService>(); // Register Query Services services.AddTransient <ICustomerQueryService, CustomerQueryService>(); services.AddTransient <IUserQueryService, UserQueryService>(); // Register Command handlers services.AddMediatR(Assembly.Load("CRM.Service.EventHandler")); // IdentityServer Configuration services.AddIdentityServer() .AddDeveloperSigningCredential(persistKey: true) .AddInMemoryIdentityResources(IdentityServerConfiguration.GetIdentityResources()) .AddInMemoryApiResources(IdentityServerConfiguration.GetApis()) .AddInMemoryClients(IdentityServerConfiguration.GetClients(Configuration)) .AddAspNetIdentity <ApplicationUser>() .AddProfileService <ProfileService>(); // Schema Authentication services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme) .AddIdentityServerAuthentication(options => { options.Authority = Configuration.GetValue <string>("IdentityServer:Authority"); options.RequireHttpsMetadata = false; options.ApiName = "CRM.Api"; options.RoleClaimType = ClaimTypes.Role; }); }
public static void Init(IServiceProvider scopeServiceProvider) { var userManager = scopeServiceProvider.GetService <UserManager <IdentityUser> >(); var user = new IdentityUser { UserName = "******" }; var author = new IdentityUser { UserName = "******" }; var editor = new IdentityUser { UserName = "******" }; var resultUser = userManager.CreateAsync(user, "123qwe").GetAwaiter().GetResult(); var resultAuthor = userManager.CreateAsync(author, "123qwe").GetAwaiter().GetResult(); var resultEditor = userManager.CreateAsync(editor, "123qwe").GetAwaiter().GetResult(); if (resultUser.Succeeded && resultAuthor.Succeeded && resultEditor.Succeeded) { userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, "User")).GetAwaiter().GetResult(); userManager.AddClaimAsync(user, new Claim(JwtClaimTypes.Scope, "OrdersAPI")).GetAwaiter().GetResult(); userManager.AddClaimAsync(author, new Claim(ClaimTypes.Role, "Author")).GetAwaiter().GetResult(); userManager.AddClaimAsync(author, new Claim(JwtClaimTypes.Scope, "OrdersAPI")).GetAwaiter().GetResult(); userManager.AddClaimAsync(editor, new Claim(ClaimTypes.Role, "Editor")).GetAwaiter().GetResult(); userManager.AddClaimAsync(editor, new Claim(JwtClaimTypes.Scope, "OrdersAPI")).GetAwaiter().GetResult(); } scopeServiceProvider.GetRequiredService <PersistedGrantDbContext>().Database.Migrate(); var context = scopeServiceProvider.GetRequiredService <ConfigurationDbContext>(); context.Database.Migrate(); if (!context.Clients.Any()) { foreach (var client in IdentityServerConfiguration.GetClients()) { context.Clients.Add(client.ToEntity()); } context.SaveChanges(); } if (!context.IdentityResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetIdentityResources()) { context.IdentityResources.Add(resource.ToEntity()); } context.SaveChanges(); } if (!context.ApiResources.Any()) { foreach (var resource in IdentityServerConfiguration.GetApiResources()) { context.ApiResources.Add(resource.ToEntity()); } context.SaveChanges(); } }