asp.net授权被忽略

问题描述 投票:1回答:1

[。尝试在.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]标签似乎完全没有作用。我在输出日志中没有看到甚至正在尝试授权的指示。在这一点上,我已经尝试了一些修复程序,但是目前这让我很困惑。有什么明显的我想念的地方吗?

c# model-view-controller .net-core asp.net-core-mvc authorization
1个回答
0
投票

确保如图所示在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();
        });
    }
© www.soinside.com 2019 - 2024. All rights reserved.