public BCryptPasswordHasher(CryptologySettings settings) { _workFactor = CalculateIdealWorkFactor(settings.MinimumHashingMilliseconds); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "etimo-id", Version = "v1" }); }); services.UseEtimoIdData(); var siteSettings = new SiteSettings(); Configuration.GetSection("SiteSettings").Bind(siteSettings); services.AddSingleton(siteSettings); var cryptologySettings = new CryptologySettings(); Configuration.GetSection("CryptologySettings").Bind(cryptologySettings); services.AddSingleton(cryptologySettings); services.AddSingleton(cryptologySettings.PasswordSettings); var oauth2Settings = new OAuth2Settings(); Configuration.GetSection("OAuth2Settings").Bind(oauth2Settings); services.AddSingleton(oauth2Settings); var jwtSettings = new JwtSettings(); Configuration.GetSection("JwtSettings").Bind(jwtSettings); services.AddSingleton(jwtSettings); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = jwtSettings.Issuer, ValidAudience = jwtSettings.Issuer, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Secret)), ClockSkew = TimeSpan.Zero }; }); services.AddAuthorization(config => { AddScopePolicies(config, InbuiltScopes.All); AddCombinedScopePolicies(config, new Dictionary <string, string[]> { { CombinedScopes.ReadApplicationRole, new string[] { ApplicationScopes.Read, RoleScopes.Read } }, { CombinedScopes.ReadRoleScope, new string[] { RoleScopes.Read, ScopeScopes.Read } }, { CombinedScopes.ReadUserApplication, new string[] { UserScopes.Read, ApplicationScopes.Read } }, { CombinedScopes.ReadUserRole, new string[] { UserScopes.Read, RoleScopes.Read } } }); }); Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .WriteTo.Console() .CreateLogger(); services.AddSingleton(Log.Logger); var passwordHasher = new BCryptPasswordHasher(cryptologySettings); services.AddSingleton <IPasswordHasher>(passwordHasher); services.AddTransient <IPasswordGenerator, PasswordGeneratorAdapter>(); // ApplicationServices services.AddTransient <IAddApplicationService, AddApplicationService>(); services.AddTransient <IAuthenticateClientService, AuthenticateClientService>(); services.AddTransient <IDeleteApplicationService, DeleteApplicationService>(); services.AddTransient <IFindApplicationService, FindApplicationService>(); services.AddTransient <IGenerateClientSecretService, GenerateClientSecretService>(); services.AddTransient <IGetApplicationsService, GetApplicationsService>(); services.AddTransient <IUpdateApplicationService, UpdateApplicationService>(); // AuditLogServices services.AddTransient <IFindAuditLogService, FindAuditLogService>(); services.AddTransient <IGetAuditLogsService, GetAuditLogsService>(); // AuthorizationServices services.AddTransient <IValidateTokenService, ValidateTokenService>(); services.AddTransient <IAuthorizeService, AuthorizeService>(); services.AddTransient <IGenerateTokenService, GenerateTokenService>(); // RoleServices services.AddTransient <IAddRoleScopeRelationService, AddRoleScopeRelationService>(); services.AddTransient <IAddRoleService, AddRoleService>(); services.AddTransient <IDeleteRoleScopeRelationService, DeleteRoleScopeRelationService>(); services.AddTransient <IDeleteRoleService, DeleteRoleService>(); services.AddTransient <IFindRoleService, FindRoleService>(); services.AddTransient <IGetRolesService, GetRolesService>(); services.AddTransient <IUpdateRoleService, UpdateRoleService>(); // ScopeServices services.AddTransient <IAddScopeService, AddScopeService>(); services.AddTransient <IDeleteScopeService, DeleteScopeService>(); services.AddTransient <IFindScopeService, FindScopeService>(); services.AddTransient <IGetScopesService, GetScopesService>(); services.AddTransient <IUpdateScopeService, UpdateScopeService>(); // UserServices services.AddTransient <IAddUserRoleRelationService, AddUserRoleRelationService>(); services.AddTransient <IAddUserService, AddUserService>(); services.AddTransient <IAuthenticateUserService, AuthenticateUserService>(); services.AddTransient <IDeleteUserRoleRelationService, DeleteUserRoleRelationService>(); services.AddTransient <IDeleteUserService, DeleteUserService>(); services.AddTransient <IFindUserService, FindUserService>(); services.AddTransient <IGetUsersService, GetUsersService>(); services.AddTransient <IUpdateUserService, UpdateUserService>(); // Token Generators services.AddTransient <IAuthorizationCodeTokenGenerator, AuthorizationCodeTokenGenerator>(); services.AddTransient <IClientCredentialsTokenGenerator, ClientCredentialsTokenGenerator>(); services.AddTransient <IResourceOwnerCredentialsTokenGenerator, ResourceOwnerCredentialsTokenGenerator>(); services.AddTransient <IRefreshTokenGenerator, RefreshTokenGenerator>(); services.AddTransient <IJwtTokenFactory, JwtTokenFactory>(); // Repositories services.AddTransient <IApplicationRepository, ApplicationRepository>(); services.AddTransient <IAccessTokenRepository, AccessTokenRepository>(); services.AddTransient <IAuditLogRepository, AuditLogRepository>(); services.AddTransient <IAuthorizationCodeRepository, AuthorizationCodeRepository>(); services.AddTransient <IRefreshTokenRepository, RefreshTokenRepository>(); services.AddTransient <IRoleRepository, RoleRepository>(); services.AddTransient <IScopeRepository, ScopeRepository>(); services.AddTransient <IUserRepository, UserRepository>(); services.AddDistributedMemoryCache(); services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = SnakeCaseNamingPolicy.Instance; options.JsonSerializerOptions.IgnoreNullValues = true; }) .AddRazorRuntimeCompilation(); }