2016-04-28 101 views
1

我有一个古老的经典ASP网站,它曾经使用Windows身份验证进行访问控制,但这不再合适。我想我可能会尝试在ASP.NET MVC应用5包这个网站,所以我:使用OWIN授权经典ASP页面

  • 创建了一个新的网站完成与ASP.NET身份
  • 创建了一个用户
  • 复制的经典ASP网站入根
  • 观看经典ASP网站

现在我需要做的是要求对所有的.asp页的授权,以便只有授权的用户才能看到它们。这样做的最好方法是什么?也许我可以用OWIN做点什么?

克里斯宾

回答

1

this example我创建的出来像这样的HTTP模块:

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); 
      } 
     } 

和布尔(blnIsAuthenticated),其确定用户是否被认证是从衍生方法Stackoverflow answer其中我删除了行:

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

var principal = new ClaimsPrincipal(identity); 

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

并将其替换为我自己的声明检查以确定用户是否已通过身份验证。返回了一个合适的布尔值。