Ale*_*lex 7 .net windows asp.net asp.net-mvc authorization
我重写Application_AuthenticateRequest将Windows身份验证用户替换为我通过调用以编程方式检索的另一个用户LogonUser.当我将生成的WindowsPrinciple分配给Context.User时,我得到以下异常.我的开发机器上没有这个例外(一切都很完美),只在我的QA机器上.这两台机器都是Windows Server 2008 R2.QA机器上有些不同,但我不知道它是什么.
以下是我想要完成的内容的完整描述.
[UnauthorizedAccessException: Attempted to perform an unauthorized operation.]
System.Security.Principal.WindowsIdentity.get_AuthenticationType() +317
System.Web.Hosting.IIS7WorkerRequest.SetPrincipal(IPrincipal user, IntPtr pManagedPrincipal) +106
System.Web.HttpContext.SetPrincipalNoDemand(IPrincipal principal, Boolean needToSetNativePrincipal) +9022044
System.Web.HttpContext.SetPrincipalNoDemand(IPrincipal principal) +6
System.Web.HttpContext.set_User(IPrincipal value) +36
MyProj.MvcApplication.OverrideLoginUser() in C:\Data\Project\MyProj\Global.asax.cs:317
MyProj.MvcApplication.Application_AuthenticateRequest(Object sender, EventArgs e) in C:\Data\Project\MyProj\Global.asax.cs:305
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
Run Code Online (Sandbox Code Playgroud)
我通过将应用程序池的标识从"ApplicationPoolIdentity"更改为"LocalSystem"来解决QA计算机上的错误.在我的开发框中,设置是ApplicationPoolIdentity,那么为什么权限不同?失败的功能需要什么权限?
我已经筋疲力尽了.即使在本地Administrators组中使用用户帐户也无济于事.唯一可行的是将应用程序池作为LocalSystem运行.其他一些人也有这个问题(在这里记录)任何想法都受到赞赏.谢谢.
好的。我只花了5个小时,但我找到了解决方案。Identity.AuthenticationType在将主体对象分配给 之前,我通过调用新创建的身份的属性来缩小要调用的问题范围Context.User。这次我的开发盒上也出现了未经授权的错误。我想这意味着由于某种原因,该属性在分配期间没有在我的开发盒上执行Context.User,而是在我的 QA 盒上执行。不管怎样,在谷歌搜索了一下之后,我发现了这个文档,它展示了如何在 WindowsIdentity 构造期间指定 AuthenticationType。这样做之后我的问题就解决了!这是代码:
// Construct a WindowsIdentity object using the input account token
// and the specified authentication type.
var foo = new WindowsIdentity(logonToken, "WindowsAuthentication");
Run Code Online (Sandbox Code Playgroud)
就是这样!我的两台服务器上不再出现身份验证错误!
| 归档时间: |
|
| 查看次数: |
3006 次 |
| 最近记录: |