【发布时间】:2020-09-11 02:44:33
【问题描述】:
背景:我正在创建一个文件服务器。我在 Nginx 反向代理后面使用 Tomcat。我有一个托管 UI 的主服务器和许多边缘服务器,我希望在其中存储用户上传的文件并返回它们。这是一个私有文件存储,因此只有文件上传者才能下载他们上传的文件。
问题:当用户登录到他们的帐户时,我通过创建会话在主服务器上对用户进行身份验证,并保留它以验证来自用户的进一步请求(常规内容)。此信息不分配给边缘服务器,边缘服务器为任何请求提供文件。那不是我想要的。我只想授权文件所有者下载。
现在,在这里我试图避免 Tomcat 集群,其中边缘和主服务器配置为具有分布式会话的集群。网站支持 SSL。当文件下载请求从已经登录(创建会话)主服务器的用户到达边缘服务器时,有没有办法验证用户的登录状态?
【问题讨论】:
-
您的信任边界在哪里?您从 main 到 edge 的请求能否仅包含 userId 并且 edge 可以在返回文件之前对其进行验证,或者在不允许给定用户时返回 401 Unauthorized?或者您是否必须使用户文件尽可能安全,即使对有权访问服务器的人(管理员、操作员、员工等)也是如此?
-
介于两者之间。 userId 太弱了,有人可以猜到。不允许管理员访问文件将需要使用只有文件所有者知道的密钥加密整个文件并在客户端浏览器上解密。我想要它阻止某些人(除了所有者)使用直接喜欢文件的方式通过 Internet 下载它。
-
你需要以某种方式让边缘服务器安全事务感知...一个带有主服务器私钥加密的会话到期时间的cookie;然后边缘服务器将使用 main 的公钥解密 cookie。
标签: java authentication servlets session-state tomcat8