web-dev-qa-db-ja.com

サードパーティのサイトでシングルサインオン用のAPIを作成する

私のサイトはサードパーティ製のソフトウェアと統合する必要があります。それはソフトウェア会社によってホストされているそれ自身のサブドメイン上に存在するでしょう。私のサイトのユーザーがサブドメインにアクセスできるようにするには、サードパーティの開発者に(私のワードプレスサイトへの)API呼び出しに使用できるエンドポイントを提供する必要があります。

他のサイトは私のサイトのユーザーを何らかのAPIを通して認証する必要があります。

どこから始めればいいのかわかりませんが、これは私より頭の良い人によって考え出されたことです。前もって感謝します!

12
emersonthis

クロスサイトスクリプティングの問題

ドメイン間でWP auth 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 query varを使用してシームレスな体験のために彼らはあなたのログインページにリンクすることができます。ログインすると、サードパーティのサイトにそれらを渡します。

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-programatically/

あなたは間違いなく共有秘密を使用し、物事を安全に保つためにその秘密から時間ベースのハッシュを作成する必要があります。基本的には、次のようになります。

サードパーティは、タイムスタンプと共有シークレットによって生成されたトークンを使用して要求を送信します。

$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!
16
Brian Fegter