Атрибут ASP.NET Core Authorize не работает с JWTC#

Место общения программистов C#
Ответить
Anonymous
 Атрибут ASP.NET Core Authorize не работает с JWT

Сообщение Anonymous »

Я хочу реализовать безопасность на основе JWT в ASP.Net Core. На данный момент все, что мне нужно, — это прочитать токены-носители в заголовке Authorization и проверить их на соответствие моим критериям. Мне не нужно (и я не хочу) включать ASP.Net Identity. На самом деле, я стараюсь избегать использования как можно большего количества вещей, которые добавляет MVC, если они мне действительно не нужны.

Я создал минимальный проект, что демонстрирует проблему. Чтобы увидеть исходный код, просто просмотрите историю изменений. Я ожидал, что этот образец отклонит все запросы к /api/icons, если они не предоставят HTTP-заголовок Authorization с соответствующим токеном носителя. Образец фактически разрешает все запросы.

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?}"));
}
}
}


Контроллеры/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");
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/406 ... g-with-jwt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»