クロスサイトスクリプティングの問題
ドメイン間でWP認証Cookieを転送することはできません。また、別のWPインストールにプログラムでログインするためのプレーンテキストパスワードを保存する必要もありません。そのため、ユーザーにWordPressにログインしてもらい、サードパーティのサイトからAPIエンドポイントを介してログインステータスにアクセスする必要があります。これにより、WordPressはすべての認証を処理できます。APIエンドポイントがデータをサードパーティに提供するには、ユーザーがWP側に物理的にログインする必要があるため、かなり安全です。
APIエンドポイントを作成する
私がここに書いたばかりのこの記事をチェックしてください:http : //coderrr.com/create-an-api-endpoint-in-wordpress/
また、ここでコードのデモを見ることができます:https : //gist.github.com/2982319
独自のアプリのニーズに対するロジックを把握する必要がありますが、これにより、WordPress側から必要なものを提供できるエンドポイントを作成できます。
認証サイトとしてWordPressを使用しているため、is_user_logged_in()のようなチェックを使用できます。ログインしている場合は、必要な情報を含めてユーザーオブジェクトをサードパーティに返します。
サードパーティからのログイン
サードパーティから、リダイレクトページをリンクして、redirect_toクエリ変数を使用したシームレスなエクスペリエンスを実現できます。ログインすると、サードパーティのサイトに返されます。
http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com
リモートログイン
サードパーティのサイトから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!