예제 #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            var LockOutOption = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                MaxFailedAccessAttempts = 5,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5)
            };

            services.AddDbContext <SurveyContext>(options =>
                                                  options.UseSqlServer(
                                                      Configuration.GetConnectionString("DefaultConnection")));
            services.AddIdentity <ApplicationUser, IdentityRole>(Options => {
                Options.Lockout = LockOutOption;
                Options.SignIn.RequireConfirmedEmail = true;
            })
            .AddDefaultUI(UIFramework.Bootstrap4)
            .AddEntityFrameworkStores <SurveyContext>().AddDefaultTokenProviders();

            services.AddTransient <IEmailSender, EmailSender>();

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddAuthentication();
        }
예제 #2
0
        public static IServiceCollection MongoIdentityService(this IServiceCollection services)
        {
            services.AddTransient <MongoTablesFactory>();
            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(10),
                MaxFailedAccessAttempts = 3
            };

            services.AddDefaultIdentity <ApplicationUser>(opt =>
            {
                opt.Password.RequireDigit           = false;
                opt.Password.RequiredLength         = 6;
                opt.Password.RequireLowercase       = false;
                opt.Password.RequireNonAlphanumeric = false;
                opt.Password.RequireUppercase       = false;
                opt.Lockout = lockoutOptions;
                opt.SignIn.RequireConfirmedAccount = false;
                opt.User.RequireUniqueEmail        = true;
            })
            .AddRoles <ApplicationRole>()
            .AddDefaultTokenProviders()
            .AddRoleStore <MongoRoleStore <ApplicationRole, ObjectId> >()
            .AddUserStore <MongoUserStore <ApplicationUser, ObjectId> >();
            services.AddScoped <IUserClaimsPrincipalFactory <ApplicationUser>,
                                AdditionalUserClaimsPrincipalFactory>();

            return(services);
        }
 public void SetLockoutPolicy(LockoutOptions opts)
 {
     lock (_lock)
     {
         PolicyOptions.Lockout = opts;
     }
 }
예제 #4
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var lockoutOptions = new LockoutOptions
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(1),
                MaxFailedAccessAttempts = 3
            };

            services.AddIdentity <User, Role>(options =>
            {
                options.SignIn.RequireConfirmedAccount = true;
                options.User.RequireUniqueEmail        = true;
                options.Lockout = lockoutOptions;
            }).AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders()
            .AddDefaultUI();


            services.AddRouting(options => options.LowercaseUrls = true);

            services.AddDbContext <ApplicationDbContext>(options =>
            {
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
            });

            services.AddTransient <IEmailSender, EmailSender>();
            services.Configure <AuthMessageSenderOptions>(Configuration);

            services.AddControllersWithViews();
            services.AddRazorPages();
        }
예제 #5
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var lockoutOptionsUsers = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5),
                MaxFailedAccessAttempts = 2
            };

            services.AddDbContext <ApplicationDbContext>(options =>
                                                         options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity <ApplicationUser, IdentityRole>(options =>
            {
                options.Lockout = lockoutOptionsUsers;
                options.Password.RequireDigit           = false;
                options.Password.RequiredLength         = 6;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
                options.Password.RequireLowercase       = false;
            })
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();

            // Add application services.
            services.AddTransient <IEmailSender, EmailSender>();

            services.AddMvc();
        }
예제 #6
0
 public IdentityOptions()
 {
     ClaimsIdentity = new ClaimsIdentityOptions();
     User = new UserOptions();
     Password = new PasswordOptions();
     Lockout = new LockoutOptions();
 }
예제 #7
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddDbContext <ApplicationDbContext>(options =>
                                                         options.UseSqlServer(
                                                             Configuration.GetConnectionString("DefaultConnection")));
            //services.AddDefaultIdentity<IdentityUser>()
            //    .AddEntityFrameworkStores<ApplicationDbContext>();
            var lockoutOption = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(2),
                MaxFailedAccessAttempts = 2
            };

            services.AddIdentity <IdentityUser, IdentityRole>(options => {
                options.Lockout = lockoutOption;
            })
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultUI()
            .AddDefaultTokenProviders();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddTransient <AuthService>();
        }
예제 #8
0
 public IdentityOptions()
 {
     ClaimsIdentity = new ClaimsIdentityOptions();
     User           = new UserOptions();
     Password       = new PasswordOptions();
     Lockout        = new LockoutOptions();
 }
