WebRequest von localhost localhost: warum ist es verweigert wird?
-
03-07-2019 - |
Frage
Meine app verwendet eine WebRequest an bestimmten Stellen zu bekommen Seiten von selbst.
Dies sollte kein Problem sein. Es funktioniert eigentlich in Ordnung auf dem Server, der ein „shared“ Hosting-Paket mit Medium Vertrauen. Vor Ort, benutze ich Politik eine benutzerdefinierte Sicherheits basierend auf Medium Vertrauen, das die folgende gehört - direkt aus der Standard-Medium Vertrauensrichtlinie kopiert:
<IPermission class="WebPermission" version="1"> <ConnectAccess> <URI uri="$OriginHost$"/> </ConnectAccess> </IPermission>
Die Codezeile ist in einem benutzerdefinierten XmlRelativeUrlResolver:
public override object GetEntity( System.Uri puriAbsolute, string psRole, System.Type pReturnType )
{
return _baseResolver.GetEntity( puriAbsolute, psRole, pReturnType );
}
Die URL angefordert wird, ist auf localhost, in derselben Anwendung wie der Anforderer. Hier ist die Spitze des Stack-Trace.
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) at System.Security.CodeAccessPermission.Demand() at System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint) at System.Net.HttpRequestCreator.Create(Uri Uri) at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase) at System.Net.WebRequest.Create(Uri requestUri) at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials) at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials) at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn) at flow.controls.XmlRelativeUrlResolver.GetEntity(Uri puriAbsolute, String psRole, Type pReturnType) in c:\flow\source\controls\DataTransform.cs:line 105 at System.Xml.Xsl.Xslt.XsltLoader.CreateReader(Uri uri, XmlResolver xmlResolver)siehe
Wer das Problem hier?
@Sijin: Danke für die Anregung. Die URL, die auf dem Resolver gesendet wird auf der Anforderungs-URL basiert, und ich bestätigte im Debugger, der die Website an 127.0.0.1 ergibt das gleiche Ergebnis erreichbar.
Lösung 2
Meine Ignoranz. Ich wusste nicht, dass der $ OriginHost $ Token das originUrl Attribut des Vertrauensstufe ersetzt wurde mit - ich dachte, es nur aus der URL der App kam. Ich hatte dieses Attribut leer ursprünglich links.
<trust level="CustomMedium" originUrl="http://localhost/" />
Andere Tipps
Funktioniert es, wenn Sie 127.0.0.1 setzen anstelle von localhost?
Dies könnte nicht die Lösung sein, aber wenn ich Ihren Beitrag sah erinnerte ich mich an dieses Problem, das ich in etwa vor einem Jahr lief:
http://support.microsoft.com/default.aspx/kb/896861
Fehlermeldung 401.1, wenn Sie eine Website durchsuchen, die integrierte verwendet Authentifizierung und wird auf IIS gehostet 5.1 oder IIS 6
Wir waren die Schaffung eines WebRequest auszusortieren eine Seite kratzen und es funktioniert in der Produktionsumgebung, weil wir keine Loopback Hostnamen wurden unter Verwendung aber auf der Entwicklung Maschinen landeten wir mit Zugriff verweigert (nach der Anwendung von Windows Server 2003 SP2) auf. Der einzige Unterschied ist, dass diese unter dem integrierten Authentifizierung war, die es verursacht zu scheitern ... es hat funktioniert, wenn die Anfrage anonym war (damit ist, warum ich nicht sicher bin, das ist die Antwort für Sie).