問題描述
我的網站需要與第三方軟件集成,該軟件將由軟件公司主辦的自己的 sub-domain 。我需要向第三方開發人員提供一個端點,以便讓我的站點的用户訪問 sub-domain 。
另一個網站需要通過某種 API 對我的網站進行身份驗證。
我不知道從哪裏開始,但我的意思是這個人比我聰明得多。提前致謝!
最佳解決方案
Cross-site 腳本問題
您無法在域之間傳輸 WP 驗證 Cookie 。您也不想存儲明文密碼以編程方式登錄到其他 WP 安裝。因此,您必須讓用户登錄到 WordPress,然後通過 API 從 third-party 站點訪問其登錄狀態。這讓 WordPress 處理所有的身份驗證。這是非常安全的,因為用户將不得不身體登錄到 WP 端,以便 API 端點將數據提供給 third-party 。
創建 API 端點
看看這篇文章我剛才在這裏寫:http://coderrr.com/create-an-api-endpoint-in-wordpress/
此外,您可以在此處看到代碼演示:https://gist.github.com/2982319
您必須找出自己的應用程序需求的邏輯,但這將允許您創建一個端點,您可以從 WordPress 端提供任何您想要的內容。
由於您使用 WordPress 作為身份驗證站點,您可以使用像 is_user_logged_in() 這樣的檢查。如果他們登錄,則用任何他們需要的信息將用户對象返回給第三方。
從 Third-Party 登錄
從 third-party,他們可以使用 redirect_to 查詢 var 鏈接到您的登錄頁面以獲得無縫體驗。一旦登錄,它將傳遞迴 third-party 站點。
http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com
遠程登錄
如果您需要從 third-party 站點登錄用户到 WordPress,您可以使用本站列出的一些簡單的 WP 功能:http://kuttler.eu/code/log-in-a-wordpress-user-programmatically/
您一定需要使用共享的秘密,並創建基於時間的散列密碼來保護安全。基本上,這就是它的樣子:
第三方發送具有時間戳和由共享密鑰生成的令牌的請求:
$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);
WordPress 安裝接收請求:
$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);
if((time() - $timestamp) > 30) # Threshold is 30 seconds
//do something here - TOKEN expired!
$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);
if($token == $token_to_check)
//authenticated!
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。