Need to Impersonate user forAccessing Network resource, Asp.Net Account

前端 未结 5 1882
别那么骄傲
别那么骄傲 2020-12-10 20:55

I need to access a network resource on which only a given Domain Account has access. I am using the LogonUser call, but get a \"User does not have required priviliege\" exce

5条回答
  •  孤城傲影
    2020-12-10 21:30

    • With this WebPart y connect to a net resource with restricted access I put a file and y close the connection with the resource (as user with granted access), you dont need to make a new share connection, that was de only restricction, that my sistems departament make to me. May be, there are many imports that necesary, but I do to many tests and I havent got time to clean the code. I hope that help to you. (sorry for my poor english).

    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 Imports Microsoft.SharePoint.WebPartPages Imports Microsoft.SharePoint.WebControls Imports Microsoft.SharePoint.Administration Imports System.Security.Principal Imports System.Security.Permissions Imports System.Runtime.InteropServices Imports System.Environment Imports System.Net.Sockets Imports 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
    

    End Class 'Description for WebPart1. "), 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

    End Class

提交回复
热议问题