Laden...

Intranetseite (Windowsauth) bringt "Zugriff verweigert" bei Zugriff auf Pfad von zweitem Server

Erstellt von ChrisZ vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.168 Views
C
ChrisZ Themenstarter:in
1 Beiträge seit 2018
vor 5 Jahren
Intranetseite (Windowsauth) bringt "Zugriff verweigert" bei Zugriff auf Pfad von zweitem Server

Hallo zusammen,

folgendes Szenario hab ich hier: Ich entwickel eine kleine Intranetseite bei uns im Netz. Die wird auf einem IIS auf Server1 gehostet. Die Webanwendung nutzt die Windowsauthentifizierung und möchte auf einen Dateipfad auf Server 2 zugreifen.
Dies bricht jedoch mit folgender Fehlermeldung ab:

Fehlermeldung:
Serverfehler in der Anwendung /.
Der Zugriff auf den Pfad "\Server2\Scan\Bestellungen" wurde verweigert.
Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

Ausnahmedetails: System.UnauthorizedAccessException: Der Zugriff auf den Pfad "\Server2\Scan\Bestellungen" wurde verweigert.

ASP.NET darf nicht auf die angeforderte Ressource zugreifen. Gewähren Sie der ASP.NET-Anforderungsidentität Zugriffsrechte für die Ressource. ASP.NET hat eine Standardprozessidentität (gewöhnlich {MACHINE}\ASPNET unter IIS 5 bzw. Network Service unter IIS 6 und IIS 7 sowie die konfigurierte Anwendungspoolidentität in IIS 7.5), die verwendet wird, wenn die Anwendung keinen Identitätswechsel ausführen kann. Wenn die Anwendung über <identity impersonate="true"/> einen Identitätswechsel ausführen kann, wird als Identität gewöhnlich der anonyme Benutzer (normalerweise IUSR_MACHINENAME) bzw. der authentifizierte Anfragebenutzer verwendet.

Um ASP.NET Zugriff auf eine Datei zu gewähren, klicken Sie im Datei-Explorer mit der rechten Maustaste auf die Datei, wählen "Eigenschaften" und anschließend die Registerkarte "Sicherheit". Klicken Sie auf "Hinzufügen", um den entsprechenden Benutzer bzw. eine Gruppe hinzuzufügen. Markieren Sie das ASP.NET-Konto, und aktivieren Sie jeweils das Kontrollkästchen für den gewünschten Zugriff.

Quellfehler:

Beim Ausführen der aktuellen Webanforderung wurde einen unbehandelte Ausnahme generiert. Informationen über den Ursprung und die Position der Ausnahme können mit der Ausnahmestapelüberwachung angezeigt werden.

Stapelüberwachung:

[UnauthorizedAccessException: Der Zugriff auf den Pfad "\Server2\Scan\Bestellungen" wurde verweigert.]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +417
System.IO.FileSystemEnumerableIterator1.CommonInit() +313 System.IO.DirectoryInfo.InternalGetFiles(String searchPattern, SearchOption searchOption) +90 PRODPLAN.Models.Orders.GetPCs(List1 all_orders) +1375
PRODPLAN.Controllers.MentionController.Index(String sortby) +24998
lambda_method(Closure , ControllerBase , Object[] ) +139
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) +280 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) +35
System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +33
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +69
System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +80
System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +385
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +69
System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +32
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +184
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +59
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +27
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +73
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +59
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +41
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +59
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +393
System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +195
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +128

Folgende Maßnahmen habe ich bisher erfolglos versucht:

  • Zugriffsberechtigung auf dem Ordner für das ASP.NET-Computerkonto gesetzt (Testweise mit Vollzugriff).
  • Nutzer "Jeder" Vollzugriff gewährt
  • In der web.config -> <system.web><identity impersonate="true"/>....</system.web> gesetzt

weitere Maßnahmen habe ich im Netz nicht gefunden und ich fürchte mein Wissen geht dafür nicht weit genug in die Tiefe, um das
Problem selbst beheben zu können.

Unter diesen Rahmenbedingungen hat der Zugriff funktioniert:

  • Als der Ordner, auf den zugegriffen wird, noch auf dem gleichen Server gelegen hat wie der IIS (Server1), hat der Zugriff funktioniert. Ich bin aber leider gezwungen diesen Ordner umzuziehen.
  • Wenn ich die Anwendung aus der Entwicklungsumgebung (Visualstudio 2012) direkt starte funktioniert der Zugriff auf Server2 auch problemlos.
  • Wenn ich mich bei der Benutzerabfrage als Admin einlogge geht auch der Zugriff auf den Server2.

Ich hoffe jemand hat eine Idee woran das liegen könnte.

VG
Christian

286 Beiträge seit 2011
vor 5 Jahren

Mit ASP.Net-Konto meinst du das Konto, dass du im IIS für die Site unter "Verbinden als" anmeldest?

Wenn ja: Ist das ein Domain-Konto?
Also nicht nur "iisAccount" sondern "MyDomain\iisAccount"

Beste Grüße
emuuu

2+2=5( (für extrem große Werte von 2)

U
135 Beiträge seit 2009
vor 5 Jahren

Bin mir nicht ganz sicher, ob ich Dich richtig verstanden habe: Du meldest Dich mit Deinem Account via Windows-Authentication an der Intranetapplikation an, die dann wiederum mit Deiner Identity gegen den Fileserver authentifiziert?

Falls ja, riecht das meiner Ansicht nach stark nach dem Thema Kerberos Delegation.
Daher könnte Dir evtl. dieser Blog-Eintrag weiterhelfen 😃

M
368 Beiträge seit 2006
vor 5 Jahren

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

16.807 Beiträge seit 2008
vor 5 Jahren

Was willst Du tun?

Willst Du, dass die Berechtigungen des Benutzers durchgeschleust werden und mit dessen Rechten auf die Dateiablage zugegriffen wird (Variante 1), oder willst Du den Benutzer der Webanwendung nutzen, um auf die Share zuzugreifen (Variante 2)?

Das sind zwei völlig verschiedene paar Stiefel und Du beschreibst quasi beides:

  • Du sagst die Anwendung hat ein definierten User im IIS (das ist Variante 2)
  • Deine Config spricht für Impersonation (das ist Variante 1)

Beides zusammen geht nicht; macht kein Sinn.