我在IIS和我项目的web.config文件中安装并启用了Windows身份验证,并将[Authorize(Users = "MYDOMAIN\MyAccount")
属性添加到控制器,就在Index方法的上方,这样我就可以开始测试以确保没有人但那些指定的可以访问我正在处理的IT Intranet应用程序。将以下内容添加到Web.config:
<system.web>
<compilation debug="true" targetFramework="4.7.1" />
<httpRuntime targetFramework="4.6.1" />
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
</system.web>
如果我删除属性的Users =
部分并将其更改为Roles = "DOMAIN\\Group"
,或者我只是在逗号后添加,则会完全停止工作:
[Authorize(Roles = "DOMAIN\\GROUP")]
或
[Authorize(Roles = "DOMAIN\\GROUP", Users = "DOMAIN\Username")]
我是AD小组的成员,我指的是这两项工作都没有。它仅适用于用户,而且不能用于其他用户。否则我会被提示输入密码。
我甚至得到它来显示我登录到Windows的当前用户,如果我删除该属性,它仍然正常工作。然而,如果我重新添加属性(包含Roles部分),我会尽快登录,尽管以标签中指定的用户身份登录。
这是控制器的一部分:
public class HomeController : Controller
{
[Authorize(Users = @"MYDOMAIN\MyAccount", Roles = @"MYDOMAIN\All Information Technology")]
public ActionResult Index()
{
return View();
}
这是我的RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
为什么这不起作用?我错过了什么?
答案 0 :(得分:1)
您正在尝试授权群组而非角色。这两件事情不是一回事。除非用户将成为有权访问资源的角色的一部分,否则您将始终获得未经授权的结果。
如果您要授权群组,则应继承并扩展AuthorizeAttribute
或制定实施IAuthorizationFilter
的授权属性。
答案 1 :(得分:0)
事实证明,无论出于何种原因,我正在测试的笔记本电脑,尽管作为注释中的组成员的帐户登录到域中,但仍被选为我的单独域管理员帐户。因此,当我将Domain Admins添加到它开始工作的角色的授权列表中时。我现在遇到了一个全新的问题,为什么我的应用程序选择了一个与我登录的帐户不同的帐户,但显然我做的一切都是正确的。请参阅问题作为参考。