クロスサイト認証(SSO)

タスクがあります-異なるドメイン(site1.com、site2.com)でホストされているプロジェクト間でクロスサイト認証を整理する。 ユーザーは1つのプロジェクトにログインし、まったくログインしません(シングルサインオン)。 シングルサインアウトボタンでも同じことが言えます。 各プロジェクトは、セッションストアとデータベースにアクセスできます。



2日間で、彼は多くの記事と議論をシャベルで掘りました。 結論-私の場合の標準的なソリューションを見つけることができませんでした(オープン/クローズゾーンが明確に分離されているイントラネットソリューションおよびサイトを検討しませんでした)。



更新:ストーリーの継続クロスサイト認証2





オプション1



このオプションの基本は、中央集中型許可サーバーとHTTPリダイレクトです。



ログイン:


1.ユーザーはログインパスワードを入力し、フォームを投稿します。

2.ユーザー名/パスワードが間違っている場合、ユーザー名+パスワード+リターンURL + URL +ライフタイム(30秒以内)を暗号化します。c一意のトークンを解読して取得する機能。

3.受信したトークンをパラメーターに渡すことにより、許可サーバーにリダイレクトします。

4.認可サーバーはそれを復号化し、認可を実行します。

5.承認が完了しました:Cookieを入れ、セッションを上げてトークン(セッションIDとトークンの有効期間)を生成します。 ログイン/パスワードが正しくありません:トークンの代わりに、フラグは認証に失敗したことを示します。

6.許可サーバーは、受信したパラメーターを使用して逆URLにリダイレクトします。

7.トークンを復号化し、Cookieを配置します。

8.アドレスバーのURLをクリアするために、自分自身をリダイレクトします。



クッキー認証


1.ユーザーがサイトにアクセスします。 Cookieがあるかどうか、セッションがある場合は確認し、セッションがない場合は先に進みます。

2.暗号化された返信用アドレスを使用して、承認サーバーにリダイレクトします。

3.認可サーバーは、Cookieがあるかどうかを確認します。

4.存在する場合は、セッションIDとトークンの有効期間でトークンを暗号化し、存在しない場合は、Cookieがないことを示すフラグを使用します。

5.受信したパラメーターを使用してリダイレクトを戻します。

6.トークンを復号化し、Cookieを配置します。

7.アドレスバーのURLをクリアするために、自分自身をリダイレクトします。



出口


1. Cookieを削除し、URLリターンを暗号化します。

2.戻りURLを使用して許可サーバーにリダイレクトし、セッションとCookieを削除します。

2.データベース内のセッションへのユーザーのバインディングを削除します(私のユーザーテーブルでは、各ユーザーが現在のセッションを持ち、Cookieによってセッションを上げます)。

3.リダイレクトを戻します。



プラスの点は、追加のテクノロジーを使用しなくても、すべてが通常のHTTPプロトコルを使用して機能することです。

マイナスは非常に大きく、Cookieによる認証に関連付けられています:ユーザーがCookieを無効にしている場合、またはロボットが私たちを訪問した場合、悪夢が始まります:各リクエストへの3つのリダイレクトがあり、新しいセッションが作成されます。



この問題を解決するための2つのオプションがあります。

1.リダイレクトする代わりに、承認サーバーからJavaScriptに接続します。承認サーバーは、Cookieが存在する場合、セッションを発生させ、サイトにCookieを配置します。 しかし、このソリューションには欠点もあります。私が理解しているように、Safariには問題があり、JavaScriptが無効になっているとCookieによる認証は機能しません。

2. Cookieを保存しない人(主にロボット)を焼き付けます。 www.user-agents.orgからXMLファイルを解析し、MemcacheDbに入れて、リクエストごとにチェックできます。 または、機能しない場合はCookieを設定してから、同じMemcacheDbにIP(ユーザーエージェントを使用できます)を保存し、リクエストごとに確認します。 両方の方法を組み合わせることができます。



オプション2



このオプションの機能は、認証サーバーが不要であり、ロボットが怖くなく、JavaScriptが無効でも動作することです。 決定は正直なところ最も美しいものではありませんが。



ログイン


1.ユーザーはユーザー名/パスワードを入力し、フォームを投稿します。

2.許可し、クッキーを入れ、セッションを開始します。

3.トークンを作成します。セッションIDとトークンの有効期間を暗号化します。

5. URLにトークンを使用して、ドメインごとに1つの単一ピクセル画像を表示します。

6.写真(写真を提供するスクリプト)はトークンを解読し、各ドメインでCookieを設定します(P3Pヘッダーを提供することを忘れないでください:CP =“ IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT”。



クッキー認証


クッキーはすでにすべてのドメインにあります。



出口


1. Cookieとセッションを削除します。

3.トークンを作成します。セッションIDとトークンの有効期間を暗号化します。

4. URLにトークンを含む各ドメインの写真を表示します。

5.画像はトークンを復号化し、Cookieを削除します。



マイナスの点:画像が無効になっている場合、Cookie認証は機能しません。 各ドメイン/プロジェクトは他の全員について知っている必要があります。



私自身はどのオプションを使用するかを選択しなかったため、問題のある領域を見つけて最適な解決策を見つけるためにこのトピックについて話し合うことにしました。



All Articles