【发布时间】:2023-02-02 00:18:34
【问题描述】:
我已经阅读了无数的教程、文章和问题。
我不明白为什么 [Authorize(Roles = "SuperAdmin")] 或任何其他角色不起作用。无论指定的角色如何,每个人都会收到 403:
//[Authorize(Roles = "SuperAdmin")] - Commented out to debug roles
public async Task<IActionResult> Index()
{
var userID = User.FindFirstValue(ClaimTypes.NameIdentifier);
var user = await _userManager.FindByIdAsync(userID);
var roles = await _userManager.GetRolesAsync(user);
return View();
}
但是他们仍然会在任何授权角色的控制器上得到 403。
以下是我的 program.cs 的相关部分:
builder.Services.AddIdentity<TMSUser, IdentityRole>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>()
.AddRoleManager<RoleManager<IdentityRole>>()
.AddTokenProvider<DataProtectorTokenProvider<TMSUser>>(TokenOptions.DefaultProvider);
builder.Services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = new PathString("/Home/HandleError/401");
options.LoginPath = new PathString("/Home/Portal");
});
builder.Services.AddAutoMapper(typeof(Program));
builder.Services.AddControllersWithViews();
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddControllers().AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
builder.Services.AddTransient<IEmailSender, EmailSender>();
builder.Services.AddTransient<ITools, Tools>();
builder.Services.Configure<AuthMessageSenderOptions>(builder.Configuration);
builder.Services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
var app = builder.Build();
app.UseStatusCodePagesWithReExecute("/Home/HandleError/{0}");
app.UseHsts();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var context = services.GetRequiredService<TMSContext>();
context.Database.EnsureCreated();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
在过去的几个月里,我无数次地修改了我的代码,试图让它工作,但现在我只是在乞求帮助。这非常令人沮丧!我错过了什么?我的代码中的其他内容是否会阻止它正常工作?
谢谢!
【问题讨论】:
-
检查过超级管理员角色名称的大小写了吗?认为外壳必须相等
-
是的,外壳匹配。谢谢!
标签: c# asp.net asp.net-core asp.net-core-mvc asp.net-authorization