私はかつて同様の状況にありました:数ヶ月前のクロスフレームワーク認証 zend + codeigniter ...
とにかく、これは私が好むものです:
- WordPress サイトに認証 API をセットアップします。
- Cake に別の認証コンポーネントを設定します。
- ユーザーが Cake アプリで保護されたページにアクセスしたときに WP エンドポイントに ping を送信し、ユーザーを手動でログインします。(これにより、認証 Cookie の 2 番目のセットが作成されます)
ここで、実行可能なわずかな変更を提案します。
SSO のトークン システムがあることを確認してください。のように、人が Wordpress にログインするとき、トークンを持つ別の Cookie を設定します。トークンは、ユーザー名 + パスワード (ハッシュ) + 秘密鍵になり、Wordpress と CakePHP の間で同じになります。どちらのサイトでも、Cookie を検索して手動でユーザーをログインさせるか、データベース検索を実行します。そのクッキーにはハッシュが重要です!ただし、サイトが別のドメインを使用している場合は、再戦略が必要になる場合があります。
私はかつて別のドメインを持っていました。ログイン ページまたは許可されていないページで、他の Web サイトに ping を送信し、ログイン ボックスを表示します。他の Web サイトでは、ユーザーがログインしている場合、ログイン後のページが表示され、リクエスト URI がトークンを送信した場合は、通常の操作を実行して、承認されたトークンをこの (現在の) ドメインに返します。
簡単に言えば:
サイト A = WordPress & サイト B = CakePHP
サイト B は認証が必要なページにヒットし、ログインのためにサイト A に ping を送信します (これは、Login-with-Facebook ソートを行うときに発生します)。これは、トークン (秘密鍵) および SSO の一部である REQUEST_URI を介して要求されます。サイト A の検証テーブルでは、ユーザーがすでにログインしている場合、サイト A は (POST 経由で) トークンを返し、さらにサイト B の (秘密鍵) を介して復号化され、ユーザーをログインさせます。B と A の秘密鍵同じになります。
これが理解できたことを願っています。
質問?:)
コメントであなたの質問に答えてください:
理想としては、なぜ SSO を使用するのでしょうか? 多くの制約があるため、これを使用します。例: たとえば、100 万行のデータベースがあり、1,000 を超えるテーブルがあり、すでに巨大なアプリにモジュールを追加する必要があります... その代わりに、別のデータベースを使用します... SSO が返されますさらに複製できるユーザー情報。たとえば、[Facebook でログイン] をクリックすると、メール アドレス、ユーザー名、さらにはプロフィール写真など、要求された情報が返されます。これをさらにデータベースに追加できます...異なるデータベースを保持することを強くお勧めします:)
2 番目と 3 番目の質問:両方のサイトがデータベース内の同じユーザー テーブルを参照する必要がありますか? 同じデータを使用している場合を除き、別のデータベースを使用することをお勧めします。または、ソフトウェア プラットフォームを変更するとします。
サイト固有のユーザー行をアプリごとに個別のユーザー テーブルにコピーする必要がありますか? はい、それは自動的に行われるはずです。メイン サイトに登録すると、何も起こりません。既にログインしてからサイト B に移動すると、何かが起こるはずです... ログインすると、ユーザー情報はいつでも要求できます :) そうすれば、新しいサイトがアクティブになりますユーザー!2羽?
どのように機能するかを複雑にする (煩わしい) のではなく、短期間で達成できる方法に集中してください。SSO - ログイン済み - 制限されたページ - ログインに注意してください - いずれかのログイン - すでにログインしている場合 - ユーザー情報を取得する - ユーザー情報が存在する場合 - セカンダリ サイト経由でログインするか、新しいユーザー情報を設定します。終わり!
私たち開発者はフローチャートが大好きです!そうじゃない?私はちょうどそれを作成しました:
さらなる答え:
「Fetch User Info」ステージは、ログインしているサイトからユーザー情報を取得し、別のサイトで新しいユーザー (行) を自動的に作成することを意味しますか?
理想的には、ユーザーが情報の使用を「許可」する前にユーザーに許可を求めることですが、プライバシー ポリシーの内容によって異なります。
つまり、一方のサイトがすべての登録/ユーザー作成を処理し、もう一方のサイトはそのユーザーが現れて自動作成をトリガーするのを待つだけです。または、ユーザーが 1 つのサイトに登録した時点で、両方のデータベースにユーザー行が挿入されますか?
一方のサイトはすべての登録/ユーザー作成を処理し、もう一方のサイトはそのユーザーが現れて自動作成をトリガーするのを待つだけです。あなたは両方を持つことができます。Web サイトにサインアップし、トリガー ベースの自動作成も行います。あなたの戦略次第です。または、ユーザーが 1 つのサイトに登録した時点で、両方のデータベースにユーザー行が挿入されますか? それは恐ろしい習慣です!それはSSOの動機を殺します。SSO の目的は、ユーザーが使用できる認証ファミリーを作成して、ユーザーが時々別の Web サイトに登録する必要がないようにすることです。一度に1つのデータベースのみを更新し、必要に応じて他のデータベースを更新します:)
質問?:)