[英]Authentication without username/password?
我們正在構建一個 PHP 多租戶應用程序。 每個公司的帳戶都將在他們自己的子域 abcorp.example.com 上運行。 該應用程序允許公司編寫和發布內容(常見問題等)供其客戶閱讀。
他們會告訴他們的客戶訪問:abcorp.example.com/ 閱讀內容。 或者他們會在他們的安全 Web 應用程序中放置一個指向該 URL 的鏈接。
然而,這些公司可能不希望任何人通過訪問 abcorp.example.com/ 來閱讀內容
所以,我的問題是有什么方法可以提供一些基本的身份驗證而無需進入用戶名和密碼身份驗證。 我正在考慮添加到超鏈接或類似的某種隱藏標記
我的目標:
如果用戶直接在瀏覽器中輸入 abcorp.example.com/,他們將無法看到網頁,因為他們沒有進行身份驗證或傳遞令牌。
避免使用用戶名和密碼
另一種選擇是引用 URL 身份驗證
當然,如果有人將令牌公開,它將向找到它的人開放。
我想每個公司都可以使用共享令牌鏈接到他們的頁面,例如:
abccorp.example.com/?t=4rrfwr23rwads3
每個令牌都可以存儲在文件或數據庫中。
當有人請求一個頁面時,它會用存儲在服務器上的值來檢查 $_GET['t'] 的值。 如果匹配,則加載頁面的其余部分。 當然,這個變量必須貫穿整個站點,並包含在每個鏈接中。
同樣,這不會很安全。 公開的令牌可以讓全世界都可以訪問該站點。
您還可以使用客戶端 IP 地址作為令牌,讓不同的 IP 地址訪問系統的不同(部分/實例)。 但是增益,這不是很安全,因為
您可以使用基本散列,將共享的秘密密碼或“密鑰”存儲在您的系統和每個公司系統上(每個公司的不同密鑰且未公開發布),然后您使用鏈接中的子域散列秘密密碼和包括摘要作為參數。 然后您通過在您身邊運行相同的算法並與摘要進行比較來驗證它。
鏈接可能看起來像
abc.example.com/?d=b5939ca22f5dcf345b4000641995478c5910dbd1607b1bdadcbf4a8618a95211
其中摘要是:
$d = hash('sha256', $secret_password.$subdomain);
或包括推薦人:
$d = hash('sha256', ($secret_password.$subdomain.$_SERVER['HTTP_REFERER']));
克服的障礙是確保每個公司都可以根據公司特定的密鑰/算法支持正確生成這些鏈接 - 並且每個公司都不同,因此一家公司無法為另一家公司生成鏈接。
這比沒有身份驗證或根本未經驗證的公共共享令牌要好,但我確信它仍然存在漏洞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.