// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { //Inject AppSettings services.Configure <ApplicationSettings>(Configuration.GetSection("ApplicationSettings")); services.AddControllers(); services.AddDbContext <StoreContext>(options => options.UseSqlServer(Configuration.GetConnectionString("IdentityConnection"))); services.AddCors(); // Add Repository services.AddScoped <AddressRepository>(); services.AddScoped <ApplicationUserRepository>(); services.AddScoped <OrderProductRepository>(); services.AddScoped <OrderRepository>(); services.AddScoped <ProductRepository>(); //Jwt Authentication var key = Encoding.UTF8.GetBytes(Configuration["ApplicationSettings:JWT_Secret"].ToString()); services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(x => { x.RequireHttpsMetadata = false; x.SaveToken = false; x.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false, ClockSkew = TimeSpan.Zero }; }); services.AddAuthorization(config => { config.AddPolicy(Policies.Admin, Policies.AdminPolicy()); config.AddPolicy(Policies.Employee, Policies.EmployeePolicy()); config.AddPolicy(Policies.Customer, Policies.CustomerPolicy()); }); // This service fixes an error i get when i try to include in entity framework. MESSAGE ERROR: System.Text.Json.JsonException: A possible object cycle was detected which is not supported. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 32. at System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerCycleDetected(Int32 maxDepth) at System.Text.Json.JsonSerializer.Write(Utf8JsonWriter writer, Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions options, WriteStack& state) services.AddControllers().AddNewtonsoftJson(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore ); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext <QOContext>(opts => opts.UseSqlServer(Configuration["ConnectionStrings:DevelopmentDBLocal"])); services.AddSignalR(); services.Configure <OktaSettings>(Configuration.GetSection("Okta")); services.AddSingleton <ITokenService, OktaTokenService>(); services.AddMvc(); //services.AddIdentity<IdentityUser, IdentityRole>(options => //{ // options.Password.RequireDigit = true; // options.Password.RequireLowercase = true; // options.Password.RequiredLength = 5; //}).AddEntityFrameworkStores<QOContext>() // .AddDefaultTokenProviders(); 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 = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"])), ClockSkew = TimeSpan.Zero }; }); services.AddAuthorization(config => { //config.AddPolicy("AdmindAndEmployees", policy => policy.RequireRole("Admin","Employee")); config.AddPolicy(Policies.Admin, Policies.AdminPolicy()); config.AddPolicy(Policies.User, Policies.UserPolicy()); config.AddPolicy(Policies.Employee, Policies.EmployeePolicy()); config.AddPolicy(Policies.UserAndEmployees, Policies.UserAndEmployeesPolicy()); config.AddPolicy(Policies.StoreControl, Policies.StoreControlPolicy()); }); services.AddControllers(); }