【问题标题】:How i can restrict the Authorize attribute to certain users only, inside my asp.net core mvc web application我如何在我的 asp.net 核心 mvc Web 应用程序中将 Authorize 属性限制为仅限某些用户
【发布时间】:2020-08-22 02:06:16
【问题描述】:

我创建了一个新的 asp.net MVC 核心 Web 应用程序,并将其设置为使用多个组织的工作或学校帐户,如下所示:-

现在,如果我将 [Authorize] 属性添加到操作方法,则将要求用户首先登录。但我的问题是如何只允许某些用户访问操作方法?

第二个问题,我如何才能阻止用户登录到应用程序,除非他们在预定义的列表中?

【问题讨论】:

  • @DavidG 感谢您的链接,但在这种情况下我如何将用户链接到政策?
  • @DavidG 你能提供更多信息吗?现在就我而言,我没有表来存储角色和用户,所以我该怎么做呢?

标签: asp.net-core asp.net-core-mvc authorize-attribute


【解决方案1】:

您必须在授权属性中添加角色。例如,您可以在应用程序中定义 Admin、User、Guest 等角色,并添加类似 [Authorize(Roles = "Admin")] 的授权属性。

现在只有管理员才能在身份验证后访问此资源,用户或访客将无法通过此步骤。

您可以关注此link 以获得更多指导。您还可以使用声明和策略进行授权。

【讨论】:

  • 角色不再是推荐的做事方式,我不会推荐。
  • @Muhammad Amir 但在这种情况下我如何将用户与角色关联起来?
  • var user = _userManager.FindByIdAsync(userId) identityResult = await _userManager.AddToRoleAsync(user, "Admin");
  • @MuhammadAmir 那么我的第二个问题呢?我怎么只能允许预定义的用户登录到应用程序?
  • Authorize 属性强制用户登录以访问受保护的资源。您可以观看此series 以获得良好的指导。
【解决方案2】:

要限制用户/组访问您的应用程序,您可以尝试以下解决方案:

使用 Azure AD 限制用户/组:

作为我的previous reply,您可以在同意/在租户中注册应用程序后始终通过客户端ID找到服务原则。您可以使用users/groups assignment feature

  1. 使用管理员帐户或作为应用程序所有者登录 Azure 门户。

  2. 选择Azure Active Directory。在左侧导航菜单中,选择Enterprise applications

  3. 从列表中选择应用程序。如果您没有看到该应用程序,请开始在搜索框中输入其名称。或者使用过滤器控件选择应用程序类型、状态或可见性,然后选择应用。

  4. 在左侧导航菜单中,选择Properties

  5. 确保User assignment required? 切换设置为是。

然后只有分配的用户/组可以访问应用程序。您可以通过 Azure 门户或 Powershell 将用户或组分配给应用程序。

限制应用程序内的用户/组:

方法一:分组声明

您可以在 Azure AD 中使用 groups claims,在 azure 门户中配置您的应用程序以通过编辑清单来接收组声明:

{
  ...
  "errorUrl": null,
  "groupMembershipClaims": "SecurityGroup",
  ...
}

从 Azure AD 发出的 ID 令牌将在 groups 声明中包含当前用户的组 ID 列表,然后在 asp.net 核心应用程序中,您可以通过以下方式限制访问:

services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser().RequireClaim("groups", "YourGroupID")
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    });

注意:来自document

如果用户是超过超额限制的组的成员(SAML 令牌为 150 个,JWT 令牌为 200 个),则 Microsoft 标识平台不会在令牌中发出组声明。相反,它在令牌中包含一个超额声明,指示应用程序查询 Graph API 以检索用户的组成员资格。

方法二:应用角色

您可以add app roles in your application,为用户/组分配角色,以便用户登录并同意后角色将包含在令牌中,您的应用程序可以使用策略来根据角色声明限制访问。

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2020-10-09
    • 2022-06-10
    相关资源
    最近更新 更多