【问题标题】:MVC Core | Access Denied | Role Issue with MVC Core 2.2MVC 核心 |访问被拒绝 | MVC Core 2.2 的角色问题
【发布时间】:2019-05-17 22:39:30
【问题描述】:

我在 Mac 上使用 VS Code 来创建一些 MVC 项目。这些是在创建时设置的以使用身份框架。然后我进入数据库并创建一个管理员角色并将其绑定到我的用户。当我通过 Visual Studio Code 在本地运行项目并尝试访问我赋予该角色的控制器时,我无法进入。“访问被拒绝......你没有权限......”。

如果我在 Visual Studio 2017 中打开同一个项目,一切都会正常运行。这让我很困惑。我无法弄清楚我错过了什么。我没有问题将数据从数据库拉到视图中。一旦我将 [Authorize(Roles="Admin")] 扔到控制器上,我就会被重定向到登录。

我正在使用带有 Pomelo.EntityFrameworkCore.MySql 连接器的 MySQL 数据库的 Core 2.2 MVC 项目。

  • 我的用户是通过“注册”通过 UI 设置的
  • 我的角色和分配该用户是通过 SQL 客户端完成的

【问题讨论】:

标签: c# asp.net-mvc .net-core asp.net-identity


【解决方案1】:

如果您通过默认策略设置身份验证方案,则可能会发生这种情况,例如:

services.AddAuthorization(options =>
{
    var defaultRequirements = new[] {
        new DenyAnonymousAuthorizationRequirement()
    };

    var defaultSchemes = new[] {
        CookieAuthenticationDefaults.AuthenticationScheme,
        JwtBearerDefaults.AuthenticationScheme,
        OpenIdConnectDefaults.AuthenticationScheme
    };

    var defaultPolicy = new AuthorizationPolicy(defaultRequirements, defaultSchemes);
    options.DefaultPolicy = defaultPolicy;
});

当您向Authorize 属性(此处为角色)添加要求时,默认策略将被忽略,并且您的用户未经过身份验证。

如果发生这种情况,您可以在控制器上添加两个 Authorize 属性:一个用于强制身份验证,另一个用于角色:

[Authorize] // deny anonymous, force authentication
[Authorize(Roles = "Admin")] // additional roles check
public class MyController : Controller
{
}

添加多个Authorize 属性允许您检查多个需求(AND 逻辑)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多