【问题标题】:Visual Studio ASP.Net Impersonate Identity IssueVisual Studio ASP.Net 模拟身份问题
【发布时间】:2015-05-24 01:17:15
【问题描述】:

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

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 次左右,直到它告诉我我无权访问(我知道我有)。

因此,显而易见的解决方案是使用特定的模拟帐户,对吗?不,因为当我尝试访问网站的管理员部分时,我无法访问,因为它使用的是特定的模拟用户,而不是属于管理员组的经过身份验证的用户。我可以让特定的模拟帐户访问网站的该部分,但是每个人都可以进入,这是我不想要的。

所以我的问题是如何使用特定的模拟用户来下载文件,以及如何使用经过身份验证的用户来访问管理部分,或者,我怎样才能一直使用经过身份验证的用户并摆脱弹出窗口安全性,并让它自动使用经过身份验证的用户凭据。

【问题讨论】:

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


    【解决方案1】:

    我有点困惑,为什么你认为你首先需要冒充任何人。除非您需要特定于该用户的网络凭据,否则无需冒充任何人,而大多数情况下并非如此。

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

    因此,如果您不希望“普通”用户访问网站的这一部分,您只需通过标准 ASP.NET 身份验证工具(web.config 等)拒绝他们访问即可。

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

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 2012-02-25
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      相关资源
      最近更新 更多