// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext <TNDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TNDatabase"))); services .AddIdentity <AppUser, AppRole>() .AddEntityFrameworkStores <TNDbContext>() .AddDefaultTokenProviders(); //Declare DI services.AddTransient <UserManager <AppUser>, UserManager <AppUser> >(); services.AddTransient <SignInManager <AppUser>, SignInManager <AppUser> >(); services.AddTransient <RoleManager <AppRole>, RoleManager <AppRole> >(); services.AddTransient <ICategoryService, CategoryService>(); services.AddTransient <IExamAdminService, ExamAdminService>(); services.AddTransient <IExamUserService, ExamUserService>(); services.AddTransient <IFavoriteExamService, FavoriteExamService>(); services.AddTransient <IQuestionService, QuestionService>(); services.AddTransient <IUserService, UserService>(); services.AddTransient <IFacebookAuth, FacebookAuthService>(); services.AddTransient <IEmailSender, EmailSender>(i => new EmailSender( Configuration["EmailSender:Host"], Configuration.GetValue <int>("EmailSender:Port"), Configuration.GetValue <bool>("EmailSender:EnableSSL"), Configuration["EmailSender:UserName"], Configuration["EmailSender:Password"] )); services.Configure <IdentityOptions>(options => { options.Password.RequireDigit = true; options.Password.RequireLowercase = false; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequiredLength = 8; options.Password.RequiredUniqueChars = 0; }); services.AddAuthentication(opt => { opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; opt.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ClockSkew = TimeSpan.FromSeconds(5), ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Tokens:Issuer"], ValidAudience = Configuration["Tokens:Issuer"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:SecretKey"])) }; }); //add login with fb var fbAuthSettings = new FBAuthSettings(); Configuration.Bind(nameof(FBAuthSettings), fbAuthSettings); services.AddSingleton(fbAuthSettings); services.AddHttpClient(); services.AddAuthorization(options => { options.AddPolicy("admin", authBuilder => { authBuilder.RequireRole("admin"); }); options.AddPolicy("user", authBuilder => { authBuilder.RequireRole("user"); }); }); services.AddControllersWithViews().AddNewtonsoftJson( options => { options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; } ); services.AddCors(options => { options.AddDefaultPolicy(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); }); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Swagger", Version = "v1" }); }); }
public FacebookAuthService(IHttpClientFactory httpClientFactory, FBAuthSettings facebookAuthSettings) { _httpClientFactory = httpClientFactory; _fbAuthSettings = facebookAuthSettings; }