// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); #region ¶ÁÈ¡ÅäÖà JWTConfig config = new JWTConfig(); Configuration.GetSection("JWT").Bind(config); #endregion #region ÆôÓÃJWTÈÏÖ¤ services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }). AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = config.Issuer, ValidAudience = config.Audience, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(config.IssuerSigningKey)), ClockSkew = TimeSpan.FromMinutes(1) }; }); #endregion services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { #region 读取配置 JWTConfig config = new JWTConfig(); Configuration.GetSection("JWT").Bind(config); #endregion #region 启用JWT认证 services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }). AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = config.Issuer, ValidAudience = config.Audience, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(config.IssuerSigningKey)), //ClockSkew = TimeSpan.FromMinutes(5) }; //通过TokenValidationParameters的构造方法查看参数的默认值如下: //public TokenValidationParameters() //{ // RequireExpirationTime = true; // RequireSignedTokens = true; // SaveSigninToken = false; // ValidateActor = false; // ValidateAudience = true; // ValidateIssuer = true; // ValidateIssuerSigningKey = false; // ValidateLifetime = true; // ValidateTokenReplay = false; //} //DefaultClockSkew = TimeSpan.FromSeconds(300); //即ClockSkew的默认值为5分钟 }); #endregion #region 基于声明授权 services.AddAuthorization(options => options.AddPolicy("TestPolicy", policy => { policy.RequireClaim(ClaimTypes.Name, "张三"); policy.RequireClaim(ClaimTypes.NameIdentifier, "001"); })); #endregion #region 自定义授权 services.AddAuthorization(options => options.AddPolicy("Permission", policy => policy.Requirements.Add(new PermissionRequirement()))); services.AddSingleton <IAuthorizationHandler, PermissionHandler>(); #endregion services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }