我在 MVC 4、ASP.NET 4.5 和 Windows 身份验证中有一个应用程序。我正在尝试扩展 Identity 和 Principal 对象(分别为 WindowsIdentity 和 WindowsPrincipal )以提供有关登录用户的其他信息,但是当我尝试创建这些对象的扩展实例并替换 Current.User 时,它会抛出一个错误:
System.UnauthorizedAccessException: "Attempted to perform an unauthorized operation."
在我在 global.asax 中使用的代码下方:
public void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs args)
{
if (!args.Identity.IsAnonymous)
{
var userData = WindowsUserDataHelper.GetWindowsUserData(args.Identity);
var user = new MyCustomPrincipal(new MyCustomIdentity(args.Identity.Name, userData));
HttpContext.Current.User = user; //-- exception thrown here
Thread.CurrentPrincipal = user;
}
}
这是 web.config 设置:
<authentication mode="Windows" >
</authentication>
<authorization>
<deny users="?" />
</authorization>
在我的本地 IIS 中,我以这种方式设置了身份验证:
- 匿名:已禁用
- 基本:禁用
- Windows 身份验证:已启用
- 表单身份验证:已禁用
- ASP.NET 模拟:已禁用