예제 #9
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <ApplicationDbContext>(options =>
                                                         options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromHours(2),
                MaxFailedAccessAttempts = 10
            };

            services.AddIdentity <ApplicationUser, IdentityRole>(options => { options.Lockout = lockoutOptions; })
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();

            services.AddSingleton <IFileProvider>(
                new PhysicalFileProvider(
                    Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")));


            // Add application services.
            services.AddTransient <IEmailSender, EmailSender>();
            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <ISeasonRepository, SeasonRepository>();
            services.AddScoped <IPaperRepository, PaperRepository>();
            services.AddScoped <IPaperVersionRepository, PaperVersionRepository>();
            services.AddScoped <IReviewRepository, ReviewRepository>();
            services.AddScoped <IParticipanciesRepository, ParticipanciesRepository>();

            services.AddMvc();
        }
예제 #10
0
        private static LockoutOptions GetLockoutOptions()
        {
            LockoutOptions lockoutOptions = new LockoutOptions();

            lockoutOptions.DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(30);
            lockoutOptions.MaxFailedAccessAttempts = 10;
            lockoutOptions.AllowedForNewUsers      = true;
            return(lockoutOptions);
        }
예제 #11
0
        public void ConfigureServices(IServiceCollection services)
        {
            var connectionString = Configuration.GetConnectionString("IdServer4ExampleConnection");

            services.AddOptions();
            services.Configure <ApplicationOptions>(Configuration.GetSection("ApplicationOptions"));
            services.AddDbContext <IdServer4ExampleDbContext>(options =>
            {
                options.UseSqlServer(connectionString);
            });
            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromDays(99999),
                MaxFailedAccessAttempts = 5
            };

            services.AddIdentity <ApplicationUser, IdentityRole <Guid> >(option =>
            {
                option.Lockout = lockoutOptions;
                option.User    = new UserOptions {
                    RequireUniqueEmail = true
                };
                option.Password.RequireDigit           = false;
                option.Password.RequiredLength         = 12;
                option.Password.RequiredUniqueChars    = 0;
                option.Password.RequireLowercase       = false;
                option.Password.RequireNonAlphanumeric = false;
                option.Password.RequireUppercase       = false;
            })
            .AddEntityFrameworkStores <IdServer4ExampleDbContext>()
            .AddDefaultTokenProviders();
            var migrationsAssembly = typeof(IdServer4ExampleDbContext).GetTypeInfo().Assembly.GetName().Name;

            services.AddIdentityServer()
            .AddDeveloperSigningCredential()
            .AddConfigurationStore(options =>
            {
                options.ConfigureDbContext = builder =>
                                             builder.UseSqlServer(connectionString,
                                                                  sql => sql.MigrationsAssembly(migrationsAssembly));
            })
            .AddOperationalStore(options =>
            {
                options.ConfigureDbContext = builder =>
                                             builder.UseSqlServer(connectionString,
                                                                  sql => sql.MigrationsAssembly(migrationsAssembly));
                options.EnableTokenCleanup   = true;
                options.TokenCleanupInterval = 30;
            })
            .AddAspNetIdentity <ApplicationUser>()
            .AddProfileService <ProfileService>();

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }
예제 #12
0
        private LockoutOptions GetLockoutOptions()
        {
            var lockoutOptions = new LockoutOptions
            {
                AllowedForNewUsers      = true,
                MaxFailedAccessAttempts = 5,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5)
            };

            return(lockoutOptions);
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromSeconds(30),
                MaxFailedAccessAttempts = 3
            };

            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.Configure <IdentityOptions>(options =>
            {
                options.Password.RequireDigit           = false;
                options.Password.RequiredLength         = 5;
                options.Password.RequireLowercase       = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
                options.Lockout = lockoutOptions;
            });

            services.AddDbContext <LMSContext>(options => {
                options.EnableSensitiveDataLogging();
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection"));
            });
            services.AddDefaultIdentity <User>()
            .AddRoles <Role>()
            .AddDefaultUI(UIFramework.Bootstrap4)
            .AddEntityFrameworkStores <LMSContext>();
            services.AddScoped <IUserService, UserService>();
            services.AddScoped <IBookService, BookService>();
            services.AddScoped <IAuthorService, AuthorService>();
            services.AddScoped <IMembershipService, MembershipService>();
            services.AddScoped <ISubjectCategoryService, SubjectCategoryService>();
            services.AddScoped <IBanService, BanService>();
            services.AddScoped <IHistoryService, HistoryService>();
            services.AddScoped <INotificationService, NotificationService>();
            services.AddScoped <INotificationManager, NotificationManager>();
            services.AddScoped <IReviewService, ReviewService>();
            services.AddScoped <IReservationService, ReservationService>();
            services.AddScoped <IRoleManagerService, RoleManagerService>();
            services.AddScoped <IJsonManager, JsonManager>();
            services.AddScoped <IMapVmToDTO, MapVmToDTO>();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddHostedService <ReturningBooksService>();
            services.AddMvc().AddNToastNotifyToastr();
        }
예제 #14
0
        private void SetLockoutSharedPolicy(LockoutPolicy policy, LockoutOptions shared = null)
        {
            if (shared == null)
            {
                shared = _sharedPolicyAccessor.GetPolicy().Lockout;
            }

            shared.AllowedForNewUsers      = policy.AllowedForNewUsers;
            shared.DefaultLockoutTimeSpan  = policy.DefaultLockoutTimeSpan;
            shared.MaxFailedAccessAttempts = policy.MaxFailedAccessAttempts;

            _sharedPolicyAccessor.SetLockoutPolicy(shared);
        }
예제 #15
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <NeptuneContext>(options => options.UseSqlite("Data Source=neptune.db"));
            services.AddIdentity <User, IdentityRole>()
            .AddEntityFrameworkStores <NeptuneContext>()
            .AddDefaultTokenProviders();

            services.AddMvc();
            //services.AddDistributedMemoryCache();
            //services.AddSession();

            services.AddBootstrapPagerGenerator(options => options.ConfigureDefault());

            services.AddTransient <UserService>();
            services.AddTransient <AlbumService>();
            services.AddTransient <ImageService>();
            services.AddTransient <CategoryService>();
            services.AddTransient <UnitOfWork>();
            services.AddTransient <Seeder>();

            var userOptions = new UserOptions {
                RequireUniqueEmail = true
            };

            var passwordOptions = new PasswordOptions
            {
                RequireDigit           = false,
                RequiredLength         = 1,
                RequireNonAlphanumeric = false,
                RequireUppercase       = false,
                RequireLowercase       = false
            };

            var lockoutOptions = new LockoutOptions
            {
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(1),
                MaxFailedAccessAttempts = 10
            };

            services.Configure <IdentityOptions>(options =>
            {
                options.Password = passwordOptions;
                options.Lockout  = lockoutOptions;
                options.User     = userOptions;
            });
        }
예제 #16
0
        public static void GetIdentityOptions(IdentityOptions options)
        {
            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromDays(1),
                MaxFailedAccessAttempts = MaxFailedAttemptsCount
            };

            options.Password.RequireDigit           = false;
            options.Password.RequireLowercase       = false;
            options.Password.RequireUppercase       = false;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequiredLength         = 8;
            options.SignIn.RequireConfirmedEmail    = true;

            options.Lockout = lockoutOptions;
        }
