[。尝试在.net core 3.0 MVC应用程序中的任何位置应用[Authorize]装饰时出现问题。首先,我的“我的服务”设置如下:
services.AddRouting();
services.AddOrchardCore().AddMvc();
services.AddResponseCaching();
services.AddAuthentication();
services.AddAuthorization();
services.AddAntiforgery();
services.AddDbContextPool<AppDbContext2>(options => options.UseSqlServer(_config.GetConnectionString("LocalDBConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddRoleManager<RoleManager<IdentityRole>>()
.AddEntityFrameworkStores<AppDbContext2>()
.AddRoles<IdentityRole>()
.AddDefaultTokenProviders();
而且我有这个控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Authorization;
using ModelLibraryModule;
namespace Module1.Controllers
{
[Authorize]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize(Roles="AddUser")]
public ActionResult UserList()
{
var a = HttpContext.User;
var b = a.IsInRole("AddUser");
var c = User.Claims.ToList();
var d = User.Identities.ToList();
return View();
}
}
}
我的问题是,无论是否登录,我都可以访问Homecontroller中的任何一种方法。所有的测试变量都显示了我应该期待的结果。 IsAuthenticated在未登录的情况下返回false,在我登录时IsInRole()是正确的,并且User.Claims.ToList()显示了已登录用户的所有声明。
但是[Authorize]标签似乎完全没有作用。我在输出日志中没有看到甚至正在尝试授权的指示。在这一点上,我已经尝试了一些修复程序,但是目前这让我很困惑。有什么明显的我想念的地方吗?
确保如图所示在Configure方法中进行身份验证注册的顺序:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}