我有一个由客户端和服务器组成的应用程序,由互联网分隔,我控制服务器但需要验证客户端连接。客户端使用TCP连接连接到服务器,然后他们交换JSON消息。客户端不是基于浏览器的应用程序,它是在Linux服务器上运行的无头node.js应用程序。
我想对连接实施一些身份验证。我的想法是(类似于github)一个授权用户(通过一个单独的门户网站)可以将他们的ssh公钥添加到服务器端数据库,用于他们将运行客户端的linux机器,然后我想使用身份验证TCP会话建立期间的那些ssh密钥。这有意义吗?我不熟悉使用ssh密钥对进行ssh以外的应用程序的身份验证,所以我不确定如何实现它。此外,我想知道是否有一个替代的“最佳实践”或人们可能有建议为这样的应用程序实现身份验证。我想保护服务器及其资源免受非授权客户端访问。欢迎任何/所有想法
答案 0 :(得分:0)
您没有提到您的客户端是如何使用的 - 如果它们全部是自动化的,或者是否有用户手动启动应用程序 - 但从技术上讲,您的解决方案将是一个有效的(并且可能不是太罕见):您会让SSH客户端通过Internet为您的TCP通信建立隧道,并让您的应用程序连接到该隧道的本地侦听套接字端。因此,身份验证(以及隐式加密)将由SSH处理,除了连接到不同的主机(localhost)之外,您的应用程序将完全不知道它。