예제 #17
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)
        {
            services.Configure <WebEncoderOptions>(options => new TextEncoderSettings(UnicodeRanges.All));
            services.AddTransient <IPhotoUploadService, PhotoUploadService>();
            services.AddTransient(typeof(IDataRepository <>), typeof(DataRepository <>));
            services.AddTransient <IDataRepository <Item>, ItemsDataRepository>();
            services.AddTransient <IOrderService, OrderService>();
            services.Configure <PasswordHasherOptions>(options =>
                                                       options.CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV2
                                                       );

            var lockoutOptions = new LockoutOptions
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(15),
                MaxFailedAccessAttempts = 3
            };

            services.AddEntityFrameworkInMemoryDatabase().AddDbContext <UserContext>((serviceProvider, options) => options.UseInMemoryDatabase("Users").UseInternalServiceProvider(serviceProvider));
            services.AddDbContext <IncantoDataContext>(optionsAction =>
                                                       optionsAction.UseSqlServer(Configuration.GetConnectionString("DevelopersConnection")));
            services.AddIdentity <ApplicationUser, IdentityRole>(options =>
            {
                // Lockout settings
                options.Lockout = lockoutOptions;
            })
            .AddEntityFrameworkStores <UserContext>()
            .AddDefaultTokenProviders();

            services.AddMvc();

            services.ConfigureApplicationCookie(options =>
            {
                // Cookie settings
                options.Cookie.HttpOnly   = true;
                options.Cookie.Expiration = TimeSpan.FromDays(60);
                options.LoginPath         = "/admin/login";
                options.LogoutPath        = "/admin/logout";
                options.AccessDeniedPath  = "/admin/AccessDenied";
                options.SlidingExpiration = true;
            });
        }
예제 #18
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var lockout = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5),
                MaxFailedAccessAttempts = 3
            };

            services.AddDbContext <ApplicationDbContext>(options =>
                                                         options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            services.AddDefaultIdentity <User>(options =>
                                               { options.SignIn.RequireConfirmedAccount = true;
                                                 options.Lockout = lockout; })
            .AddRoles <IdentityRole>()
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();
            services.AddTransient <AdministratorSeedData>();
            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddControllersWithViews();
            services.AddRazorPages().AddRazorRuntimeCompilation();
        }
예제 #19
0
 private static void setLockoutOptions(LockoutOptions identityOptionsLockout, SiteSettings siteSettings)
 {
     identityOptionsLockout.AllowedForNewUsers      = siteSettings.LockoutOptions.AllowedForNewUsers;
     identityOptionsLockout.DefaultLockoutTimeSpan  = siteSettings.LockoutOptions.DefaultLockoutTimeSpan;
     identityOptionsLockout.MaxFailedAccessAttempts = siteSettings.LockoutOptions.MaxFailedAccessAttempts;
 }
예제 #20
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var connectionString = Environment.GetEnvironmentVariable("SHOPPING_CART_CONECTION_STRING") ?? Configuration.GetConnectionString("SqlConnection");

            services.AddDbContext <IdentityContext>(options => options.UseSqlServer(connectionString));
            var lockoutOptions = new LockoutOptions
            {
                AllowedForNewUsers      = Convert.ToBoolean(Configuration["Account:UserLockoutEnabledByDefault"]),
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(double.Parse(Configuration["Account:DefaultAccountLockoutTimeSpan"])),
                MaxFailedAccessAttempts = Convert.ToInt32(Configuration["Account:MaxFailedAccessAttemptsBeforeLockout"])
            };

            services.AddIdentity <User, Role>(options =>
            {
                options.Lockout = lockoutOptions;
                options.SignIn.RequireConfirmedEmail = Convert.ToBoolean(Configuration["Account:RequireConfirmedEmail"]);
                options.User.RequireUniqueEmail      = true;
                options.Password.RequiredLength      = Convert.ToInt32(Configuration["Account:PasswordRequiredLength"]);
            }).AddEntityFrameworkStores <IdentityContext>().AddDefaultTokenProviders();

            services.Configure <DataProtectionTokenProviderOptions>(options =>
            {
                options.TokenLifespan = TimeSpan.FromHours(Convert.ToInt32(Configuration["Account:TokenExpirationTimeSpan"]));
            });

            services.AddScoped <IAuthApplicationService, AuthApplicationService>();
            services.AddScoped <IRoleApplicationService, RoleApplicationService>();
            services.AddScoped <IUserApplicationService, UserApplicationService>();

            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <IRoleRepository, RoleRepository>();

            services.AddScoped <IUnitOfWork, UnitOfWork>();

            services.AddTransient <DbInitializer>();

            services.AddAuthorization(cfg =>
            {
                cfg.AddPolicy("Administrator", p => p.RequireClaim(ClaimTypes.Role, Roles.Admin));
                cfg.AddPolicy("Member", p => p.RequireClaim(ClaimTypes.Role, Roles.Member));
            });

            var tokenKey = Environment.GetEnvironmentVariable("JWT_TOKEN_KEY") ?? Configuration["Jwt:Key"];

            services.AddAuthentication(o =>
            {
                o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, cfg =>
            {
                cfg.RequireHttpsMetadata = false;

                cfg.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer      = Environment.GetEnvironmentVariable("JWT_ISSUER") ?? Configuration["Jwt:Issuer"],
                    ValidAudience    = Environment.GetEnvironmentVariable("JWT_AUDIENCE") ?? Configuration["Jwt:Audience"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tokenKey))
                };
            });

            var allowSpecificOriginUrl = Environment.GetEnvironmentVariable("ALLOW_SPECIFIC_ORIGIN_URL") ?? Configuration["AllowSpecificOriginUrl"];

            services.AddCors(options =>
            {
                options.AddPolicy("AllowSpecificOrigin",
                                  builder => builder
                                  .WithOrigins(allowSpecificOriginUrl)
                                  .AllowAnyMethod()
                                  .AllowCredentials()
                                  .AllowAnyHeader());
            });

            services.AddAutoMapper();
            services.AddMvc(options =>
            {
                options.Filters.Add(
                    new ProducesResponseTypeAttribute(typeof(ErrorResponse), 400));
                options.Filters.Add(
                    new ProducesResponseTypeAttribute(typeof(ErrorResponse), 401));
                options.Filters.Add(
                    new ProducesResponseTypeAttribute(typeof(ErrorResponse), 403));
                options.Filters.Add(
                    new ProducesResponseTypeAttribute(typeof(ErrorResponse), 404));
                options.Filters.Add(
                    new ProducesResponseTypeAttribute(typeof(ErrorResponse), 415));
                options.Filters.Add(
                    new ProducesResponseTypeAttribute(typeof(ErrorResponse), 500));


                options.Filters.Add(new CorsAuthorizationFilterFactory("AllowSpecificOrigin"));
            });

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "System API", Version = "v1"
                });
                c.AddSecurityDefinition("Bearer", new ApiKeyScheme()
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = "header",
                    Type        = "apiKey"
                });
                c.AddSecurityRequirement(new Dictionary <string, IEnumerable <string> >
                {
                    { "Bearer", new string[] { } }
                });

                c.CustomSchemaIds(x => x.FullName);
            });
        }
