如何使用 .Net Core 授权 AD 用户

How to Authorize AD users with .Net Core

我正在尝试使用 Authorize 注释停止路由上的请求,但我无法让它与 Active Directory 一起工作。有人让这个工作了吗?

[HttpGet]
[Authorize(Roles = "DOMAIN\Group A")]
[Route("/")] // GET: /
public IActionResult Index()
{
    return View();
}

注:我也试过了Authorize(Roles = @"DOMAIN\Group A")

只是为了提供一些背景知识,我是 运行 Windows、Visual Studio Pro 2015(更新 3)

这是我的 project.json 文件中的一些内容:

"dependencies": {
    "Microsoft.AspNetCore.Authorization": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "Swashbuckle.SwaggerGen": "6.0.0-beta901",
    "Swashbuckle.SwaggerUi": "6.0.0-beta901"
  }

您是否为 IIS 和应用程序配置了集成身份验证?

在您的 web.config 中,您是否将 asp.net 核心模块设置为转发 Windows 身份,通过设置 forwardWindowsAuthToken="true"

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" 
        modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" 
      arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true" />
  </system.webServer>
</configuration>

在您的 program.cs 中,您是否已将 IIS 与 .UseIISIntegration() 集成?

var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

您是否在 Startup.cs 中的 ConfigureServices() 方法中添加了授权并将其放在 AddMvc() 之前?

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization();
    services.AddMvc();
}

当我准备好所有这些东西后,我可以愉快地根据角色进行授权,例如,我将 [Authorize(Roles = "REDMOND\scottgu_org_fte")] 放在我的家庭控制器上,我就可以正常使用了。

使用 @"REDMOND\scottgu_org_fte" 将不起作用,因为这会使字符串文字 verbatim,因此它试图计算 Domain\group,并且双斜杠是错误的。 @"REDMOND\scottgu_org_fte" 虽然可以。

如果您只想按照标准 MVC 允许/拒绝用户,并使用 IIS 反向代理到 Kestrel,那么您可以添加 web.config 和添加

<system.webServer>
  <security>
    <authorization>
      <remove users="*" roles="" verbs="" />
      <add accessType="Allow" roles="my AD User Group" />
      <add accessType="Allow" roles="uk\myUsercode" />
    </authorization>
  </security>
</system.webServer>