Зачем атрибуту Authorize Roles отказывать в доступе, если аутентифицированный пользователь находится в указанной роли? - PullRequest
0 голосов
/ 27 февраля 2019

Я добавил Asp.Net Core 2.1 Identity в проект.Я успешно смог зарегистрировать пользователя и пройти аутентификацию с использованием лесов.

mysqldatabase displaying registered test user

У меня есть код в register.cs, который автоматически присваивает зарегистрированномуучетные записи для роли «TestRole» и проверено в базе данных, роль была связана с тестовой учетной записью.

userManager.AddToRoleAsync(user, "TestRole").Wait(); Database record showing the test user is associated to the TestRole Когда я добавляю атрибут маршрута [Authorize] атрибута маршрутаЯ получаю ожидаемое поведение или пользователь перенаправляется на экран входа в систему, если он не вошел в систему. Однако, когда я использую атрибут [Authorize(Roles ="TestRole")], мне запрещается доступ к странице, хотя аутентифицированная учетная запись связана с «TestRole».

Подобный SO QA (https://stackoverflow.com/a/46890346/1843966) имел популярный ответ о проверке порядка app.usemvc при запуске, но я подтвердил, что я делаю эту часть правильно.

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

StartUp.cs:

 public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }


    public void ConfigureServices(IServiceCollection services)
    {

        var context =  services.AddDbContextPool<myAppContext>( // replace "YourDbContext" with the class name of your DbContext
            options => options.UseMySQL("server=x.x.x.x;port=x;user=xyz;database=xyz;password=xyz")); 
            services.AddDefaultIdentity<myAppUser>()
                    .AddDefaultTokenProviders()
                    .AddRoles<IdentityRole>()
                    .AddEntityFrameworkStores<myAppContext>();
            services.AddAuthentication();
            services.AddMvc()
                    .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider service)
    {

        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

журнал консоли dotnet:

info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
  Authorization failed.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[3]
  Authorization failed for the request at filter 
'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
info: Microsoft.AspNetCore.Mvc.ForbidResult[1]
  Executing ForbidResult with authentication schemes ().
info: 
Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler[13]
  AuthenticationScheme: Identity.Application was forbidden.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...