예제 #21
0
        public void ConfigureServices(IServiceCollection services)
        {
            var config = new AutoMapper.MapperConfiguration(
                cfg =>
            {
                cfg.CreateMap <TransactionViewModel, Data.Entities.Transaction>();
                cfg.CreateMap <Data.Entities.Transaction, TransactionViewModel>();

                cfg.CreateMap <LogViewModel, Log>();
                cfg.CreateMap <Log, LogViewModel>();

                cfg.CreateMap <Data.Entities.Transaction, TransactionViewModel>()
                .ForMember(f => f.StatusMessage, o => o.Ignore());
            });

            var mapper = config.CreateMapper();

            services.AddSingleton(mapper);

            services.AddDbContext <ApplicationDbContext>(
                options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5),
                MaxFailedAccessAttempts = 5
            };

            services.AddIdentity <ApplicationUser, IdentityRole>(options => { options.Lockout = lockoutOptions; })
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();
            services.ConfigureApplicationCookie(options =>
            {
                options.SlidingExpiration = true;
            });

            // Add application services.
            services.AddTransient <IEmailSender, EmailSender>(provider => new EmailSender(Configuration));
            services.AddTransient <IRequestProvider, RequestProvider>();

            services.AddScoped <IMerchantRepository, MerchantRepository>();
            services.AddScoped <ITransactionRepository, TransactionRepository>();
            services.AddScoped <ILogRepository, LogRepository>();
            services.AddScoped <ISubscriptionsRepository, SubscriptionsRepository>();

            services.AddScoped <IBitcoinService, BitcoinService>(provider => new BitcoinService(Network.GetNetwork(Configuration.GetValue <string>("BitcoinNetwork"))));

            services.AddScoped <IEthereumService, EthereumService>(provider => new EthereumService(Configuration.GetValue <string>("EthereumNetwork"), Configuration.GetValue <string>("EthereumWords"), Configuration.GetValue <string>("EthereumPassword")));

            services.AddMvc();

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "Safecryptotrades API", Version = "v1"
                });

                var basePath = AppContext.BaseDirectory;
                var xmlPath  = Path.Combine(basePath, "payment.xml");

                c.IncludeXmlComments(xmlPath);
            });
        }
