【问题标题】:Denying users in windows authentication IIS 8.5在 Windows 身份验证 IIS 8.5 中拒绝用户
【发布时间】:2021-04-25 07:50:39
【问题描述】:

我是 .NET 的新手,我使用 razor 创建了一个简单的 asp.net 核心 Web 应用程序。我在我的 IIS 8.5 中成功发布了它。每次用户想要访问我公司网络中的页面时,我都启用了 Windows 身份验证。但是,我想限制对网络中所有用户的访问,除了少数用户。我尝试如下修改我的 web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
    <security>
      <authorization>
                <remove users="*" roles="" verbs="" />
                <add accessType="Deny" users="*" />
                <add accessType="Allow" users="Alice,Bob" />
      </authorization>
          </security>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\Autentificacion.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
      
    </system.webServer>
  </location>
</configuration>

访问该网站后,系统会要求用户输入他们的 Windows 用户凭据,但网络中的任何用户都可以访问该网站,不仅是 Alice 或 Bob。我需要更改 IIS 配置吗?

【问题讨论】:

  • 你已经做到了。 ASP.NET Core 不使用web.config,您所做的更改了 IIS 配置以在请求到达 ASP.NET Core 之前阻止除 Alice 和 Bob 之外的所有用户
  • 据我所知,windows 身份验证只会检查用户是否经过身份验证。它不会在 MVC 应用程序中提供任何基于角色的控制。要实现基于角色的授权,您可以尝试使用基于策略的授权来验证只有来自 Active Directory 组的用户才能访问该页面,请参考以下链接:Link 1Link 2

标签: c# asp.net asp.net-core razor-pages


【解决方案1】:

您想查看授权策略。

services.AddAuthorization(options =>
        {
            options.AddPolicy("NewPolicy", policy =>
                policy.RequireAssertion(context =>
                    context.User.IsInRole("Some cool user group")));
        });

您希望访问的用户属于称为“一些很酷的用户组”的用户组。

从那里你可以通过使用授权属性来保护你的路由和控制器:

[Authorize(Policy = "NewPolicy")]

进一步阅读: https://chrissainty.com/securing-your-blazor-apps-configuring-policy-based-authorization-with-blazor/

除非绝对必要,否则我不建议摆弄 IIS web.config。

【讨论】:

  • 谢谢你这适用于我的应用程序。但是如果我想指定一个不属于任何组的特殊用户名怎么办?以及为什么不建议修改web.config?
  • @AndresEspinel 弄乱 IIS web.config 可能会有点棘手,并且可能会不小心弄乱整个服务器。由于各种原因,授权在应用程序级别也得到了更好的实施。无论如何,是的,您绝对可以寻找特定的用户!您正在寻找的属性是 context.User.Identity.Name :)
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多