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



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

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

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

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

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

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

或者,您可以在 IIS 级别配置 IP 安全性并按客户端 IP 进行筛选。

但是,如果您无法控制防火墙,则可以编写一个自定义授权属性,该属性将检查传入的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());
}

相关内容

  • 没有找到相关文章

最新更新