ASP.NET:需要基于网络掩码的登录

时间:2009-12-22 10:06:46

标签: asp.net security login httpmodule

我需要保护对.NET webapp中所有页面的访问权限 - 来自:

的EXCEPT请求
  • 本地网络(网络IIS正在运行)
  • 列出的IP /数据库中列出的网络掩码

应将所有其他requesets重定向到登录表单

我正在考虑HttpModule的方向 - 但从未写过一个。 任何人都可以提出任何想法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

我宁愿构建一个全局身份验证方法来检查ip。在MasterPage的OnInit或OnLoad中调用此函数或您自己的System.Web.Page实现应该可以解决这个问题。

如果用户必须登录,请在会话中设置一些随机生成的ID以进行检查(将随机ID保存到数据库和会话中)。在您的全局身份验证方法中,您现在可以检查有效的ip范围或有效的(数据库注册的)会话令牌。

答案 1 :(得分:0)

使用HttpModule是最好的方法。您可以在页面执行之前使用它来捕获任何请求,并在需要时重定向到登录表单。

public class SecurityModule : IHttpModule
{
    private HttpApplication m_HttpApplication;

    public void Init(HttpApplication context)
    {
        m_HttpApplication = context;
        m_HttpApplication.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);
    }

    public void Dispose()
    {
        // Do Nothing
    }

    private void OnPreRequestHandlerExecute(object sender, EventArgs e)
    {
        // Get IP address
        string ipAddress = m_HttpApplication.Context.Request.UserHostAddress;

        // Check if the IP address requires login
        bool requiresLogin = ValidateIpAddress(ipAddress);

        // Redirect if required
        if (requiresLogin)
            Response.Redirect("~/Login.aspx", true);
        }

        private bool ValidateIpAddress(string ipAddress)
        {
            // This method would check that the IP address is from the local
            // network or in the database and return true or false accordingly.

            return false;
        }
    }

您还需要修改web.config并添加对模块的引用:

<httpModules>
    <add name="SecurityModule" type="MyApp.SecurityModule, MyApp"/>
</httpModules>

此代码还需要进行一些修改,以确保登录的用户不会重定向回登录页面,但它应足以让您入门。

答案 2 :(得分:0)

以下是基于正则表达式的自定义授权模块: http://code.google.com/p/talifun-web/wiki/RegexUrlAuthorizationModule

应该很容易重构你的需求。