spring cloud如何只提供内部服务接口

http只是协议,你说的这个应该是从网络层面上去解决的。


举个简单的例子吧:

你家没有通网,我搬了三台电脑到你家里搭建了一个局域网。你把Eureka部署到一台电脑上,把系统A和B分别部署到另外两台电脑上。这时候服务正常注册发现,A系统能够正常调用B系统的服务i,服务调用使用的是http协议。

但是,由于你家没通网,外人根本不能调用你的服务i。这就相当于只是提供了内部服务的接口,只有在你家的局域网中才能进行调用。


这时候,装外网的师傅来了,给你的电脑们通上了外网。为了不让网上的一些捣蛋鬼乱搞你的系统,你把防火墙配置打开了,你的服务终于不能通过之前外网ip加端口访问了。


邻居过了一会给你打来电话:“听说你家通网了,你写的微服务代码惊奇,给你100块钱,我想调用一下”。你稍加思索,觉得生意划得来,准备和他交易一波。


但是转念一想,把服务i的API直接暴露给隔壁这个小伙伴好像不太好,万一到时候他又要系统A的服务j呢?那不是什么都暴露了,也不方便管理。于是,你又搬来一台电脑,部署了一个网关服务,统一了API,并开放了其调用端口。


至此,邻居已经能够通过网关服务的外网IP加端口间接调用你B系统的服务i了。

你感觉什么不对劲:这个开放的网关接口调用地址,才是真正把你的服务暴露在互联网上了!

邻居只要把这个网关接口地址一公布,不就谁都可以调用了吗?!


至此你有了两个选择:

1.如果只有很少的人允许调用

配置防火墙,把允许调用的ip放进白名单。不允许调用的人网络都不可达,当然就没法调用了。


2.如果这个接口必须开放到互联网

那就在网关服务中加身份权限校验。谁都可以调用,但是你必须要拿出你的调用凭据,不然返你个权限不足。


写在最后:

一般架构中一个系统的各个服务都部署同一个或者相近局域网,由网关服务提供对外的API,那么网关服务的身份权限校验就必不可少了。


个人理解,欢迎指正
作者:VayCi
链接:https://www.zhihu.com/question/276691331/answer/389144785

转载请注明来源:大尾巴狼博客/文章链接: 百度未收录
正文到此结束
吐槽0发
提交评论