Я добавил Asp.Net Core 2.1 Identity в проект.Я успешно смог зарегистрировать пользователя и пройти аутентификацию с использованием лесов.
У меня есть код в register.cs, который автоматически присваивает зарегистрированномуучетные записи для роли «TestRole» и проверено в базе данных, роль была связана с тестовой учетной записью.
userManager.AddToRoleAsync(user, "TestRole").Wait();
Когда я добавляю атрибут маршрута [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.