Example #1
0
        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);
        }
Example #2
0
        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();
        }
Example #3
0
        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();//ÅäÖÃÈÏÖ¤·þÎñ
        }
Example #4
0
 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>();
     }
 }
Example #5
0
        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();
            }
        }
Example #6
0
        // 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);
        }
Example #8
0
        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;
                    }
                }
            }
        }