使用 spring cloud 的时候如何保证每个微服务的安全性呢?

2019-07-10 19:00:14 +08:00
 wz497345846

我是这样想的每个请求都是先到 zuul 网关,然后网关配置好了路由调用,只需要在 zuul 上做权限控制就好了;但是每个微服务还是暴露在网络中,所以每个微服务需要一个简单的验证,只需要判断是 zuul 发送过来的请求。所以我在 zuul 上加了一个 type 为 route 的 ZuulFilter 加了一个头( zuul-authorization )用来验证,每个微服务去检查这个头的内容来判断是否通过,但是现在问题又来了,当一个请求 zuul->serviceA 但是 serviceA 中又调用了 serviceB 时 ,问题来了:serviceA 可以获取 Zuul 设置的头( zuul-authorization )但是 serviceA 通过 fein 调用 ServiceB 的时候不会把 zuul-authorization 传递下去,这样 serviceB 就报没有权限了。 我这个想法是不是太绕了?不知道真实项目中是怎么解决这个问题的

4438 次点击
所在节点    Java
11 条回复
banmuyutian
2019-07-10 19:02:01 +08:00
微服务部署在内网,只对外开放网关不就好了吗
GM
2019-07-10 19:03:51 +08:00
你可以参考一下 jhipster 是怎么实现的。
hly9469
2019-07-10 19:07:22 +08:00
我们用 k8s 解决的~
ErrorMan
2019-07-10 19:23:33 +08:00
其它服务丢内网,zuul 是 API 网关暴露给外面的,其它服务不应该能被正常用户访问
wz497345846
2019-07-10 19:48:42 +08:00
@ErrorMan
@banmuyutian 现在用云服务器,搞不成内网
arrow8899
2019-07-10 19:53:08 +08:00
Service mesh
CloudnuY
2019-07-10 19:54:01 +08:00
@wz497345846 #5 防火墙加黑白名单就行
arrow8899
2019-07-10 19:57:00 +08:00
@wz497345846 云服务也有私有云啊,跟局域网是一样的
ourslay
2019-07-10 19:58:25 +08:00
没有 用 spring-security 的话。就 用 ZuulFilter 来判断 请求路径然后来检查 token 就行了。


用 spring-security 的话非常简单。加个规则就行

pathMatchers("/user/**").authenticated()。

假如:service A 在 zuul 里面映射的 path 是 /user/ 。




网关后面 service A ,service B .可以不用加鉴权,统一在网关上面鉴权一次就行了。

Feign 的话就正常调用就行了
LemonCoo1
2019-07-11 09:12:09 +08:00
如果用 springsecurity 话就上 oauth2 那一套机制,至于你说的请求头问题,用 feign 拦截器实现,具体代码自己 google
Aresxue
2019-07-12 11:12:29 +08:00
用 feign 提供的拦截器 hook 处理一下,但建议不要用 feign 调用,最好自定义一套类似 RPC 调用的脚手架,核心是用 RestTemplate 发送请求,这样对 http 连接做管理和处理都很方便

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581801

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX