【问题标题】:RESTful cross authenticationRESTful 交叉认证
【发布时间】:2011-08-26 21:01:24
【问题描述】:

我在 JAX-RS (Jersey) 中实现了 2 个 RESTful 服务:“A”和“B”。它们部署在单独的应用服务器上。 “A”和“B”都是我的。

  1. 客户端连接并登录“A”服务;
  2. 客户端向“A”请求资源,例如:https://blabla1/services/myresources;
  3. 对于检索资源“myresources”,服务“A”应向(而不是重定向)服务“B”请求其他​​资源,例如:https://blabla2/services/anotherresources

服务“B”也需要验证,这就是问题所在。是否有可能,服务“A”用客户端身份验证参数询问“B”,它是如何工作的?

我想 oauth 库可以,但我找不到任何示例(接近我的问题)和操作方法。

谢谢

【问题讨论】:

  • 如果您同时拥有服务“A”和服务“B”,那么您是否可以只拥有一个私有 RESTful 服务,允许“A”调用“B”而无需进行身份验证?由于“A”进行了身份验证,因此从用户安全的角度来看应该没问题。并且您可以保护私有服务以确保没有其他人可以调用它。
  • 我如何保护私有服务以确保没有其他人可以调用它?
  • 我通常使用的只有“A”和“B”服务知道的数字证书。您是否有一个“A”和“B”都可以访问但不对外开放的内部网络?如果是这样,您可以阻止来自任何外部网络的服务。
  • 否,“A”和“B”仅通过 Internet 连接
  • 然后我会打电话给 B 被拒绝没有正确的数字证书。

标签: rest oauth java-ee-6 jax-rs restful-authentication


【解决方案1】:

简单总结一下 cmets 中列出的解决方案:

服务“B”(或它前面的代理)应该只接受带有服务器“A”证书的 HTTPS 请求。 (服务器“A”也可以验证服务器“B”的证书以避免中间人攻击。)

那么用户名可以是纯文本请求参数。

如果您的网络人员比服务器人员更好或发现 SSL 令人生畏,请让网络人员在您的站点之间建立一个安全隧道(形成 VPN),并让服务“B”在隧道之外的原始互联网上不可用。

【讨论】:

  • 除了 SSL 之外,还可以考虑在两侧添加防火墙规则以保护通道。让外界甚至知道那里有一扇门让他们尝试是没有意义的。
猜你喜欢
  • 2011-12-30
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2011-04-05
  • 2011-04-01
  • 2015-11-05
  • 2013-08-08
相关资源
最近更新 更多