我有一个在aspnet 5 MVC 6上使用Windows Auth的应用程序(obv使用IIS + IISPlatformHandler)
如何限制AD组对控制器的访问?
我尝试过做类似以下的事情,但它不会起作用:(当我看到我的用户声称时,我看到许多团体和声称看起来像SID的前身。{S-1- 5-4}
[Authorize(Roles = "DOMAIN\\GROUP")
public class myController : Controller{...}
答案 0 :(得分:4)
截至2016年7月,我发现以下内容现在适用于.NET Core RTM(WebAPI):
[Authorize(Roles = @"DOMAIN\Group")]
以下是您还要测试的project.json依赖项:
{
"title": "My App",
"copyright": "2016",
"description": "WebAPI",
"dependencies": {
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "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"
},
"Newtonsoft.Json": "9.0.1",
"NLog.Extensions.Logging": "1.0.0-rtm-alpha2"
},
答案 1 :(得分:1)
这个问题是DNX中没有system.DirectorySevices。我已经开始讨论以下github问题了。
https://github.com/aspnet/Home/issues/1232#issuecomment-171264286
答案 2 :(得分:0)
我们不得不用当前的RC1位处理这个问题,并试图最小化自定义,因为它看起来好像有希望在RC2中修复。我们最终做的是创建一个Constants类,它具有我们关注的AD组名称作为变量,然后暂时,常量的值是SID。在我们的代码中,我们然后使用常量而不是对角色的SID值进行硬编码。这样,当事情在未来得到修复时,我们就能够为常量更改值(用组名替换sids),而不是通过所有控制器进行搜索和替换。我们最终编写了一个简单的API,以便我们可以撤回所有的Name / Sid关联。代码是
[HttpGet("[action]")]
public List<Tuple<string, string>> GetSids()
{
List<Tuple<string, string>> results = new List<Tuple<string, string>>();
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
using (GroupPrincipal gp = new GroupPrincipal(pc))
{
using (PrincipalSearcher searcher = new PrincipalSearcher(gp))
{
foreach (var found in searcher.FindAll())
{
if (found is GroupPrincipal)
{
results.Add(new Tuple<string, string>(found.Name, found.Sid.Value));
}
}
}
}
}
return results;
}
答案 3 :(得分:-1)
我刚遇到一种非常类似的情况,我们的角色和授权级别会大大偏离ASP.NET原生提供的内容。所以,我们构建了自己继承自AuthorizeAttribute的自定义属性,它运行得非常好!
我没有AD组件的经验,但幸运的搜索显示这位开发人员做了:
他的代码看起来很直接,除了AD片段似乎就像我们工作的那样。
有一点需要注意:目前授权的最佳做法是授权政策。但即使是最聪明地使用这种模式,我怀疑会让你轻松通往AD。如果您有点好奇,可以看到建议的方法here。