当请求来自防火墙内部时,ASP.NET Web API可以区别对待安全性吗?

时间:2016-06-02 15:35:15

标签: security asp.net-web-api

我是Web APIHTTP的新手和一般的安全性,但我只是想知道这是否可行:让控制器在HTTP请求时放宽安全要求起源于局域网内。

我的特定应用程序对防火墙内的客户端的安全性要求非常低。例如,我希望内部客户端应用程序能够发出标记为[AllowAnonymous]的控制器操作的请求,这样他们就不需要处理OAuth等等(这对我来说似乎完全有点过头了)内部使用场景)。

但是,如果公共互联网可以使用相同的控制器操作,那么当然应该采用严格的安全要求。

可以根据来源不同地处理安全性吗?或者是公开public-facingInternal API

的标准做法

2 个答案:

答案 0 :(得分:3)

当您在控制器或操作上使用[AllowAnonymous]属性时,您告诉ASP.NET它根本不应检查用户的身份。这不是您想要来自互联网的用户。

如果用户使用以下身份进行身份验证,您可以从控制器中删除[Authorize]属性并手动检查操作内部:

if (User.Identity.IsAuthenticated || IsLocalUser())
{
    // action implementation
}

您可以在custom authorization attribute

中实施此项检查

这仍然使您无需确定用户是本地用户还是来自互联网。您可以检查客户端IP地址以确定这一点。

如果您的本地用户是Active Directory域的一部分,则另一个选项是启用Windows authentication和承载方案身份验证。 Intranet中的用户可以使用Windows身份验证与服务进行通信,而Internet用户需要使用JWT令牌。这仅适用于来自互联网的用户的客户端应用程序与本地用户不同的用户应用程序。 免责声明:我从未尝试过最后一个选项。

答案 1 :(得分:1)

将请求标识为“防火墙内部”并不总是像调查IP地址一样简单。虽然现在可能对您有用,但在不影响应用程序逻辑的情况下,移动环境或修改环境可能会很困难。

我建议开发一个简单的中间层应用程序,它只需要使用足够的授权数据调用主应用程序来处理与常规应用程序相同的上下文中的安全性,但是这个中间层本身不会被授权。然后,您只需确保防火墙外的用户无法访问此应用程序。