#region JWT 认证 services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) //.AddCustomAuth(o => { }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = Configuration["JwtSetting:Issuer"], ValidAudience = Configuration["JwtSetting:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtSetting:SecurityKey"])), // 默认允许 300s 的时间偏移量,设置为0 ClockSkew = TimeSpan.Zero }; }); #endregion
#region MVC修改控制器描述 services.AddHttpContextAccessor(); services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>()); services.AddMvc(config => { config.RespectBrowserAcceptHeader = true; //注入MVC拦截器 config.Filters.Add<ApiFilter>(); }) .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new ContractResolver()) .AddJsonOptions(options => options.SerializerSettings.Converters.Add(new ChinaDateTimeConverter())) .AddFormatterMappings(options => options.SetMediaTypeMappingForFormat("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) .AddFormatterMappings(options => options.SetMediaTypeMappingForFormat("jpeg", "image/jpeg")) .AddFormatterMappings(options => options.SetMediaTypeMappingForFormat("jpg", "image/jpeg")); #endregion
在ConfigureServices中 注册JWT必须在注册MVC之前 否则就会报No authenticationScheme was specified, and there was no DefaultChallengeScheme found错误
app.UseAuthentication();
app.UseMvc();
在Configure中 添加JWT验证也必须在MVC之前,否则也会报错。