Asp.net core mvc aspnet 5(MVC6)Windows身份验证&x2B;角色+;授权属性

Asp.net core mvc aspnet 5(MVC6)Windows身份验证&x2B;角色+;授权属性,asp.net-core-mvc,Asp.net Core Mvc,我有一个应用程序在aspnet 5 MVC 6上使用Windows Auth(obv使用IIS+IISPlatformHandler) 如何限制AD组对控制器的访问 我尝试过做如下的事情,但它不起作用:(当我查看我的用户声明时,我看到许多组和声明看起来像SID的ex.{s-1-5-4} [Authorize(Roles = "DOMAIN\\GROUP") public class myController : Controller{...} 我刚刚遇到了一个非常类似的情况,我们的角色和授权级

我有一个应用程序在aspnet 5 MVC 6上使用Windows Auth(obv使用IIS+IISPlatformHandler)

如何限制AD组对控制器的访问

我尝试过做如下的事情,但它不起作用:(当我查看我的用户声明时,我看到许多组和声明看起来像SID的ex.{s-1-5-4}

[Authorize(Roles = "DOMAIN\\GROUP")
public class myController : Controller{...}

我刚刚遇到了一个非常类似的情况,我们的角色和授权级别将大大偏离ASP.NET本机提供的功能。因此,我们构建了自己的自定义属性,该属性继承自AuthorizeAttribute,并且工作得非常好

我没有使用广告组件的经验,但幸运的搜索结果显示,这位开发人员做到了:

他的代码直截了当地向前看,除了那则广告外,似乎和我们正在做的一样


需要注意的一点是:目前授权的最佳实践是授权策略。但是,即使是最聪明地使用这种模式,我也怀疑它也会为您提供一条通往广告的捷径。如果您好奇,您可以看到建议的方法。

我刚刚遇到了一个非常类似的情况,即我们的角色和授权级别将大大降低ate来自ASP.NET本机提供的内容。因此,我们构建了自己的自定义属性,该属性继承自AuthorizeAttribute,并且工作得非常好

我没有使用广告组件的经验,但幸运的搜索结果显示,这位开发人员做到了:

他的代码直截了当地向前看,除了那则广告外,似乎和我们正在做的一样


需要注意的一点是:目前授权的最佳实践是授权策略。但是,即使是最聪明地使用这种模式,我怀疑也能为您找到一条通向广告的捷径。如果您感到好奇,您可以看到建议的方法。

问题是DNX中没有system.DirectoryServices。我已经开始讨论在以下github问题上进行了讨论


问题在于DNX中没有system.DirectorySevices。我已经开始讨论以下github问题


我们必须用当前的RC1位来处理这个问题,并尽量减少定制,因为看起来事情有望在RC2中得到解决。我们最终创建了一个Constants类,该类将我们关心的AD组名称作为变量,然后暂时将常量的值作为SID。在我们的代码中,然后我们使用常量,而不是对角色的SID值进行硬编码。这样,将来事情解决后,我们就可以更改这些值(用组名替换SID)我们还编写了一个简单的API,这样我们就可以收回所有的名称/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;
}
[HttpGet(“[action]”)
公共列表GetSids()
{
列表结果=新列表();
使用(PrincipalContext pc=new PrincipalContext(ContextType.Domain))
{
使用(GroupPrincipal gp=新的GroupPrincipal(pc))
{
使用(PrincipalSearcher=新PrincipalSearcher(gp))
{
foreach(在searcher.FindAll()中找到的变量)
{
如果(找到的是GroupPrincipal)
{
Add(新元组(found.Name,found.Sid.Value));
}
}
}
}
}
返回结果;
}

我们必须用当前的RC1位来处理这个问题,并尽量减少定制,因为看起来事情有望在RC2中得到修复。我们最终创建了一个常量类,该类将我们关心的AD组名称作为变量,然后暂时将常量的值作为SID。在我们的代码中,然后我们使用常量,而不是对角色的SID值进行硬编码。这样,将来事情解决后,我们就可以更改这些值(用组名替换SID)我们还编写了一个简单的API,这样我们就可以收回所有的名称/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;
}
[HttpGet(“[action]”)
公共列表GetSids()
{
列表结果=新列表();
使用(PrincipalContext pc=new PrincipalContext(ContextType.Domain))
{
使用(GroupPrincipal gp=新的GroupPrincipal(pc))
{
使用(PrincipalSearcher=新PrincipalSearcher(gp))
{
foreach(在searcher.FindAll()中找到的变量)
{
如果(找到的是GroupPrincipal)
{
Add(新元组(found.Name,found.Sid.Value));
}
}
}
}
}
返回结果;
}

截至2016年7月,我发现以下内容现在适用于.NET Core RTM(WebAPI):

以下是您还想测试的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"
  },

截至2016年7月,我发现以下内容适用于.NET Core RTM(WebAPI):

以下是您还想测试的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"
  },

您是否尝试迭代与用户主体对象关联的声明。我不确定Windows auth是否会这样做,但对于所有其他内容,信息都是作为声明获取的…您是否尝试迭代与用户主体对象关联的声明。我不确定Windows auth是否会这样做,但对于所有其他信息此解决方案是否适用于MCV 5或更低版本?它不适用于MVC 6。作者正在请求有关ASP.NET/MVC的MVC 6而非更低版本的帮助。链接“此处”中的文档标题在我上面的回答中,我特别指出它是针对MVC6的。是的,目前的做法是使用另一种方法,但这并不意味着它是正确的