最近 Sina CAS のログイン プロセスを研究したところ、実際には Sina の sso が yale-CAS を実装しており、基本的な認証プロセスの対話プロセスは変わっていないことがわかりました。その独創性は Ajax シングル サインインの実装であり、これは非常に素晴らしいです。実装原理はiframe+JavaScriptコールバック関数です。
1. ジュニアSSO
基本的なSSOは、トップレベルドメイン名のCookieを埋め込むことで、同一のトップレベルドメイン名での統一ログインを実現します。例:
シングル サインオン アドレス: sso.xxx.com/login.jsp
アプリケーション 1: web1.xxx.com/login.jsp
アプリケーション 2: web2.xxx.com/login.jsp
アプリケーション 3 : web3.xxx.com/login.jsp
ログインプロセス:
状況 1: (ユーザーはログインしたことがありません)
1、ユーザーは web1.xxx.com/login.jsp にアクセスし、web1 リダイレクトしますsso.xxx へ。com/login.jsp
2、ユーザー入力の検証、成功しました。 sso.xxx.com は、.xxx.com ドメイン Cookie のトークン ID を埋め込み、web1.xxx.com/login.jsp にリダイレクトします。web1.xxx.com は、.xxx.com ドメイン Cookie のトークン ID にアクセスして、ログインされており、システムは「完了」にログインします。
状況 2: (ユーザーはすでにログインしています) 直接ログインします。
第二に、Sina SSO
Sina は、基本的に Cookie に基づいて、ドメイン名全体での統一ログインを実現します。ユーザーが Cookie を無効にすると、ログインできなくなります。例: Sina SSO サーバーは login.sina.com.cn/sso/login.php
、Weibo ログイン アドレスは weibo.com/login.php です。第 1 レベルのドメイン名を越えたログインは、コールバック関数と iframe を通じて実現されます。
認証プロセスの詳細: ここでは、ログインしたことがないユーザーのみを紹介します。
1、ユーザーはweibo.com/login.phpを入力します
2、ユーザーはユーザー名を入力します。入力完了後、ユーザー名入力ボックスのフォーカスが失われると、ページ番号が ajax 経由でサーバー login.sina.com.cn/sso/prelogin.php にリクエストを送信し、パラメーターは user (先ほど入力したユーザー名)。このサービスはサーバー時刻と nonce 認証を返します。これらはコールバック関数を通じて JavaScript 変数に書き込まれます。
3. ユーザーはパスワードを入力し、クリックしてログインし、ページ POST リクエスト (login.php によって送信されるものではなく、ajax リクエストであることに注意してください)、
login.sso/login .php?client=ssologin.js (v1.3.12)、リクエストを開始するページは、weibo.com/login.php の非表示の iframe ページです。パラメータは、2 番目のステップで取得したサーバー時間とユーザーです。名前と暗号化されたパスワード。 login.sina.com.cn の下に植えられた Cookie tgt に戻ります。同時に、iframe アドレスを weibo.com/ajaxlogin.php?ticket=XXXXXX に変更します。これはユーザーのログイン情報とサービス資格情報であることに注意してください。
4、iframe は weibo.com/ajaxlogin.php?ticket=XXXXXX にアクセスし、ユーザーはログインし、ユーザーのログイン情報を記録するために .weibo.com に植えられた Cookie を返します。
5. js を介して weibo.com/login.php に再度アクセスします。Cookie が書き込まれ、ログインが成功したため、サーバーは 302 を送信し、ユーザーのホームページにリダイレクトします。 Weibo.com/ユーザーID 。
6, この時点でログインプロセスは完了です。
焦点: インタラクションプロセスとパスワード暗号化アルゴリズムの分析。