使用OWIN授权经典ASP页面

时间:2016-04-28 09:48:45

标签: asp-classic asp.net-identity httpmodule

我有一个古老的经典ASP网站,过去常常使用Windows身份验证来进行访问控制,但这已不再合适。我想我可能会尝试将这个网站包装在一个ASP.NET MVC 5应用程序中,所以我:

  • 创建了一个包含ASP.NET身份的新网站
  • 创建了一个用户
  • 将Classic ASP网站复制到根目录
  • 浏览了经典的ASP网站

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

克里斯平

1 个答案:

答案 0 :(得分:1)

关注this example我创建了一个像这样的HttpModule:

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;

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