// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddScoped <AuthService>(); services.AddScoped <HashService>(); if (Configuration.GetValue <bool>("UseInMemoryDatabase")) { services.AddDbContext <AuthContext>(options => { options.UseInMemoryDatabase("AuthDb"); }); } else { services.AddDbContext <AuthContext>(options => { options.UseSqlServer(Configuration.GetConnectionString("ConnectionString") + Configuration.GetConnectionString("AuthDbConnection")); }); } services.AddScoped <AuthContext>(); services.AddScoped <AuthRepository>(); services.AddMediatR(typeof(Startup)); services.AddRabbitMq(); services.AddTransient <UserCreatedEventHandler>(); services.AddTransient <UserUpdatedEventHandler>(); services.AddTransient <UserDeletedEventHandler>(); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { var key = KeyService.BuildRsaSigningKey(xmlKey); options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Issuer"], IssuerSigningKey = key }; }); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Auth MicroService", Version = "v1" }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = @"JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] {Token}. Example: 'Bearer 12345abcdef'", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, Scheme = "Bearer" }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }, Scheme = "oauth2", Name = "Bearer", In = ParameterLocation.Header }, new List <string>() } }); }); }