从Intranet外部访问网站时显示登录页面

时间:2012-10-16 08:46:19

标签: c# asp.net-mvc-3 iis asp.net-membership

我正在使用一些简单的内容管理功能在ASP.NET MVC3中开发一个Intranet Web应用程序。该网站可由Intranet内的任何人查看,但仅由注册用户编辑。从Intranet外部,除注册用户外,任何人都不能查看该网站。

有没有办法检查某人是否以某种方式从内部网外访问该网站并将其重定向到登录页面?这应该在IIS或C#中完成吗?我真的不知道哪种方法可以解决这个问题。我仍然想使用非常方便的[授权]属性。

有人可以帮忙吗?非常感谢你提前。

2 个答案:

答案 0 :(得分:2)

您可以编写自定义Authorize属性,该属性将检查客户端IP地址是否属于本地Intranet并允许匿名访问,否则需要进行身份验证:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var ip = httpContext.Request.UserHostAddress;
        if (IsIntranetAddress(ip))
        {
            // The IP address of the client belongs on the intranet => 
            // allow anonymous access
            return true;
        }

        return base.AuthorizeCore(httpContext);
    }

    private bool IsIntranetAddress(string ip)
    {
        throw new NotImplementedException();
    }
}

现在使用[MyAuthorize]属性装饰您的控制器/操作。或者,如果要将其应用于所有请求,只需将其注册为全局操作过滤器即可。

答案 1 :(得分:0)

您可以简单地限制用户使用防火墙设置,如果您没有分配任何公共IP,则无论如何都不会被互联网用户访问。