如何限制网络用户只能下载他们的报告[已关闭]

问题描述 投票:0回答:1

我们有一个在 Apache 上运行的 Linux 网站,拥有数千名用户,每个用户都应该能够下载存储在专门为其公司提供的文件夹中的报告。有数百家公司。例如,如果用户 David 在 Acme 公司工作,David 应该能够下载此文件夹中存储的所有文件:

https://www.example.com/customer_files/acme

示例文件可能是:

https://www.example.com/customer_files/acme/monthly_report.txt

不幸的是,按照目前的运作方式,任何知道该 URL 的人都可以访问月度报告,无需登录。该网址是开放的。该网站是用 Perl 编写的。如何限制特定用户(即 Acme 公司的员工)对该文件夹的访问?每个公司可能有数百个用户。

非常感谢,大卫。

linux download
1个回答
0
投票

那么基本上,用户身份验证和授权?这是博士论文的主题,因此无法在一篇文章中全面回答。我将尽力为您提供高级概述 - 这意味着为您提供一些关键字和指示,但您肯定需要做进一步的研究。


这里面有三大功能:

  1. 身份提供商(又名身份验证器、SSO 服务器)
  2. 授权网关
  3. 受保护的服务

身份提供者验证用户的身份(即登录信息)及其允许的范围(即允许用户访问的资源);授权网关根据身份提供商的响应允许或拒绝访问;受保护的服务服务于实际资源。


在最简单的情况下,所有三个功能都可以由单一服务处理。您的单一后端将有一个用户数据库及其范围;当用户请求资源时,服务器会查找用户是否有权限,并做出相应的响应。

如果存储公司员工数据的数据库由您的 Perl 服务管理,并且您能够并且愿意对 Perl 代码进行更改,那么这可能是最容易实现的。但它的缺点是互操作性和可扩展性较差,更不用说你会重新发明很多轮子。

另一种方法是为这三个功能中的每一个使用现有的(和单独的)组件。 请注意,如果您在企业环境中执行此操作,则您的公司可能已经拥有这些基础设施。如果它们存在,请尝试与它们集成。 如果不存在,我建议研究以下软件堆栈:

  1. 对于您的身份提供商,Keycloak是常见的选择。或者,任何支持 OAuth 2(现代授权协议)的东西都可以。
  2. 授权网关通常是通过服务器框架或保留代理中的插件或模块来完成的。您提到了 Apache,所以可能类似于 mod_oauth2
  3. 受保护的服务是您现有的 Perl 服务器,未经修改。

归根结底,最好的前进方式实际上取决于您的具体情况以及您希望实现的目标和程度。我没有足够的信息,也无法为你做出决定。但希望我已经为您指明了正确的方向。

© www.soinside.com 2019 - 2024. All rights reserved.