Frage

Ich brauche eine Netzwerk-Ressource zuzugreifen, auf das nur ein bestimmtes Domain-Konto Zugriff hat. Ich bin der Logonuser-Call, sondern erhalten eine „User hat priviliege nicht erforderlich“ Ausnahme, da die Web-Anwendung mit dem asp.net-Konto ausgeführt wird und es verfügt nicht über ausreichende Berechtigungen, um diesen Anruf zu machen.

Gibt es eine Möglichkeit, dies zu umgehen? die Identität oder Berechtigungen des ASP.Net Kontos zu ändern, ist keine Option, da dies eine Produktionsmaschine mit vielen Projekten laufen. Gibt es einen besseren Weg, dies zu erreichen?

Mit Asp.Net 2.0, Formularauthentifizierung.

Mit freundlichen Grüßen.

War es hilfreich?

Lösung

Just Aufruf Logonuser ist nicht genug. Sie müssen diese Benutzer verkörpern. Sie können nur den Zugriff auf die Netzwerk-Ressource ausgeben.

Beispielcode kann auf MSDN .

Andere Tipps

Sie können ein

hinzufügen
<identity impersonate="true" userName=""/>

Tag zu Ihrem web.config aber das ist vielleicht nicht ideal sein, wie Sie wahrscheinlich nicht wollen, um die gesamte Website als dieser Benutzer laufen ...

Können Sie die Netzwerkfreigabe als lokales Laufwerk mit dem Domainnamen & Passwort Karte ... und dann Dateien über das zugeordnete Laufwerk auf die Website ziehen?

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

Ich habe nur intime Erfahrung mit diesem unter 1.1, so Dinge könnten in den 2,0 Tage geändert hav aber ... Wir haben eine App bekommen, die in Intranetszenarien eingesetzt werden, und wir schlagen die gleiche Sache. Wir betreiben mit identity impersonate eingeschaltet, Formularmodus Authentifizierung, den anonymen Zugriff aktiviert. Der einfachste Weg, dies zu kontrollieren (die ich gefunden habe) ist es, die Anmeldeinformationen des Benutzers zu setzen, die den Zugang in der web.config hat. Sie gehen auf den Knoten, auf dem Sie Identität drehen Identitätswechsel auf. Wenn es super scret info ist würde ich es nicht auf diese Weise tun aber! Wir sind nur gemeinsam genutzte Grafiken in einer Druckumgebung zugreifen, so dass die meisten Websites ein eingeschränktes Konto einrichten glücklich sind für uns in der web.confit zu setzen. Logonuser in der Tat erhöht privelidges brauchen. Msdn hat einige gute Artikel auf, wie man einen bestimmten Benutzer in Code zu imitieren. Ich würde ein paar Links herauszuzufischen, aber das Telefon nicht kopieren und einfügen tun.

Können Sie die ACL ändern, um die Netzwerk-Ressource zu schützen? Ein Trick, den ich in der Vergangenheit verwendet habe, ist eine Active Directory-Gruppe zu erstellen und dann den Computer ein Objekt in dieser Gruppe setzen. Ich benutze dann diese Gruppe in der Zugriffssteuerungsliste des Objekts (Datei, zu teilen usw.), die ich zugreifen müssen.

Das hat mir erlaubt, Windows Services als lokales System ausgeführt und Zugriff auf die geschützten Netzwerkressourcen zu erhalten. Und dieser Trick scheint auch für den ASP.NET-Prozess zu arbeiten, die als Netzwerkdienst ausgeführt wird.

  • Mit diesem WebPart y mit eingeschränktem Zugang zu einer Netto-Ressource verbinden habe ich eine Datei und y die Verbindung mit der Ressource (als Benutzer mit Zugriff gewährt) schließen, müssen Sie nicht eine neue Freigabe-Verbindung vornehmen müssen, war, dass de nur restricction , dass mein sistems departament für mich. sein kann, gibt es viele Importe, die necesary, aber ich habe zu viele Tests und ich havent Zeit bekam den Code zu reinigen. Ich hoffe, dass die Hilfe für Sie. (Sorry für mein schlechtes Englisch).

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

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

<DllImport("advapi32.dll", SetLastError:=True)> _
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

<DllImport("advapi32.dll", EntryPoint:="DuplicateToken", ExactSpelling:=False, CharSet:=CharSet.Auto, SetLastError:=True)> _
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 ‚Beschreibung für WebPart1. "), XmlRoot (Namespace: =" SPSCopiarFichero ")> _ Public Class WebPart1     Erbe 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("<br><font>Ruta Origen</font><br>")
    File1.RenderControl(output)
    output.Write("<br><font>Ruta Temporal </font><br>")
    temporal.RenderControl(output)
    output.Write("<br><font>Ruta Destino </font><br>")
    destino.RenderControl(output)
    output.Write("<br><font>Usuario </font><br>")
    usuario.RenderControl(output)
    output.Write("<br><font>Contraseña </font><br>")
    contra.RenderControl(output)
    output.Write("<br><font>Dominio </font><br>")
    dominio.RenderControl(output)
    output.Write("<br><br><center>")
    boton1.RenderControl(output)
    output.Write("</center>")
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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top