예제 #22
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var conString = Configuration.GetConnectionString("DbConnectionPost");

            if (CurrentEnvironment.IsProduction())
            {
                conString = Environment.GetEnvironmentVariable("TAXI_DB_CONN");
            }

            services.AddDbContext <ApplicationDbContext>(options =>
                                                         options.UseNpgsql(conString,
                                                                           b => {
                b.MigrationsAssembly("Taxi");
                b.UseNetTopologySuite();
                b.EnableRetryOnFailure(20, TimeSpan.FromMinutes(0.5),
                                       errorCodesToAdd: null);
            }));
            //  services.AddScoped<ApplicationDbContext, ApplicationDbContext>();
            services.AddScoped <IDriverLocRepository, DriverLocationRepository>();
            services.AddScoped <IUsersRepository, UsersRepository>();
            services.AddTransient <IJwtFactory, JwtFactory>();
            services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddScoped <ITripsRepository, TripsRepository>();
            services.AddScoped <IUploadService, UploadSevice>();
            services.AddScoped <IGoogleMapsService, GoogleMapsService>();
            services.TryAddSingleton <IActionContextAccessor, ActionContextAccessor>();
            services.AddScoped <IUrlHelper, UrlHelper>(implamantationFactory =>
            {
                var actionContext =
                    implamantationFactory.GetService <IActionContextAccessor>().ActionContext;
                return(new UrlHelper(actionContext));
            });
            services.AddScoped <IResourceUriHelper, ResourceUriHelper>();

            services.AddSignalR();
            var awsopt    = Configuration.GetAWSOptions();
            var keyId     = Environment.GetEnvironmentVariable("AWS_ACCESS_KEY_ID");
            var secretKey = Environment.GetEnvironmentVariable("AWS_SECRET_ACCESS_KEY");

            var creds = new BasicAWSCredentials(keyId, secretKey);

            awsopt.Credentials = creds;
            services.AddDefaultAWSOptions(awsopt);

            services.AddAWSService <IAmazonS3>();

            var keyFromConfig = Configuration["JWT_KEY"];

            if (keyFromConfig == null)
            {
                keyFromConfig = Guid.NewGuid().ToString();
            }
            SymmetricSecurityKey signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(keyFromConfig));

            var jwtOptions = Configuration.GetSection(nameof(JwtIssuerOptions));

            services.Configure <JwtIssuerOptions>(options =>
            {
                options.Issuer   = jwtOptions[nameof(JwtIssuerOptions.Issuer)];
                options.Audience = jwtOptions[nameof(JwtIssuerOptions.Audience)];

                options.SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
            });

            services.Configure <GoogleApiOptions>(opts =>
            {
                opts.ApiKey = Configuration["GOOGLE_API_KEY"];
            });
            services.Configure <BaseUrl>(opts =>
            {
                opts.BaseWebUrl = Configuration["BaseWebUrl"];
            });

            var tokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidIssuer    = jwtOptions[nameof(JwtIssuerOptions.Issuer)],

                ValidateAudience = true,
                ValidAudience    = jwtOptions[nameof(JwtIssuerOptions.Audience)],

                ValidateIssuerSigningKey = true,
                IssuerSigningKey         = signingKey,

                RequireExpirationTime = false,
                ValidateLifetime      = true,
                ClockSkew             = TimeSpan.Zero
            };

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(configureOptions =>
            {
                configureOptions.ClaimsIssuer = jwtOptions[nameof(JwtIssuerOptions.Issuer)];
                configureOptions.TokenValidationParameters = tokenValidationParameters;
                configureOptions.SaveToken = true;

                configureOptions.Events = new JwtBearerEvents
                {
                    OnMessageReceived = context =>
                    {
                        var accessToken = context.Request.Query["access_token"];

                        // If the request is for our hub...
                        var path = context.HttpContext.Request.Path;
                        if (!string.IsNullOrEmpty(accessToken))
                        {
                            // Read the token out of the query string
                            context.Token = accessToken;
                        }
                        return(Task.CompletedTask);
                    }
                };
            });

            // api user claim policy
            services.AddAuthorization(options =>
            {
                options.AddPolicy("Customer", policy => policy.RequireClaim(Constants.Strings.JwtClaimIdentifiers.Rol, Constants.Strings.JwtClaims.CustomerAccess));
                options.AddPolicy("Driver", policy => policy.RequireClaim(Constants.Strings.JwtClaimIdentifiers.Rol, Constants.Strings.JwtClaims.DriverAccess));
                options.AddPolicy("DriverReg", policy => policy.RequireClaim(Constants.Strings.JwtClaimIdentifiers.DriverId));
                options.AddPolicy("Admin", policy => policy.RequireClaim(Constants.Strings.JwtClaimIdentifiers.Rol, Constants.Strings.JwtClaims.AdminAccess));
                options.AddPolicy("Root", policy => policy.RequireClaim(Constants.Strings.JwtClaimIdentifiers.Rol, Constants.Strings.JwtClaims.RootUserAccess));
            });

            services.Configure <EmailSenderOptions>(Configuration.GetSection("email"));

            services.AddTransient <IEmailSender, EmailSender>();


            //identity configuration
            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5),
                MaxFailedAccessAttempts = 5
            };
            var builder = services.AddIdentityCore <AppUser>(o =>
            {
                // configure identity options
                o.Password.RequireDigit           = false;
                o.Password.RequireLowercase       = false;
                o.Password.RequireUppercase       = false;
                o.Password.RequireNonAlphanumeric = false;
                o.Password.RequiredLength         = 6;
                o.Lockout = lockoutOptions;
            });

            builder = new IdentityBuilder(builder.UserType, typeof(IdentityRole), builder.Services);



            builder.AddEntityFrameworkStores <ApplicationDbContext>().AddDefaultTokenProviders();

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "Taxi api", Version = "v1"
                });
                c.AddSecurityDefinition("Bearer",
                                        new ApiKeyScheme
                {
                    In          = "header",
                    Description = "Please enter JWT with Bearer into field",
                    Name        = "Authorization",
                    Type        = "apiKey"
                });
                c.AddSecurityRequirement(new Dictionary <string, IEnumerable <string> >
                {
                    { "Bearer", Enumerable.Empty <string>() }
                });
                c.OperationFilter <FileUploadOperation>();
            });
            services.AddMemoryCache();
            services.AddAutoMapper();
            services.AddCors();
            services.AddMvc();
        }
