User.Claims пуст в приложении MVC - PullRequest
8 голосов
/ 17 октября 2019

Я работаю над обновлением моего приложения .NET Core 2.2 MVC до версии 3.0. В этом приложении я аутентифицируюсь на контроллере с помощью токена JWT. Маркер содержит несколько утверждений, но когда я пытаюсь получить к ним доступ через User.Claims, результирующий список всегда пуст.

В моем Startup.cs у меня настроена аутентификация следующим образом:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Code removed for clarity //

        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer = JwtManager.Issuer,
                    ValidAudience = "MyAudience",
                    IssuerSigningKey = "MySigningKey"
                };
            });
    }
}

В Core 2.2 я смог получить доступ к своим заявкам, используя код, подобный следующему:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class MyController : Controller
{
    [HttpGet("MyController/Action")]
    public ActionResult<Aggregate[]> GetAction()
    {
        var username = User.FindFirstValue("MyUsernameClaim");
        if (username == null)
        {
            return Forbid();
        }       
        // Do Stuff //
    }
}

Однако, когда я переносил тот же код в Core 3.0, я аутентифицировался должным образом, но не получал претензий кUser объект. enter image description here

Я пропустил шаг в преобразовании этого в 3.0? Разве User автоматически не заполняется информацией или чем-то еще?

1 Ответ

2 голосов
/ 17 октября 2019

Кажется, что пользователь вообще не аутентифицирован.

В asp.net core 3.0 маршрутизация изменилась на маршрутизацию в конечной точке. Вы можете отказаться, установив EnableEndpointRouting = false.

Но здесь это не так. Это означает, что вам придется включать определенные службы при их использовании, такие как аутентификация и авторизация:

public void Configure(IApplicationBuilder app)
{
  ...

  app.UseStaticFiles();

  app.UseRouting();
  app.UseCors();

  app.UseAuthentication();
  app.UseAuthorization();

  app.UseEndpoints(endpoints => {
     endpoints.MapControllers();
  });

И, самое главное, в этом порядке . Как указано здесь: Migrate Startup.Configure .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...