如何使用 .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>
我正在尝试使用 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>