예제 #23
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.Scan(scan => scan
                          .FromAssembliesOf(typeof(IRequest), typeof(AddUserRequest))
                          .AddClasses()
                          .AsSelf()
                          .WithScopedLifetime());
            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.Configure <DataProtectionTokenProviderOptions>(options =>
            {
                options.TokenLifespan = TimeSpan.FromDays(7);
            });
            services.AddOptions();
            var connectionString = Configuration.GetConnectionString("RecipeTrackerConnection");
            var lockoutOptions   = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromDays(99999),
                MaxFailedAccessAttempts = 5
            };

            services.AddDbContext <RecipeTrackerDbContext>(options =>
            {
                options.UseSqlServer(connectionString);
            });

            services.AddIdentity <ApplicationUser, IdentityRole <Guid> >(option =>
            {
                option.Lockout = lockoutOptions;
                option.User    = new UserOptions {
                    RequireUniqueEmail = true
                };
                option.Password.RequireDigit           = false;
                option.Password.RequiredLength         = 12;
                option.Password.RequiredUniqueChars    = 0;
                option.Password.RequireLowercase       = false;
                option.Password.RequireNonAlphanumeric = false;
                option.Password.RequireUppercase       = false;
            })
            .AddEntityFrameworkStores <RecipeTrackerDbContext>()
            .AddDefaultTokenProviders();

            var provider = services.BuildServiceProvider();

            services.AddMvc(config =>
            {
                config.ModelMetadataDetailsProviders.Add(new RequestInjectionMetadataProvider());
                config.ModelBinderProviders.Insert(0, new QueryModelBinderProvider(provider));
                config.Filters.Add(new ValidationFilter());
                config.Filters.Add(new AuthorizeFilter());
            })
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.Converters.Add(new RequestInjectionHandler <IRequest>(provider));
                options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                options.SerializerSettings.DateTimeZoneHandling  = Newtonsoft.Json.DateTimeZoneHandling.Local;
                options.SerializerSettings.DateFormatString      = "MM/dd/yy HH:mm";
            })
            .AddFluentValidation(c =>
            {
                c.RegisterValidatorsFromAssemblyContaining <AddUserRequest>();
                c.RegisterValidatorsFromAssemblyContaining <ApplicationUserValidator>();
            });
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "Recipe Tracker API", Version = "v1"
                });
            });
            var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

            services.AddIdentityServer()
            .AddDeveloperSigningCredential()
            .AddConfigurationStore(options =>
            {
                options.ConfigureDbContext = builder =>
                                             builder.UseSqlServer(connectionString,
                                                                  sql => sql.MigrationsAssembly(migrationsAssembly));
            })
            .AddOperationalStore(options =>
            {
                options.ConfigureDbContext = builder =>
                                             builder.UseSqlServer(connectionString,
                                                                  sql => sql.MigrationsAssembly(migrationsAssembly));
                options.EnableTokenCleanup   = true;
                options.TokenCleanupInterval = 30;
            })
            .AddAspNetIdentity <ApplicationUser>()
            .AddProfileService <ProfileService>();
        }
예제 #24
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // services.AddDbContext<DataContext>(x => x.UseMySql(Configuration
            //     .GetConnectionString("DefaultConnection")));

            services.AddDbContext <DataContext>(x => x.UseMySql(Configuration
                                                                .GetConnectionString("DefaultConnection"),
                                                                new MySqlServerVersion(new Version(8, 0, 21)),
                                                                mySqlOptions => mySqlOptions
                                                                .CharSetBehavior(CharSetBehavior.NeverAppend)));

            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(10),
                MaxFailedAccessAttempts = 5
            };

            // for role and identity authentication
            // initial creation of user in the user table in database
            IdentityBuilder builder = services.AddIdentityCore <User>(opt =>
            {
                // password requirements
                opt.Lockout = lockoutOptions;
                opt.Password.RequireDigit           = true;
                opt.Password.RequiredLength         = 8;
                opt.Password.RequireNonAlphanumeric = false;
                opt.Password.RequireUppercase       = true;
            });

            builder = new IdentityBuilder(builder.UserType, typeof(Role), builder.Services);
            builder.AddEntityFrameworkStores <DataContext>();
            builder.AddRoleValidator <RoleValidator <Role> >();
            builder.AddRoleManager <RoleManager <Role> >();
            builder.AddSignInManager <SignInManager <User> >();


            // allows api to use authentication
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.ASCII
                                                                        .GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
                    ValidateIssuer   = false,
                    ValidateAudience = false
                };
            });


            // authorisation policy
            services.AddAuthorization(options =>
            {
                options.AddPolicy("AdminAccess", policy => policy.RequireRole("Admin"));
                options.AddPolicy("everyone", policy => policy.RequireRole("Admin", "standard"));
            });

            services.AddControllers(options =>
            {
                var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .Build();

                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .AddNewtonsoftJson(opt =>
            {
                opt.SerializerSettings.ReferenceLoopHandling =
                    Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            });

            services.AddScoped <ITaskScheduleRepository, TaskScheduleRepository>();
            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <INotesRepository, NotesRepository>();
            services.AddScoped <IAttachmentFileRepository, AttachmentFileRepository>();
            services.AddScoped <ICustomerRepository, CustomerRepository>();
            services.AddScoped <IReportRepository, ReportRepository>();
            services.AddControllers();
            services.AddCors();



            //allows use of tokens


            // Auto Mapper Configurations
            var mappingConfig = new MapperConfiguration(mc =>
            {
                mc.AddProfile(new AutoMapperProfiles());
            });
            IMapper mapper = mappingConfig.CreateMapper();

            services.AddSingleton(mapper);
        }
예제 #25
0
        // 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.AddEntityFrameworkMySql();

            services.AddDbContext <MyContext>(options =>
                                              options.UseMySql(Configuration.GetConnectionString("MyConnection")));

            var connectionString = new ConnectionString(Configuration.GetConnectionString("MyConnection"));

            services.AddSingleton(connectionString);
            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5),
                MaxFailedAccessAttempts = 3
            };

            services.AddSession(options =>
            {
                // Set a short timeout for easy testing.
                options.IdleTimeout     = TimeSpan.FromMinutes(5);
                options.Cookie.HttpOnly = true;
                // Make the session cookie essential
                options.Cookie.IsEssential = true;
                options.Cookie.SameSite    = SameSiteMode.Lax;
            });
            services.AddIdentity <Employee, Role>(options =>
            {
                options.Lockout.AllowedForNewUsers      = true;
                options.Lockout.DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(5);
                options.Lockout.MaxFailedAccessAttempts = 3;
            })
            .AddEntityFrameworkStores <MyContext>()
            .AddDefaultTokenProviders();



            services.AddSession(options =>
            {
                // Set a short timeout for easy testing.
                options.IdleTimeout     = TimeSpan.FromMinutes(5);
                options.Cookie.HttpOnly = false;
                // Make the session cookie essential
                options.Cookie.IsEssential = true;
            });

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata      = false;
                options.SaveToken                 = true;
                options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
                {
                    ValidateIssuer   = true,
                    ValidateAudience = false,
                    ValidAudience    = Configuration["Jwt:Audience"],
                    ValidIssuer      = Configuration["Jwt:Issuer"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
                };
            });
            services.AddAuthorization(options =>
            {
                options.AddPolicy(
                    "Role",
                    policyBuilder => policyBuilder.AddRequirements(
                        new AccessControl("Admin")));
            });


            services.Configure <IISOptions>(options =>
            {
                options.AutomaticAuthentication = false;
            });
            services.ConfigureApplicationCookie(options => options.LoginPath = "/Users/Login");

            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <IUserService, UserService>();
            services.AddScoped <IRoleRepository, RoleRepository>();
            services.AddScoped <IRoleService, RoleService>();
            services.AddScoped <ApplicationRepository>();
            services.AddScoped <ApplicationUserRepository>();
            services.AddScoped <BatchRepository>();
            services.AddScoped <BootcampRepository>();
            services.AddScoped <DegreeRepository>();
            services.AddScoped <DepartmentRepository>();
            services.AddScoped <DivisionRepository>();
            services.AddScoped <JobTitleRepository>();
            services.AddScoped <MajorRepository>();
            services.AddScoped <ProvinceRepository>();
            services.AddScoped <RegencyRepository>();
            services.AddScoped <ReligionRepository>();
            services.AddSingleton <IAuthorizationHandler, IsAdminHandler>();
        }
