Visual Studio ASP.Net模拟身份问题

时间:2015-03-20 15:08:36

标签: asp.net authentication visual-studio-2013 impersonation

我目前正在为我的Intranet asp.net网站使用Windows身份验证。我希望我的网站的一部分仅对我指定的Windows用户组(管理员)中的用户可用,并提供访问权限。到目前为止,我的工作正常,IIS中的ASP.net模拟设置为" Authenticated User。"我还想将文件从网络位置下载到客户端计算机。我通过以下代码执行此操作:

Protected Sub Button1Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim path3 As String = "file path here"
    Dim fi As New FileInfo(path3)
    HttpContext.Current.Response.Clear()
    HttpContext.Current.Response.ContentType = "application\msword"
    HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" & fi.Name)
    HttpContext.Current.Response.WriteFile(fi.FullName)
    HttpContext.Current.Response.Flush()
    HttpContext.Current.Response.Close()
End Sub

这也适用,但前提是我将ASP.net模拟从Authenticated User切换到特定用户。我已经检查过,特定用户和经过身份验证的用户都可以访问文件路径。例如,我在Windows帐户JonW下登录,该帐户是DOMAIN USERS组的一部分。我知道DOMAIN USERS可以访问我想下载的文件。

如果我没有使用特定用户,那么当我点击按钮尝试下载文件时,会弹出一个Windows安全性并询问我的信息。当我输入信息时(由于我已经登录,我不想做任何事情),它会等待15秒然后再次询问。这会重复5次左右,直到它告诉我我无法访问(我知道我这样做)。

因此,显而易见的解决方案是使用特定的模拟帐户,对吗?不,因为当我尝试访问网站的管理员部分时,我不能,因为它使用的是特定的模拟用户,而不是作为管理员组一部分的经过身份验证的用户。我可以给具体冒充帐户访问该网站的该部分,但随后每个人都可以进入,我不想要。

所以我的问题是我如何使用特定的模拟用户下载文件,以及经过身份验证的用户访问管理部分,或者,我如何才能在整个时间内使用经过身份验证的用户并摆脱弹出Windows安全性,并让它自动使用经过身份验证的用户凭据。

1 个答案:

答案 0 :(得分:0)

我有点困惑,为什么你认为你需要首先模仿任何人。除非您需要特定于该用户的网络凭据,否则无需模拟任何人,但通常情况并非如此。

例如,在您的情况下,您只需将站点作为应用程序池用户运行,后台将在网络上通过网络进行身份验证,作为域上计算机的凭据。因此,如果您的IIS服务器名称是" Webserver"然后,您只需要\\Domain\$Webserver访问访问文件所需的共享/文件夹/资源,然后使用标准Windows身份验证控制对应用程序中这些资源的访问。

所以,如果你不想要"正常"用户访问该站点的这一部分,您只是通过标准的ASP.NET身份验证工具(web.config等)拒绝他们访问。

如果你需要让用户访问该区域,但只允许他们访问某些文件而不是其他文件,那么它会变得更复杂,但仍然不会太困难。