使用 Windows 2012 服务器和 VS2012,我使用 Intranet 模板创建了一个新的 MVC 4 项目以进行 Windows 身份验证。我将它发布到 Windows 2012 服务器。砰,一切正常,我可以仔细阅读该网站。所以我将以下内容添加到 HomeController:
[Authorize(Roles = @"DOMAIN\GROUP")]
public class HomeController : Controller
{
...
}
身份验证仍然有效,但我立即收到带有大红色的错误页面:“错误。处理您的请求时发生错误。”
我尝试了域本地组、全局组、组的完整路径,但没有任何效果。然后我尝试
[Authorize(Users = @"DOMAIN\ME")]
public class HomeController : Controller
{
...
}
这样可行!但我想使用 Windows 组。我读过的所有内容都说它只使用 Roles = ...,但由于某种原因,我遗漏了一些东西。从基本模板我没有改变任何东西,只是添加了 [Authorize(Roles = "..."].
我在 Google 上搜索了几个小时,最后大部分都在 stackoverflow 上。我错过了什么?它必须是一些简单的东西。
如果它有帮助...服务器是我自己的开发服务器,我在其他项目 WCF 和 ASP.NET Forms 网站中使用 Windows 身份验证和授权。
新的发展:似乎对于角色,服务器正在尝试基于 SqlRoleProvider 访问角色成员资格
[SqlException (0x80131904): Login failed for user 'CS\CS446$'.]
...
System.Web.Security.SqlRoleProvider.GetRolesForUser(String username) +1466
System.Web.Security.RolePrincipal.IsInRole(String role) +12322757
System.Linq.Enumerable.Any(IEnumerable`1 source, Func`2 predicate) +149
System.Web.Mvc.AuthorizeAttribute.AuthorizeCore(HttpContextBase httpContext) +265
...
它确实使用 Windows 对我进行了身份验证,并且似乎也通过 Windows 对我进行了授权。