Java 在本地微服务之间交换纯文本密码是一种良好的编程实践吗?

Java 在本地微服务之间交换纯文本密码是一种良好的编程实践吗?,java,security,microservices,clean-architecture,Java,Security,Microservices,Clean Architecture,我有两个微型服务。Microservice A向Microservice B发送请求,要求在系统中注册用户,请求中包含纯文本密码。这些服务之间的数据交换是基于HTTP的 这些微服务之间的连接纯粹是本地的,因此基本上我不应该担心密码泄漏,但即使在两个本地微服务之间也不编码密码真的是一种好的编程实践吗?如前所述,您至少应该使用https对服务之间的数据流进行编码 此外,最好看看JWT(JSONWebToken)或类似的常用技术来保护服务。使用JWT,您不需要交换总是不安全的密码(想想网络嗅探器)。规

我有两个微型服务。Microservice A向Microservice B发送请求,要求在系统中注册用户,请求中包含纯文本密码。这些服务之间的数据交换是基于HTTP的


这些微服务之间的连接纯粹是本地的,因此基本上我不应该担心密码泄漏,但即使在两个本地微服务之间也不编码密码真的是一种好的编程实践吗?

如前所述,您至少应该使用https对服务之间的数据流进行编码


此外,最好看看JWT(JSONWebToken)或类似的常用技术来保护服务。使用JWT,您不需要交换总是不安全的密码(想想网络嗅探器)。

规则是,敏感信息永远不应该通过不安全的连接以明文形式交换。如果您处于完全封闭的环境中,通常是同一主机中的两个服务,则加密并不重要。但是,如果应用程序被拆分为多个服务,那么这些服务以后可能会托管在距离较远的地方,并且它们之间的网络不太安全

在这种情况下,一种简单的方法是使用SSL保护整个连接。HTTPS对于现在的服务器来说不再是一个太重的负载,因此它是加密客户端和服务器之间的所有内容的一种简单方法

很好的一点是,通过代理和反向代理,可以很容易地保护两个java服务之间的通信,而不让服务本身看到。因此,如果出于任何原因,您无法在微服务内部直接处理HTTPS,那么您可以始终依靠Apache或nginx(反向)代理来加密微服务之间的通信,以防以后使用不安全的网络。顺便说一句,在Java servlet上使用HTTPS是一种常见的方式:servlet托管在Tomcat(或任何其他servlet容器)中,隐藏在处理HTTPS部分的Apache httpd服务器(或任何其他反向代理)后面,并且可选地可以服务于静态内容。

您可以使用

  • Base-64编码密码(非加密/哈希),用于在两个服务之间传输非敏感信息的密码
  • 建议在有线传输中使用SSL/TSL over HTTPS协议
  • 尝试使用令牌,而不是传递计划文本密码。(示例:传递JWT令牌并在其他服务中验证)[快速读取:https://stormpath.com/blog/microservices-jwt-spring-boot]

  • 希望这会有所帮助。

    您至少应该使用https。此外,服务不应该对其运行环境做太多假设。连接现在可能是本地的,但将来不会。我不知道是否有明文密码被视为一种好的做法。你能添加一些上下文吗?我想你的微服务没有命名为A和B。。。为什么要接收纯文本密码?是大门吗?B是用户注册表还是IdP?对不起,2票反对!!但是,我在这一页上找不到更好的答案:)