2016-03-31 8 views
1

Wir haben asp.net MVC & eckigen Anwendung. Wir verwenden identityserver3 für die Zugriffskontrolle auf die Anwendung. Alles funktioniert wie erwartet, außer einer Sache. Nicht autorisierte Benutzer haben weiterhin Zugriff auf den statischen Inhalt der Anwendung.verhindern den Zugriff auf den statischen Inhalt von asp.net - mvc app

Gibt es eine Möglichkeit, den Zugriff auf diese Dateien zu verweigern, bevor sich der Benutzer anmeldet?

Antwort

0

Hier ist der Link zu den großen Beitrag, die mich zu der Lösung geführt => Intercepting file requests

Schritte Ich habe genommen, mein Problem zu lösen :

  1. Diese Zeile zu meiner webconfig-Datei hinzugefügt. Dadurch wird sichergestellt, dass js-Dateien Anfrage nicht von Handler verarbeitet werden.

    <system.webServer> 
        <handlers> 
         <add name="JSFileHandler" path="*.js" verb="GET" 
          type="System.Web.Handlers.TransferRequestHandler"  
          preCondition="integratedMode,runtimeVersionv4.0" /> 
        </handlers> 
    </system.webServer> 
    
  2. Route registrieren.

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    
        routes.RouteExistingFiles = true; 
        routes.MapRoute(
         "staticfiles" 
         , "{*src}" 
         , new { Controller = "Main", action = "GetJS" } 
         , new { src = @"(.*?)\.(js)" }      // URL constraints 
        ); 
    
  3. Return-Datei von Controllern Aktion

    public ActionResult GetJS() 
    { 
    
        var path = this.Url.RouteUrl("staticfiles"); 
        return File(path, 
         System.Net.Mime.MediaTypeNames.Application.Octet, 
         Path.GetFileName(path)); 
    } 
    
1

Sie können fügen Sie diese zu Ihrer web.config

<location path="your/path/tostaticfiles">  
    <system.web> 
     <authorization>     
     <deny users="?" /> //Denies unauthorized users 
     </authorization> 
    </system.web> 
</location> 
+0

Mit Formular-Authentifizierungen funktioniert es wie ein Zauber, aber in diesem Fall scheint es keine Wirkung zu haben. – piowtarn

+0

Darüber hinaus funktioniert dies nur für Dateien, deren Typen in den IIS-Handlerzuordnungen .NET zugeordnet sind. Zum Beispiel sind jpg-Dateien nicht standardmäßig und IIS wird sie vor dem Weiterleiten der Anforderung an .NET bereitstellen. – esmoore68

0

Neben dem Standort Abschnitt müssen Sie auch IIS anzuzeigen, dass ASP.NET diese Dateien verarbeiten (runAllManagedModulesForAllRequests = "true").

Neben (Geschwister von system.web Knoten):

<location path="Scripts"> 
    <system.web> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

Unter system.webServer Knoten:

<modules runAllManagedModulesForAllRequests="true"> 

Hinweis: "?" Verwendung users = "*" statt users = wenn Sie keinen Benutzer auf Ihre Dateien zugreifen lassen möchten. In meinem Fall habe ich das getan, um den Zugriff auf meine JS-Dateien zu verhindern, und ich diene ihnen mit Bündeln.