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


13

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

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

どこから始めればいいのか分かりませんが、私の感覚では、これは私よりも賢い人々によって理解されています。前もって感謝します!


1
どのようなAPI呼び出しが必要ですか?あなたは何をしようとしているのですか?WPのXML-RPCサポート(codex.wordpress.org/XML-RPC_Support)を見ましたか?
アヌ

他のサイトでは、WPサイトのユーザーを確認/認証する必要があります。
-emersonthis

回答:


16

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

ドメイン間で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!

サードパーティのソフトウェアがWPとは何の関係もないことをかなり確信しているため、本質的にはシングルサインオンですが、WPは認証プロバイダーとして機能します。
アヌ

@anu:その通りです。
emersonthis

@ブライアン:マルチサイトインストールに切り替えるアイデアに興味がありますが、クッキーについてあなたが言った点を完全には理解していません。発生する必要があるのは、サードパーティのソフトウェアがそのユーザーが実際にユーザーの1人であることを確認する必要があるだけです。それ以外の場合、ソフトウェアは自給自足型であり、独自のCookieなどを提供できます。
emersonthis

@Emerson今見ています。混乱させて申し訳ありません。私が作成したエンドポイントのアイデアを使用して、認証用のユーザーメタで共有トークンを使用できます。ユーザーが存在する場合、サードパーティにJSON応答を返します。
ブライアンフェクター

1
とてもいい解決策。アプリケーションが異なるサーバーにインストールされ、何らかの理由で各マシンの時間が異なる場合、問題が発生する可能性があります。counter代わりに使用time()して、リクエストとともに渡すことをお勧めします。両側は最後のカウンターを通過させ、APIが新しいカウンターを含むリクエストを受信すると、新しいカウンターが最後のカウンターよりも大きいことを確認します。この方法では、遅延が害を及ぼすことはありません。
guyaloni
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.