1

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

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

任何人都可以帮忙吗?非常感谢您提前。

4

2 回答 2

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]现在用属性装饰你的控制器/动作。或者,如果您想将其应用于所有请求,只需将其注册为全局操作过滤器。

于 2012-10-16T16:39:53.363 回答
0

您可以简单地从防火墙设置中限制用户,并且如果您不分配任何公共 ip,无论如何它都不会被互联网用户访问。

于 2012-10-16T12:48:45.903 回答