I want to implement JVT security in ASP.Net Core. For now, all I want to do is read the carrier tokens in the Authorization header and check them against my criteria. I do not need (and do not want) to include ASP.Net Identity. In fact, I try to avoid using as many things as possible that MVC adds as much as possible if they really don't need me.
I created a minimal project that demonstrates the problem. To see the source code, just view the change history. I expected this pattern to reject all requests for / api / icons if they do not contain an HTTP Authorization header with an appropriate carrier token. The sample actually resolves all requests .
Startup.cs
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Configuration; using Microsoft.AspNetCore.Routing; using Microsoft.IdentityModel.Tokens; using System.Text; using System; using Newtonsoft.Json.Serialization; namespace JWTSecurity { public class Startup { public IConfigurationRoot Configuration { get; set; } public Startup(IHostingEnvironment env) { IConfigurationBuilder builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath); Configuration = builder.Build(); } public void ConfigureServices(IServiceCollection services) { services.AddOptions(); services.AddAuthentication(); services.AddMvcCore().AddJsonFormatters(options => options.ContractResolver = new CamelCasePropertyNamesContractResolver()); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); app.UseJwtBearerAuthentication(new JwtBearerOptions { AutomaticAuthenticate = true, AutomaticChallenge = true, TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("supersecretkey")), ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, ClockSkew = TimeSpan.Zero } }); app.UseMvc(routes => routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}")); } } }
Controllers / IconsController.cs
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace JWTSecurity.Controllers { [Route("api/[controller]")] public class IconsController : Controller { [Authorize] public IActionResult Get() { return Ok("Some content"); } } }
source share