예제 #26
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)
        {
            services.Configure <TwoFactorOptions>(Configuration.GetSection("TwoFactorOptions"));
            services.AddDbContext <AppIdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultAzureConnectionString")));

            //services.AddDbContext<AppIdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnectionString")));

            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromSeconds(30),
                MaxFailedAccessAttempts = 3
            };

            services.AddAuthentication().AddFacebook(options =>
            {
                options.AppId     = Configuration["Authentication:Facebook:AppId"];
                options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
            }).AddGoogle(options =>
            {
                options.ClientId     = Configuration["Authentication:Google:ClientID"];
                options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
            });

            //.AddMicrosoftAccount(opts =>
            // {
            //     opts.ClientId = Configuration["Authentication:Microsoft:ClientID"];
            //     opts.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
            // })

            //services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            //  .AddAzureAD(options => Configuration.Bind("AzureAd", options));

            //services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            //{
            //    options.Authority = options.Authority + "/v2.0/";

            //    options.TokenValidationParameters.ValidateIssuer = false;
            //});

            services.AddIdentity <AppUser, AppRole>(options =>
            {
                options.Lockout = lockoutOptions;

                options.User.RequireUniqueEmail        = true;
                options.User.AllowedUserNameCharacters = "abcçdefgğhıijklmnoöpqrsştuüvwxyzABCÇDEFGHIİJKLMNOÖPQRSŞTUÜVWXYZ0123456789-._";

                // Password validation
                options.Password.RequiredLength         = 4;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireDigit           = true; // number between 0-9
                options.Password.RequireLowercase       = false;
                options.Password.RequireUppercase       = false;
            })
            .AddUserValidator <CustomValidation.CustomUserValidator>()
            .AddPasswordValidator <CustomValidation.CustomPasswordValidator>()
            .AddErrorDescriber <CustomValidation.CustomIdentityErrorDescriber>()
            .AddEntityFrameworkStores <AppIdentityDbContext>()

            .AddDefaultTokenProviders();

            CookieBuilder cookieBuilder = new CookieBuilder();

            cookieBuilder.Name         = "MyBlog";
            cookieBuilder.HttpOnly     = false;
            cookieBuilder.SameSite     = SameSiteMode.Lax;
            cookieBuilder.SecurePolicy = CookieSecurePolicy.SameAsRequest;

            services.ConfigureApplicationCookie(options =>
            {
                options.LoginPath         = new PathString("/Home/Login");
                options.LogoutPath        = new PathString("/Member/LogOut");
                options.Cookie            = cookieBuilder;
                options.ExpireTimeSpan    = System.TimeSpan.FromDays(60);
                options.SlidingExpiration = true;
            });

            services.AddMvc(option => option.EnableEndpointRouting = false);
        }
예제 #27
0
        public void ConfigureServices(IServiceCollection services)
        {
            var connectionString = Configuration.GetConnectionString("IdServer4ExampleConnection");

            services.AddDbContext <IdServer4ExampleDbContext>(options =>
            {
                options.UseSqlServer(connectionString);
            });
            services.AddDistributedMemoryCache();

            var lockoutOptions = new LockoutOptions()
            {
                AllowedForNewUsers      = true,
                DefaultLockoutTimeSpan  = TimeSpan.FromDays(99999),
                MaxFailedAccessAttempts = 5
            };

            services.AddIdentity <ApplicationUser, IdentityRole <Guid> >(option =>
            {
                option.Lockout = lockoutOptions;
                option.User    = new UserOptions {
                    RequireUniqueEmail = true
                };
                option.Password.RequireDigit           = false;
                option.Password.RequiredLength         = 12;
                option.Password.RequiredUniqueChars    = 0;
                option.Password.RequireLowercase       = false;
                option.Password.RequireNonAlphanumeric = false;
                option.Password.RequireUppercase       = false;
            })
            .AddEntityFrameworkStores <IdServer4ExampleDbContext>()
            .AddDefaultTokenProviders();

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddCors(options =>
            {
                options.AddPolicy("corspolicy", policy =>
                {
                    policy.WithOrigins("https://localhost:44322")
                    .AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials();
                });
            });

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority            = "https://localhost:44386";
                options.RequireHttpsMetadata = false;
                options.ApiName = "exampleapi";
            });

            services.AddMvc(options => options.Filters.Add(new RequireHttpsAttribute()));

            services.AddAuthorization(c =>
            {
                c.AddPolicy("exampleapi", p => p.RequireClaim("scope", "exampleapi"));
            });
        }
