我有一个MVC5网站,我希望任何人都能够从受限制的管理区域以外查看站点。我已经创建了一个过滤器来检查我已经应用到管理控制器的用户AD组,并且这个工作非常好。授权页面上的MVC Windows身份验证401
这些问题是为人们查看主站点,如果它闲置一段时间,他们会在导航到页面时收到未经授权的响应。一旦他们刷新它的罚款,并让他们回到页面。
的Web.Config在
<authentication mode="Windows" />
以下如果我删除此则问题消失,但管理控制器不工作,因为在我的自定义过滤器没有发现Windows用户。
的自定义过滤器只检查一个AD组:
var groupList = GetGroupList();
if (base.AuthorizeCore(httpContext))
{
if (string.IsNullOrEmpty(groupList))
return true;
var groups = groupList.Split(',').ToList();
var context = new PrincipalContext(ContextType.Domain, "MYDOMAIN");
var userPrincipal = UserPrincipal.FindByIdentity(
context,
IdentityType.SamAccountName,
httpContext.User.Identity.Name);
if (userPrincipal == null)
return false;
try
{
foreach (var group in groups)
if (userPrincipal.IsMemberOf(context,
IdentityType.Name,
group))
return true;
}
catch
{
return false;
}
由于某些原因,即使控制器没有[Authorize]属性,我仍然得到重定向到访问被拒绝的页面,任何人都应该能够查看页面。 – tonyjoanes