我使用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;
}
}
答案 0 :(得分:0)
你想要的是这个:
<authentication mode="Windows"/>
这将使用User.Identity.Name字段中的Windows标识。但是,您应该知道,您无法同时真正使用Windows身份验证和匿名。您必须控制对任何给定资源的访问,或者,或者,您可以指定哪些用户有权访问,哪些用户无权访问。