我正在用 ASP.NET MVC3 开发一个具有一些简单内容管理功能的 Intranet Web 应用程序。内部网中的任何人都可以查看该网站,但只能由注册用户编辑。从 Intranet 外部,除注册用户外,任何人都不得查看该网站。
有没有办法检查是否有人以某种方式从 Intranet 外部访问该网站并将他们重定向到登录页面?这应该在 IIS 或 C# 中完成吗?我真的不知道用什么方法来解决这个问题。我仍然想使用非常方便的 [Authorize] 属性。
任何人都可以帮忙吗?非常感谢您提前。
我正在用 ASP.NET MVC3 开发一个具有一些简单内容管理功能的 Intranet Web 应用程序。内部网中的任何人都可以查看该网站,但只能由注册用户编辑。从 Intranet 外部,除注册用户外,任何人都不得查看该网站。
有没有办法检查是否有人以某种方式从 Intranet 外部访问该网站并将他们重定向到登录页面?这应该在 IIS 或 C# 中完成吗?我真的不知道用什么方法来解决这个问题。我仍然想使用非常方便的 [Authorize] 属性。
任何人都可以帮忙吗?非常感谢您提前。
您可以编写一个自定义 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]
现在用属性装饰你的控制器/动作。或者,如果您想将其应用于所有请求,只需将其注册为全局操作过滤器。
您可以简单地从防火墙设置中限制用户,并且如果您不分配任何公共 ip,无论如何它都不会被互联网用户访问。