需要模拟用户访问网络资源,Asp.Net帐户

我需要访问只有给定域帐户才能访问的网络资源。 我正在使用LogonUser调用,但获得“用户没有必需的特权”exception,因为Web应用程序使用asp.net帐户运行,并且它没有足够的权限来进行此调用。

有办法解决它吗? 更改ASP.Net帐户的身份或权限不是一个选项,因为这是一个运行许多项目的生产计算机。 有没有更好的方法来实现这一目标?

使用Asp.Net 2.0,表单身份validation。

亲切的问候。

只是调用LogonUser是不够的。 您需要冒充该用户。 您可以模拟仅访问网络资源。

示例代码可以在MSDN上找到。

你可以添加一个

 

标记到您的web.config,但这可能不太理想,因为您可能不希望以该用户身份运行整个站点…

您可以使用DomainName和密码将网络共享映射为本地驱动器…然后通过映射驱动器将文件拉到网站?

 NET USE Z: \\SERVER\Share password /USER:DOMAIN\Username /PERSISTENT:YES 

我只有1.1的亲密经验,因此在2.0天内可能会发生变化但是…我们已经有了一个部署在Intranet场景中的应用程序,我们也会做同样的事情。 我们运行身份模拟打开,表单模式身份validation,匿名访问关闭。 控制此操作的最简单方法(我发现)是将有权访问的用户的凭据放在web.config中。 它们会转到您进行身份模拟的节点上。 如果它是超级scret信息我不会这样做这样! 我们只在打印环境中访问共享图形,因此大多数网站都很乐意为我们设置一个有限的帐户来放入web.confit。 LogonUser确实需要boost的privelidges。 Msdn有一些关于如何在代码中模拟特定用户的好文章。 我会删除一些链接,但这款手机不会复制粘贴。

你能改变保护网络资源的ACL吗? 我过去使用的一个技巧是创建一个Active Directory组,然后将计算机对象放入该组。 然后,我在我需要访问的对象(文件,共享等)的访问控制列表中使用该组。

这使我可以将Windows服务作为本地系统运行,并可以访问受保护的网络资源。 这个技巧似乎也适用于作为网络服务运行的ASP.NET进程。

  • 使用此WebPart连接到具有受限访问权限的网络资源,我放置一个文件,然后关闭与资源的连接(作为具有授权访问权限的用户),您不需要创建新的共享连接,这只是de限制,我的系统部门对我有用。 可能是,有许多必要的import,但我做了很多测试,我没有时间清理代码。 我希望对你有所帮助。 (抱歉我的英语不好)。

Imports System Imports System.ComponentModel Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.IO Imports System.IO.File Imports System.Diagnostics Imports System.Xml.Serialization Imports Microsoft.SharePoint Imports Microsoft.SharePoint.Utilities导入Microsoft.SharePoint.WebPartPages导入Microsoft.SharePoint.WebControls导入Microsoft.SharePoint.Administration导入System.Security.Principal导入System.Security.Permissions导入System.Runtime.InteropServices导入System.Environment导入System.Net.Sockets导入System.Web .UI.HtmlControls

Public Class Impersonalizacion Private Const LOGON32_PROVIDER_DEFAULT As Integer = 0 Private Const LOGON32_LOGON_INTERACTIVE As Integer = 2

  _ Public Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Boolean End Function  _ Public Shared Function DuplicateToken(ByVal ExistingTokenHandle As IntPtr, ByVal ImpersonationLevel As Integer, ByRef DuplicateTokenHandle As IntPtr) As Integer End Function Public Shared Function WinLogOn(ByVal strUsuario As String, ByVal strClave As String, ByVal strDominio As String) As WindowsImpersonationContext Dim tokenDuplicate As New IntPtr(0) Dim tokenHandle As New IntPtr(0) If LogonUser(strUsuario, strDominio, strClave, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, tokenHandle) Then If DuplicateToken(tokenHandle, 2, tokenDuplicate) <> 0 Then Return (New WindowsIdentity(tokenDuplicate)).Impersonate() End If End If Return Nothing End Function 

WebPart1的End Class’描述。 “),XmlRoot(Namespace:=”SPSCopiarFichero“)> _ Public Class WebPart1 Inherits Microsoft.SharePoint.WebPartPages.WebPart

 Protected WithEvents File1 As HtmlInputFile Dim vdestino As String = "\\centappd20nd01\uploads_avisos" Dim vtemporal As String = "c:\pdf" Protected WithEvents boton1 As Button Protected WithEvents usuario As TextBox Protected WithEvents contra As TextBox Protected WithEvents dominio As TextBox Protected WithEvents destino As TextBox Protected WithEvents origen As TextBox Protected WithEvents temporal As TextBox Protected WithEvents log As TextBox 'Render this Web Part to the output parameter specified. Protected Overrides Sub RenderWebPart(ByVal output As System.Web.UI.HtmlTextWriter) log.RenderControl(output) output.Write("
Ruta Origen
") File1.RenderControl(output) output.Write("
Ruta Temporal
") temporal.RenderControl(output) output.Write("
Ruta Destino
") destino.RenderControl(output) output.Write("
Usuario
") usuario.RenderControl(output) output.Write("
Contraseña
") contra.RenderControl(output) output.Write("
Dominio
") dominio.RenderControl(output) output.Write("

") boton1.RenderControl(output) output.Write("
") End Sub Protected Overrides Sub CreateChildControls() dominio = New TextBox With dominio .Text = "admon-cfnavarra" .Width = Unit.Pixel("255") End With Controls.Add(dominio) boton1 = New Button With boton1 .Text = "Copiar Fichero" End With Controls.Add(boton1) File1 = New HtmlInputFile With File1 End With Controls.Add(File1) usuario = New TextBox With usuario .Text = "SVCWSINCPre_SNS" .Width = Unit.Pixel("255") End With Controls.Add(usuario) contra = New TextBox With contra .Text = "SVCWSINCPre_SNS" .Width = Unit.Pixel("255") End With Controls.Add(contra) destino = New TextBox With destino .Text = vdestino .Width = Unit.Pixel("255") End With Controls.Add(destino) log = New TextBox With log .Width = Unit.Percentage(100) .BackColor = System.Drawing.Color.Black .ForeColor = System.Drawing.Color.White End With Controls.Add(log) temporal = New TextBox With temporal .Text = vtemporal .Width = Unit.Pixel("255") End With Controls.Add(temporal) End Sub Private Sub boton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles boton1.Click If File1.PostedFile.FileName <> "" Then Dim _objContext As WindowsImpersonationContext = Nothing log.Text = QuienSoy() CopyFile(File1.PostedFile.FileName, temporal.Text) _objContext = Impersonalizacion.WinLogOn(usuario.Text, contra.Text, dominio.Text) CopyFile(temporal.Text & "\" & System.IO.Path.GetFileName(File1.PostedFile.FileName), destino.Text) _objContext.Undo() Else log.Text = "Se debe introducir un fichero" End If End Sub Friend Shared Function QuienSoy() As String Return WindowsIdentity.GetCurrent().Name End Function Public Function CopyFile(ByVal StartPath As String, ByVal EndPath As String) Try Dim fn As String = System.IO.Path.GetFileName(StartPath) System.IO.File.Copy(StartPath, EndPath & "\" & fn, False) log.Text = "Fichero Copiado Correctamente" Catch ex As Exception log.Text = ex.Message End Try End Function

结束类