如何连接单独的微服务应用程序?

时间:2015-02-04 10:40:39

标签: api security rest http microservices

我正在使用微服务架构构建庞大的应用程序。该应用程序将包含多个后端微服务(部署在多个云实例上),其中一些我想使用rest apis连接以便在它们之间传递数据。

该应用程序还将公开第三方的公共API,但上述端点应仅限于同一应用程序中创建某种专用网络的其他微服务。

所以,我的问题是:

如何在同一个应用程序中实现对其他微服务的限制api访问?

如果有更好的方法来连接微服务而不是使用http传输层,请提及它们。

如果可能,请保持答案服务器/语言不可知。

感谢。

6 个答案:

答案 0 :(得分:3)

很容易。微服务的每个客户端都有一个API密钥。 Micro服务仅接受来自具有有效API密钥的客户端的请求。

此外,很高兴知道REST只是一种允许有界上下文之间进行通信的协议。

它不必通过HTTP。要求是它具有统一的接口(这就是HTTP与其PUT,POST,GET,DELETE ......方法一起使用的原因)并且它是无状态的(所有状态都通过URI传输)。

因此,如果您的所有微服务都在同一个盒子上运行,那么您需要做的就是这样:

class SomeClass implements RestfulMethods {

    public function get(params){ // return something}
    public function post(params){ // add something}
    public function put(params){ // update something}
    public function delete(params){ // delete something}
}

然后通过与其他服务的RestfulMethod实现交互来传达微服务。

但是如果您的微服务器位于不同的机器上,那么最好使用HTTP作为传输机制。

答案 1 :(得分:1)

一种方法是使用HTTPS进行内部MS通信。将访问权限(使用信任存储区)锁定为仅限您的服务。您可以在服务之间共享证书以进行后端通信。优选地,通配符证书。然后它应该工作,只要您的服务可以被解决到同一个域。喜欢* .yourcompany.com。

一旦完成所有工作,它应该可以正常工作。 HTTPS会话确实意味着一些开销,但这主要是在握手过程中。在会话中使用keep-alive,加密通道不应该有很多开销。

当然,您也可以简单地向http标头添加一些凭据。那将不太安全。

答案 2 :(得分:1)

RestAPI不仅是这样做的方式,我看来的一些想法是关于使用 Service Registry 链接Eureka(Netflix),Zookeeper( Apache)和其他人。

以下是一个例子:

答案 3 :(得分:1)

  

......上述端点应仅限于其他端点   同一个应用程序中的微服务......

您在广义上谈论的是授权。

授权是指您的申请中向真实用户授予或拒绝“权力”或“能力”。

因此,任何授权机制的工作都是验证任何入站API请求中隐含的“声明” - 允许用户执行请求中编码的事物。

作为一个例子,想象一下我在你的API上出现了对Widget 1234的PUT请求:

PUT /widgetservice/widget/1234 HTTP/1.1

这可以解释为我(Bob Smith,一位已知用户)声称我可以更改系统中ID为1234的小部件。

无论您如何验证此声明,我希望您可以看到这需要在应用程序级别完成,而不是在API级别完成。事实上,授权是一个应用程序级别的问题,而不是API级别的问题(与身份验证不同, 非常关注API级别)。

为了演示,在我们上面的示例中,理论上我可以创建一个新的窗口小部件,但不能更新现有的窗口小部件:

POST /widgetservice/widget/1234 HTTP/1.1

甚至我只允许更新小部件1234并且不允许更改其他小部件的请求

PUT /widgetservice/widget/5678 HTTP/1.1
  

如何实现对其他微服务的受限api访问   在同一个申请中?

因此,这成为一个关于如何在应用程序中构建授权的问题,以便您可以验证来自已知用户的个别请求(在您的情况下,您的生态系统中的其他服务只是另一种已知用户)。

嗯,道歉,但我会在这里开具规定,您可以使用基于声明的授权服务,该服务根据用户身份或角色成员资格存储有效声明。

这在很大程度上取决于您如何处理身份验证,以及您是否支持角色作为该流程的一部分。您可以存储针对个人用户的声明,但随着用户数量的增加,这变得非常艰巨。 OAuth尽管实施起来非常繁重,但却是一个领先的平台。

  

我正在使用微服务架构构建庞大的应用程序

我在这里唯一要说的是先阅读this

答案 4 :(得分:0)

最简单的方法是仅启用从运行微服务的IP地址进行访问。

答案 5 :(得分:0)

我知道我对这个问题迟到了:)),但是对于任何遇到此线程的人来说,Kafka是类似于该问题的操作的绝佳选择。

基于Kafka自己的介绍

Kafka通常用于两大类应用程序:

  1. 建立实时流数据管道,以可靠地获取系统或应用程序之间的数据
  2. 构建实时流应用程序,以转换或响应数据流

侧面说明:Kafka由LinkedIn创建,并已在许多大型公司中使用,因此经过了实战测试。