没有用户名/密码的身份验证?

use*_*800 5 php authentication

我们正在构建一个 PHP 多租户应用程序。每个公司的帐户都将在他们自己的子域 abcorp.example.com 上运行。该应用程序允许公司编写和发布内容(常见问题等)供其客户阅读。

他们会告诉他们的客户访问:abcorp.example.com/ 阅读内容。或者他们会在他们的安全 Web 应用程序中放置一个指向该 URL 的链接。

然而,这些公司可能不希望任何人通过访问 abcorp.example.com/ 来阅读内容

所以,我的问题是有什么方法可以提供一些基本的身份验证而无需进入用户名和密码身份验证。我正在考虑添加到超链接或类似的某种隐藏标记

我的目标:

  1. 如果用户直接在浏览器中输入 abcorp.example.com/,他们将无法看到网页,因为他们没有进行身份验证或传递令牌。

  2. 避免使用用户名和密码

另一种选择是引用 URL 身份验证

cod*_*ake -2

您可以使用基本散列,将共享秘密密码或“密钥”存储在您的系统和每个公司系统上(每个公司有不同的密钥,并且不公开发布),然后使用链接中的子域对秘密密码进行散列,并包括摘要作为参数。然后,您可以通过运行相同的算法来验证它并与摘要进行比较。

该链接可能看起来像

abc.example.com/?d=b5939ca22f5dcf345b4000641995478c5910dbd1607b1bdadcbf4a8618a95211

其中摘要是:

$d = hash('sha256', $secret_password.$subdomain);
Run Code Online (Sandbox Code Playgroud)

或包括引用者:

$d = hash('sha256', ($secret_password.$subdomain.$_SERVER['HTTP_REFERER']));

需要克服的障碍是确保每个公司都可以根据公司特定的密钥/算法支持这些链接的正确生成 - 并且每个公司的密钥/算法都是不同的,因此一个公司无法为另一家公司生成链接。

这比没有身份验证或根本没有验证的公共共享令牌好,但我确信它仍然存在漏洞。