Роли не работают на контроллере. . NET Core API - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь авторизовать метод моего AuthController, я реализовал его следующим образом:

AuthController.cs

    [HttpPost("register")]
    [Authorize]
    [EnableCors("AllowAllHeaders")]
    public async Task<IActionResult> Register(UserForRegisterDto userForRegisterDto)
    {
        // bla bla bla
    }

метод без [Авторизоваться] на самом деле работает. на моем Startup.cs у меня есть следующая конфигурация

Startup.cs

IdentityBuilder builder = services.AddIdentityCore<User>(options =>
        {
            options.Password.RequiredLength = 4;
            options.Password.RequireDigit = false;
            options.Password.RequireUppercase = false;
            options.Password.RequireNonAlphanumeric = false;
        });

        builder = new IdentityBuilder(builder.UserType, typeof(Role), builder.Services);
        builder.AddEntityFrameworkStores<DataContext>();
        builder.AddRoleValidator<RoleValidator<Role>>();
        builder.AddRoleManager<RoleManager<Role>>();
        builder.AddSignInManager<SignInManager<User>>();
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII
                        .GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };
            });

        services.AddControllers(options =>
        {
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        }).AddNewtonsoftJson(opt =>
        {
            opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        });

Способ настройки

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

Есть ли еще какая-то конфигурация отсутствует ?

То, что я пытаюсь выполнить sh, это авторизация с помощью Roles = "Admin" для регистрации учетной записи, но у меня нет другого ответа, кроме 401.

это знак генерируется на мой метод авторизации, который я использую на заголовок авторизации:

eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIxMSIsInVuaXF1ZV9uYW1lIjoiQXpyYWVsIiwicm9sZSI6WyJBZG1pbiIsIkVtcGxveWVlIl0sIm5iZiI6MTU4NTQzNzgzNywiZXhwIjoxNTg1NTI0MjM3LCJpYXQiOjE1ODU0Mzc4Mzd9.DwDCeMXBrgzGeI1w2PgnIlYeccma73BaFuN2p1ryzlwCJr815V6Q3hYMzX-PXfmOr_94fQnM4PHbJPwRNoTItw

1 Ответ

1 голос
/ 29 марта 2020

Порядок использования UseAuthentication () и UseAuthorization () неверен в методе Configure. Сначала должна быть аутентификация, а затем авторизация:

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