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); }
public void ConfigureServices(IServiceCollection services) { services.AddIdentityServer() .AddInMemoryApiResources(InMemoryConfig.GetApiResources()) .AddInMemoryIdentityResources(InMemoryConfig.GetIdentityResources()) .AddTestUsers(InMemoryConfig.GetUsers()) .AddInMemoryClients(InMemoryConfig.GetClients()) .AddDeveloperSigningCredential(); // Not for production. Use AddSigningCredentials services.AddControllersWithViews(); }
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); var builder = services.AddIdentityServer(options => { options.Events.RaiseErrorEvents = true; options.Events.RaiseInformationEvents = true; options.Events.RaiseFailureEvents = true; options.Events.RaiseSuccessEvents = true; }).AddTestUsers(InMemoryConfig.Users().ToList()) .AddInMemoryApiResources(InMemoryConfig.GetApiResources()) .AddInMemoryClients(InMemoryConfig.GetClients()); builder.AddDeveloperSigningCredential(); services.AddAuthentication();//ÅäÖÃÈÏÖ¤·þÎñ }
private static void AddIdentityServer(IServiceCollection services, IWebHostEnvironment environment) { if (environment.IsEnvironment("Test")) { services.AddIdentityServer() .AddApiAuthorization <ApplicationUser, ApplicationDbContext>() //api resources .AddInMemoryApiResources(InMemoryConfig.GetApiResources()) .AddInMemoryApiScopes(InMemoryConfig.GetApiScopes()) .AddTestUsers(InMemoryConfig.Users().ToList()) .AddInMemoryIdentityResources(InMemoryConfig.GetIdentityResources()) .AddInMemoryClients(InMemoryConfig.GetClients()); } else { services.AddIdentityServer() .AddApiAuthorization <ApplicationUser, ApplicationDbContext>(); } }
private static void EnsureSeedData(ConfigurationDbContext context) { if (!context.Clients.Any()) { Console.WriteLine("Clients 正在初始化"); foreach (var client in InMemoryConfig.GetClients()) { context.Clients.Add(client.ToEntity()); } context.SaveChanges(); } if (!context.IdentityResources.Any()) { Console.WriteLine("IdentityResources 正在初始化"); foreach (var resource in InMemoryConfig.GetIdentityResources()) { context.IdentityResources.Add(resource.ToEntity()); } context.SaveChanges(); } if (!context.ApiResources.Any()) { Console.WriteLine("ApiResources 正在初始化"); foreach (var resource in InMemoryConfig.GetApiResources()) { context.ApiResources.Add(resource.ToEntity()); } context.SaveChanges(); } if (!context.ApiScopes.Any()) { Console.WriteLine("ApiScopes 正在初始化"); foreach (var resource in InMemoryConfig.GetApiScopes()) { context.ApiScopes.Add(resource.ToEntity()); } context.SaveChanges(); } }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { //ADD IDENTITY SERVER services.AddIdentityServer() .AddInMemoryApiResources(InMemoryConfig.GetApiResources()) .AddInMemoryIdentityResources(InMemoryConfig.GetIdentityResources()) .AddTestUsers(InMemoryConfig.GetUsers()) .AddInMemoryClients(InMemoryConfig.GetClients()) .AddDeveloperSigningCredential(); //add authentication services.AddAuthentication("Bearer").AddJwtBearer("Bearer", opt => { opt.RequireHttpsMetadata = false; opt.Authority = "https://localhost:5005"; opt.Audience = "companyApi"; }); //add view and controller services.AddControllersWithViews(); }
public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration) { var clientUrls = new Dictionary <string, string> { ["Swagger"] = configuration["ClientUrl:Swagger"], ["Mvc"] = configuration["ClientUrl:Mvc"], ["React"] = configuration["ClientUrl:React"] }; if (configuration.GetValue <bool>("UseInMemoryDatabase")) { services.AddDbContext <ApplicationDbContext>(options => options.UseInMemoryDatabase("MsCoreOneDb")); } else { services.AddDbContext <ApplicationDbContext>(options => options.UseSqlServer( configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly(typeof(ApplicationDbContext).Assembly.FullName))); } services.AddScoped <IApplicationDbContext>(provider => provider.GetService <ApplicationDbContext>()); services.AddDefaultIdentity <ApplicationUser>() .AddEntityFrameworkStores <ApplicationDbContext>(); services.AddIdentityServer(options => { options.Events.RaiseErrorEvents = true; options.Events.RaiseInformationEvents = true; options.Events.RaiseFailureEvents = true; options.Events.RaiseSuccessEvents = true; }) .AddInMemoryIdentityResources(InMemoryConfig.GetIdentityResources()) .AddInMemoryApiResources(InMemoryConfig.GetApiResources()) .AddInMemoryClients(InMemoryConfig.GetClients(clientUrls)) .AddAspNetIdentity <ApplicationUser>() .AddDeveloperSigningCredential(); services.AddTransient <IIdentityService, IdentityService>(); services.AddTransient <IStorageService, FileStorageService>(); services.AddAuthentication() .AddLocalApi("Bearer", option => { option.ExpectedScope = "api.mscoreone"; }); services.AddAuthorization(options => { options.AddPolicy("Bearer", policy => { policy.AddAuthenticationSchemes("Bearer"); policy.RequireAuthenticatedUser(); }); }); services.AddCors(options => { options.AddPolicy("MsCoreOneOrigins", builder => { builder.WithOrigins(clientUrls["Mvc"], clientUrls["React"], clientUrls["Swagger"]) .AllowAnyHeader() .AllowAnyMethod(); }); }); services.ConfigureApplicationCookie(c => { c.Events = new CookieAuthenticationEvents() { OnRedirectToLogin = (ctx) => { if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200) { ctx.Response.StatusCode = 401; } return(Task.CompletedTask); }, OnRedirectToAccessDenied = (ctx) => { if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200) { ctx.Response.StatusCode = 403; } return(Task.CompletedTask); } }; }); services.AddSingleton <IUriService>(o => { return(new UriService(clientUrls["Swagger"])); }); return(services); }
private void FillIs4DataBase(IApplicationBuilder app) { using (var serviceScope = app.ApplicationServices.GetService <IServiceScopeFactory>().CreateScope()) { if (serviceScope.ServiceProvider.GetRequiredService <PersistedGrantDbContext>().Database.EnsureCreated()) { try { var context = serviceScope.ServiceProvider.GetRequiredService <ConfigurationDbContext>(); 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) { throw; } try { var manager = serviceScope.ServiceProvider.GetRequiredService <SignInManager <IdentityUser> >(); var usercontext = serviceScope.ServiceProvider.GetRequiredService <IdentityUsersContext>(); usercontext.Database.Migrate(); if (!usercontext.Users.Any()) { foreach (var user in InMemoryConfig.GetUsers()) { var newUser = new IdentityUser { UserName = user.Username, Id = user.SubjectId }; newUser.PasswordHash = new PasswordHasher <IdentityUser>().HashPassword(newUser, user.Password); var task = Task.Run(async() => { await manager.UserManager.CreateAsync(newUser); }); task.Wait(); foreach (var claim in user.Claims) { usercontext.UserClaims.Add( new IdentityUserClaim <string> { ClaimType = claim.Type, ClaimValue = claim.Value, UserId = user.SubjectId }); usercontext.SaveChanges(); } } } if (!usercontext.UserRoles.Any()) { usercontext.Roles.Add(new IdentityRole("manager")); usercontext.Roles.Add(new IdentityRole("developer")); usercontext.SaveChanges(); } //if (!usercontext.UserClaims.Any()) //{ // foreach (var user in InMemoryConfig.GetUsers()) // { // } // usercontext.SaveChanges(); //} } catch (Exception ex) { throw ex; } } } }