예제 #28
0
        public static IServiceCollection AddCustomIdentity(
            this IServiceCollection services,
            PasswordOptions passwordPolicies,
            LockoutPolicies lockoutPolicies,
            SignInOptions signinPolicies)
        {
            services
            .AddIdentity <AppUser, AppRole>()
            .AddDefaultTokenProviders();

            services.Configure <IdentityOptions>(opts =>
            {
                // Password settings.
                PasswordOptions passwordOpts        = opts.Password;
                passwordOpts.RequireDigit           = passwordPolicies.RequireDigit;
                passwordOpts.RequiredLength         = passwordPolicies.RequiredLength;
                passwordOpts.RequiredUniqueChars    = passwordPolicies.RequiredUniqueChars;
                passwordOpts.RequireNonAlphanumeric = passwordPolicies.RequireNonAlphanumeric;
                passwordOpts.RequireLowercase       = passwordPolicies.RequireLowercase;
                passwordOpts.RequireUppercase       = passwordPolicies.RequireUppercase;

                // Lockout settings.
                LockoutOptions lockoutOpts          = opts.Lockout;
                lockoutOpts.AllowedForNewUsers      = lockoutPolicies.AllowedForNewUsers;
                lockoutOpts.MaxFailedAccessAttempts = lockoutPolicies.MaxFailedAccessAttempts;
                lockoutOpts.DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(lockoutPolicies.DefaultLockoutInMinutes);

                // User settings.
                //options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@";
                opts.User.RequireUniqueEmail = true;

                // SignIn settings.
                SignInOptions signinOpts               = opts.SignIn;
                signinOpts.RequireConfirmedEmail       = signinPolicies.RequireConfirmedEmail;
                signinOpts.RequireConfirmedPhoneNumber = signinPolicies.RequireConfirmedPhoneNumber;
            });

            //services.ConfigureApplicationCookie(options =>
            //{
            //    // Cookie settings.
            //    // options.LoginPath = string.Empty;
            //    // options.LogoutPath = string.Empty;
            //    // options.AccessDeniedPath = string.Empty;
            //    options.Events = new CookieAuthenticationEvents
            //    {
            //        OnRedirectToLogin = ctx =>
            //        {
            //            if (ctx.Request.Path.StartsWithSegments("/api") &&
            //                ctx.Response.StatusCode == (int)HttpStatusCode.OK)
            //            {
            //                ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            //            }
            //            else
            //            {
            //                ctx.Response.Redirect(ctx.RedirectUri);
            //            }

            //            return Task.CompletedTask;
            //        }
            //    };
            //});

            return(services);
        }
예제 #29
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <ApplicationContext>(ServiceLifetime.Scoped);
            services.AddScoped <IDbContext>(_ => new ApplicationContext(Configuration));
            services.AddTransient <DbInitializer>();
            services.AddTransient <IdentityInitializer>();

            var lockoutOptions = new LockoutOptions
            {
                AllowedForNewUsers      = Convert.ToBoolean(Configuration["Account:UserLockoutEnabledByDefault"]),
                DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(Double.Parse(Configuration["Account:DefaultAccountLockoutTimeSpan"])),
                MaxFailedAccessAttempts = Convert.ToInt32(Configuration["Account:MaxFailedAccessAttemptsBeforeLockout"])
            };

            services.AddIdentity <User, Role>(options =>
            {
                options.Lockout = lockoutOptions;
            }).AddEntityFrameworkStores <ApplicationContext>()
            .AddDefaultTokenProviders();

            services.Configure <DataProtectionTokenProviderOptions>(options =>
            {
                options.TokenLifespan = TimeSpan.FromHours(Convert.ToInt32(Configuration["Account:TokenExpirationTimeSpan"]));
            });

            services.AddScoped <IUserRepository>(_ => new UserRepository(_.GetService <IUnitOfWork>()));
            services.AddScoped <IRoleRepository>(_ => new RoleRepository(_.GetService <IUnitOfWork>()));
            services.AddScoped <IUnitOfWork>(_ => new UnitOfWork(_.GetService <IDbContext>()));

            services.AddAuthorization(cfg =>
            {
                cfg.AddPolicy("Administrator", p => p.RequireClaim(ClaimTypes.Role, "Admin"));
            });

            services.AddAuthentication().AddJwtBearer(cfg =>
            {
                cfg.RequireHttpsMetadata = false;
                cfg.SaveToken            = true;

                cfg.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer      = Configuration["Tokens:Issuer"],
                    ValidAudience    = Configuration["Tokens:Issuer"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"]))
                };
            });

            services.ConfigureApplicationCookie(options =>
            {
                options.Events.OnRedirectToLogin = (ctx) =>
                {
                    if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
                    {
                        ctx.Response.StatusCode = 401;
                    }

                    return(Task.CompletedTask);
                };

                options.Events.OnRedirectToAccessDenied = (ctx) =>
                {
                    if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
                    {
                        ctx.Response.StatusCode = 403;
                    }

                    return(Task.CompletedTask);
                };
            });

            services.AddMvc(options =>
            {
                options.Filters.Add(typeof(ValidateModelAttribute));
            });

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "System API", Version = "v1"
                });
                c.AddSecurityDefinition("Bearer",
                                        new ApiKeyScheme
                {
                    In          = "header",
                    Description = "Please insert JWT with Bearer into field",
                    Name        = "Authorization",
                    Type        = "bearer"
                });
            });

            services.AddAutoMapper();

            services.AddScoped <IEmailSender>(_ => new AuthMessageSender(Configuration["EmailSettings:FromAddress"],
                                                                         Configuration["EmailSettings:Password"],
                                                                         Configuration["EmailSettings:EmailServer"]));
        }