ASP.NET MVC禁用Windows标识

时间:2015-02-02 14:14:40

标签: asp.net asp.net-mvc asp.net-membership membership-provider

我使用FormsAuthenticationTicket(带表单)授权用户使用[Authorize]属性,当在IIS上允许Anonymous和Form Auths一切正常工作时,但现在需要切换到Windows和Form - 禁用匿名访问的整个页面。但是当我尝试通过Windows登录时,我有一个像用户一样的访问,因为我使用User.Identity.IsAuthenticated进行检查是否是用户登录。在这种情况下如何禁用Windows权限。

的web.config

<authentication mode="Forms">
  <forms name="Auth" loginUrl="~/Account/Login" defaultUrl="~/" timeout="30"/>
</authentication> 

我考虑覆盖Authorize属性,但它对User.Identity.IsAuthenticated没有帮助。 ThankX

UPD:与User.Identity.Name等相同的问题......

UPD2:我认为自定义属性有一些像这样的属性:

public class LoggedAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return (base.AuthorizeCore(httpContext) && !IsWindows());
    }

    public static bool? _isWindows = null;

    public static bool IsWindows()
    {
        if (!_isWindowsAuth.HasValue)
        {
            if ((HttpContext.Current != null) && HttpContext.Current.User.Identity.IsAuthenticated)
            {
                _isWindows = new bool?(HttpContext.Current.User is WindowsPrincipal);
            }
            else
            {
                try
                {
                    AuthenticationSection section = (AuthenticationSection)WebConfigurationManager.OpenWebConfiguration(VirtualPathUtility.ToAbsolute("~")).GetSection("system.web/authentication");
                    _isWindows = new bool?(section.Mode == AuthenticationMode.Windows);
                }
                catch
                {
                    _isWindows = false;
                }
            }
        }
        return _isWindows.Value;
    }

}

1 个答案:

答案 0 :(得分:0)

你想要的是这个:

<authentication mode="Windows"/>

这将使用User.Identity.Name字段中的Windows标识。但是,您应该知道,您无法同时真正使用Windows身份验证和匿名。您必须控制对任何给定资源的访问,或者,或者,您可以指定哪些用户有权访问,哪些用户无权访问。