【发布时间】:2018-02-20 13:10:21
【问题描述】:
我正在研究微服务架构,但我在这方面面临一些挑战。
首先让我简要介绍一下架构。
用户登录并获得一个签名令牌,该令牌将用于调用所有 REST API。
会有很多 API 服务器使用 Spring 安全性保护 API 并根据用户角色进行授权。
服务必须相互交互才能获取/更新信息。
每个服务都有权验证身份验证服务器发出的令牌。
问题:-
-
如果用户登录并且使用相同的令牌并将其传递给经过验证的每个服务,则一切正常。因此,在传递令牌时服务不需要相互信任。
李> 现在,问题是有些服务需要在不登录的情况下从服务器本身调用。假设是服务器到服务器调用。服务将如何验证和授权来自其他服务的调用。
我读到了 spring 微服务,但 Zuul 也不是这里的救星,因为每个 API 服务器都嵌入了 spring 安全性,而不仅仅是 API 网关。
一种解决方案可以是每个服务都有自己的具有特定角色的默认用户,用于登录->获取令牌->使用令牌调用其他服务器 api。
您能否在服务器中给我一些指向服务器调用的指针,其中每个服务器都使用 Spring Security 进行身份验证和授权。
谢谢。
【问题讨论】:
-
不要保护这些服务,或者允许从某个 IP 地址访问所有人。只需编写正确的安全规则即可。
-
@M.Deinum... 这些服务需要受到保护,因为它们将被外部客户端以及手机/REST 调用。
-
正如我提到的,只需编写适当的安全规则,如果内部(或特定 IP 范围)允许访问,则需要令牌。所以这一切都归结为适当的安全规则,而不是试图解决它。
-
我建议根本不允许微服务使用同步通信(在微服务之间,UI/客户端可以使用 api)(使用消息传递和 pub/sub 代替)。
-
@mav3n 你能在内部信任你的服务吗?如果是,则无需添加任何安全过滤器,否则您需要将生成的某种令牌传递给下游服务,该服务将再次进行身份验证并形成身份验证主体。
标签: java spring microservices spring-cloud-netflix