2016-04-28 14 views
1

Ich habe eine alte klassische ASP-Website, die Windows-Authentifizierung für die Zugriffssteuerung verwendet, aber das ist nicht mehr angemessen. Ich dachte, ich könnte versuchen, und wickeln Sie diese Seite in einer ASP.NET MVC-5-Anwendung, so I:Verwenden OWIN, um klassische ASP-Seiten zu autorisieren

  • erstellt eine neue Website komplett mit ASP.NET Identität
  • erstellt einen Benutzer
  • kopiert die klassischen ASP Website in die Wurzel
  • betrachten die klassische ASP Website

Nun, was ich tun muß, ist für alle .asp Seiten Genehmigung erfordern, so dass nur autorisierte Benutzer sie sehen können. Was ist der beste Weg, dies zu tun? Vielleicht könnte ich etwas mit OWIN machen?

Crispin

Antwort

1

Nach this example habe ich eine Httpmodule, die wie folgt herauskommen:

public class ClassicAspAuthorization : IHttpModule 
    { 
    private MyEventHandler _eventHandler = null; 

    public void Init(HttpApplication context) 
     { 
     context.BeginRequest += new EventHandler(OnBeginRequest); 
     } 

    public delegate void MyEventHandler(Object s, EventArgs e); 

    public event MyEventHandler MyEvent 
     { 
     add { _eventHandler += value; } 
     remove { _eventHandler -= value; } 
     } 

    public void OnBeginRequest(Object s, EventArgs e) 
     { 
     HttpApplication app = s as HttpApplication; 

     if (app.Request.CurrentExecutionFilePathExtension.EndsWith(".asp") == true && blnIsAuthenticated() == false) 
      { 
      app.Context.Response.Redirect("/Account/Login"); 
      } 

     if (_eventHandler != null) 
      { 
      _eventHandler(this, null); 
      } 
     } 

und die Boolesche (blnIsAuthenticated) -Methode, die bestimmt, ob oder nicht der Benutzer authentifiziert wurde aus einer abgeleitet wurde, Stackoverflow answer, wo ich die Linien entfernt:

var identity = new ClaimsIdentity(claims, authenticationType, ClaimTypes.Name, ClaimTypes.Role); 

var principal = new ClaimsPrincipal(identity); 

System.Threading.Thread.CurrentPrincipal = principal; 
HttpContext.Current.User = principal; 

und ersetzte dies durch meine eigenen Ansprüche, um festzustellen, ob der Benutzer authentifiziert wurde. Ein entsprechender boolescher Wert wurde zurückgegeben.