我对Web API、HTTP和一般的安全性都很陌生,但我只想知道这是否可能:当HTTP请求来自局域网内部时,控制器可以放松安全性要求。
我的特定应用程序对防火墙内部的客户端的安全性要求很低。例如,我希望内部客户端应用程序能够对标记为[AllowAnonymous]的控制器操作发出请求,这样它们就不需要处理OAuth等等(对于我的内部使用场景来说,这似乎完全是过分的)。
但是,如果公共Internet可以使用相同的控制器操作,那么当然应该适用严格的安全要求。
安全性是否可以根据来源进行不同的处理?或者是同时公开public-facing和Internal API的标准实践。
发布于 2016-06-23 05:29:36
当您在控制器或操作上使用[AllowAnonymous]属性时,您告诉ASP.NET它根本不应该检查用户的身份。对于来自互联网的用户来说,这不是你想要的。
您可以从控制器中删除[Authorize]属性,并在操作中手动检查,如果用户是通过以下方式进行身份验证的:
if (User.Identity.IsAuthenticated || IsLocalUser())
{
// action implementation
}您可以在自定义授权属性中实现此检查。
这仍然让您负责确定用户是本地用户还是来自internet的用户。当然,你可以检查客户的IP地址来确定这一点。
另一种选择是,如果本地用户是Active域的一部分,则同时启用Windows身份验证和承载方案身份验证。来自intranet的用户可以使用Windows身份验证与服务对话,而internet用户则需要携带JWT令牌。只有当来自互联网的用户的客户端应用程序与本地用户的应用程序不同时,这才能起作用。免责声明:我从未尝试过最后一种选择。
发布于 2016-06-24 04:27:35
从“防火墙内部”将请求识别为请求并不总是像调查IP地址那样简单。尽管现在这可能对您有用,但在不影响应用程序逻辑的情况下,可能会使移动环境或修改环境变得困难。
我建议开发一个简单的中间层应用程序,它只需使用足够的授权数据调用主应用程序,以便在与常规应用程序相同的上下文中处理安全性,但是这个中间层本身不会被授权。然后,你只需要确保这个应用程序不能被防火墙外的用户访问。
https://stackoverflow.com/questions/37596274
复制相似问题