V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wz497345846
V2EX  ›  Java

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

  •  
  •   wz497345846 · 2019-07-10 19:00:14 +08:00 · 4426 次点击
    这是一个创建于 1956 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    11 条回复    2019-07-12 11:12:29 +08:00
    banmuyutian
        1
    banmuyutian  
       2019-07-10 19:02:01 +08:00
    微服务部署在内网,只对外开放网关不就好了吗
    GM
        2
    GM  
       2019-07-10 19:03:51 +08:00
    你可以参考一下 jhipster 是怎么实现的。
    hly9469
        3
    hly9469  
       2019-07-10 19:07:22 +08:00 via iPhone
    我们用 k8s 解决的~
    ErrorMan
        4
    ErrorMan  
       2019-07-10 19:23:33 +08:00
    其它服务丢内网,zuul 是 API 网关暴露给外面的,其它服务不应该能被正常用户访问
    wz497345846
        5
    wz497345846  
    OP
       2019-07-10 19:48:42 +08:00
    @ErrorMan
    @banmuyutian 现在用云服务器,搞不成内网
    arrow8899
        6
    arrow8899  
       2019-07-10 19:53:08 +08:00
    Service mesh
    CloudnuY
        7
    CloudnuY  
       2019-07-10 19:54:01 +08:00
    @wz497345846 #5 防火墙加黑白名单就行
    arrow8899
        8
    arrow8899  
       2019-07-10 19:57:00 +08:00
    @wz497345846 云服务也有私有云啊,跟局域网是一样的
    ourslay
        9
    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
        10
    LemonCoo1  
       2019-07-11 09:12:09 +08:00
    如果用 springsecurity 话就上 oauth2 那一套机制,至于你说的请求头问题,用 feign 拦截器实现,具体代码自己 google
    Aresxue
        11
    Aresxue  
       2019-07-12 11:12:29 +08:00
    用 feign 提供的拦截器 hook 处理一下,但建议不要用 feign 调用,最好自定义一套类似 RPC 调用的脚手架,核心是用 RestTemplate 发送请求,这样对 http 连接做管理和处理都很方便
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:48 · PVG 05:48 · LAX 13:48 · JFK 16:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.