ASP.NET MVC - 允许内部匿名用户,需要在外部进行Windows身份验证

时间:2012-10-09 15:10:48

标签: asp.net-mvc authentication

是否可以根据请求区域设置授权?基本上它是一个内联网类型的应用程序,只有很少的敏感信息。

如果请求是从组织内部执行的,那么允许匿名用户就可以了。

但是,如果是外部请求,他们应该获得401授权质询。 外部请求来自单个防火墙,因此IP / IP范围应该可以指定它是外部还是内部请求。

目前,它已在web.config文件中配置为Windows身份验证。

<authentication mode="Windows" />
<authorization>
  <deny users="?" />
</authorization>

1 个答案:

答案 0 :(得分:1)

直接在防火墙上处理此规则会更容易。

作为替代方案,您可以在IIS级别配置IP Security并按客户端IP进行过滤。

但是如果您无法控制防火墙,您可以编写一个自定义Authorize属性来检查传入的IP地址并允许/拒绝该请求:

public class IpBasedAuthorizeAttribute: AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var ip = httpContext.Request.UserHostAddress;
        return IsAllowed(ip);
    }

    private bool IsAllowed(string ip)
    {
        // TODO: do your checks here and return true or false
        // depending on whether the IP address is allowed to 
        // access the application or not
        throw new NotImplementedException();
    }
}

然后您可以使用此属性修饰单个控制器/操作,或者如果您希望将其应用于所有请求,则将其注册为全局授权属性:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new IpBasedAuthorizeAttribute());
}