验证服务器之间的用户请求

时间:2017-03-10 11:57:11

标签: java authentication servlets session-state tomcat8

背景:我正在创建一个文件服务器。我在Nginx反向代理后面使用Tomcat。我有一个主服务器,主机用户界面和许多边缘服务器,我希望存储用户上传的文件并提供给他们。它是私人文件存储,因此只有文件上传者才能下载上传的文件。

问题:我通过创建会话登录到他们的帐户时对主服务器上的用户进行身份验证,并保持用户验证用户的进一步请求(常规内容)。此信息未正确提供给边缘服务器,边缘服务器将文件提供给任何请求。那不是我想要的。我想仅授权文件所有者下载。

现在,我在这里试图避免Tomcat集群,其中边缘和主服务器配置为具有会话分布的集群。网站支持SSL。当文件下载请求从已经登录(创建会话)主服务器的用户到达边缘服务器时,有没有办法验证用户的登录状态?

1 个答案:

答案 0 :(得分:1)

我看到了几种可以使用的方法

您可以使用“基于声明的身份验证”或资源访问令牌的形式。

基于声明的身份验证 - 您可以使用例如一个JWT令牌,它应包含一些必要的信息(用户ID,帐户ID,授权,到期等),并由共享密钥(主服务器和文件服务器之间)或主服务器的私钥签名。

优点是,边缘服务器可以基于散列或签名验证令牌,而无需联系主服务器。缺点是,必须有逻辑来决定用户是否有权访问所请求的资源。

请参阅:https://jwt.io/

资源访问令牌 - 这种方法用于某些云存储提供程序(AWS S3,IBM Object Storage,...) - 主站点将返回带有一些额外参数的资源URL - 例如帐户,现时,到期,签名。资源(边缘)服务器必须检查到期和签名并提供或拒绝资源

优点是,边缘服务器不关心任何身份验证,并且身份验证和授权完全在主服务器的范围内。缺点是,提供的资源URL必须具有有限的到期时间。

请参阅:http://s3-expiry.50projects.com/

注意:

  • 放置资源服务器可能无法与主服务器进行有效通信的条件,您无法检查用户是否已登录,除非使用带有SLO的SAML SSO(单点注销)或带有会话管理的OIDC