【问题标题】:Public Facing Web Service Security - Internal Requests面向公众的 Web 服务安全性 - 内部请求
【发布时间】:2013-07-18 02:52:17
【问题描述】:

我有一个面向公众的 Web 服务,它具有基于令牌的安全系统。登录是通过提供用户名和密码来完成的,并且会返回一个唯一的令牌,无论何时调用该服务都会继续使用该令牌。

我的问题是:是否有一种安全的方法来区分来自内部网络外部的呼叫和来自内部网络的呼叫?我想为从我们内部网络中调用服务的客户提供提升的特权。具体来说,我们有一个网站与我们的 Web 服务在同一网络上运行,我想在调用我们的服务时赋予该网站更高的权限。

当 Web 服务面向公众时,是否有安全的方法来执行此操作?我不希望发生的是我们内部网络之外的人以某种方式获得提升的权限。

这些服务是使用 Java 和 CXF 框架实现的。

【问题讨论】:

    标签: security service web internal


    【解决方案1】:

    绝对有可能,我建议这样做。

    在您的应用程序和外部客户端之间有一个反向代理。此反向代理将对令牌进行身份验证,并在请求标头中设置所需的权限。

    可以通过以下方法提升内部客户端的权限

    1. 在反向代理上的请求中设置身份验证标头。如果此标头设置为 true,则表明调用来自外部客户端。应用可以根据这个标头决定是否需要授权。内部客户端无需经过任何身份验证/授权即可调用此服务。请注意,这将完全消除内部客户端的任何身份验证。

    2. 在 RP 上有规则,可以根据调用者的 IP 设置包含提升权限的附加标头。可以将内部客户端 IP 设置为适用的列表。

    3. 有两个端点用于内部和外部客户端,它们都具有反向代理。内部会在请求标头中设置提升的权限。

    【讨论】:

    • 谢谢,我认为某种代理可能是解决方案;最好让第二个人验证它。我想我可能会将您的答案与 aet 的答案结合起来,并同时保护代理、ip 过滤和 api 密钥。这样,如果有人不小心删除了代理的保护,那么它就不会完全开放,因为其他保护层仍然处于活动状态。无论如何,我已经在我的 Web 服务中内置了一个 api 密钥,因此实现它不需要额外的工作。只是不想自己依赖 api 密钥......
    【解决方案2】:

    您有选择,我可以立即想到至少 2 种方法。 1) 还需要一个 API 密钥来访问您的 Web 服务,并在特殊情况下根据其密钥提供对网站的访问。 2) 根据请求者(网站或内部网络)的 IP 地址提升权限。

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2020-11-23
      相关资源
      最近更新 更多