Googleがシングルサインオンの次のメカニズムをどのように実現するのかわかりません。
この2番目のサイトは、私がすでにログインしていることをどのように検出できますか。これらは異なるドメインです。 YouTubeはGmailのCookieを読み取ることができません。
シングルサインオンについて読んだすべてのソリューションでは、これは許可されていません。クライアントは常に中央ログインアプリへの許可を求めます。私の例では、YouTubeは私がGmailにログインしているのと同じユーザーであることを知りません(実際には知っていますが、方法がわかりません)
「youtube」のURLを手で入力していることに注意してください。 Gmailの上部ツールバーからYouTubeアイコンをクリックしません(その場合、GmailはたとえばURLを介していくつかの認証パラメータを渡す可能性があります)。
Cookieは特定のドメインに設定されます。例:
setcookie(name,value,expire,path,domain)
Gmailにログインすると、「mail.google.com」の前に「accounts.google.com」にリダイレクトされ、次に「mail.google.com」にリダイレクトされるため、Cookieも「accounts.google.com」にあります。 。
この場合、ドメインは「accounts.google.com」で、パスは「/」(ホームパス)です。
「www.youtube.com」をリクエストしてから「接続」をクリックすると、「accounts.google.com」がすばやくリクエストされるため、このリダイレクトは表示されず、「accounts.google.com」にCookieがあるかどうかが確認されます。その場合、Cookieが有効で有効期限が切れていないか、ユーザーが禁止されていないかを確認します...次に、「www.youtube.com/signin?loginthisSession=Sessionid」にリダイレクトします。このリクエストには、「accounts.google.com」のCookieから取得されたセッションIDCookieの値が含まれています。
最後のステップで、「www.youtube.com」はあなたをログに記録し、ドメイン「www.youtube.com」に独自のCookieを設定して保存します。
したがって、トリックは302HTTPリダイレクトにあります。
CookieとlocalStorageは、中間ドメインを使用してドメイン間で共有できます。ホームページには「iframe」が埋め込まれており、Cookieにアクセスしてメインにメッセージを送信します。
mail.google.com
とyoutube.com
は、accounts.google.es
を使用してCookieを共有できます。 Chrome->Inspect->Resources->Local storag
eを開くと、accounts.google.com
にJWT形式の認証トークンが表示されます。
私はこの回答で技術的な手順を詳しく説明しました: https://stackoverflow.com/a/37565692/6371459 。また、 https://github.com/Aralink/ssojwt を見て、中央ドメインでJWTを使用したシングルサインオンの実装を確認してください。
これをチェックしてください.. http://www.codeproject.com/Articles/106439/Single-Sign-On-SSO-for-cross-domain-ASP-NET-applic 。この記事は、SSOクロスドメインの説明とサンプルで構成されています。
私が覚えている限り、私が間違っていなければ、Cookieには、そのようなCookieを読み取って取得できるドメインを含む指定されたフィールドが含まれています。これは、特定のWebサイトがすべてのCookieリストを読み取って、独自のビジネスを行うことを防ぐために行われます。どの種類のサイトがあなたのGmailクッキーを「見る」ことができるかを見ることができるはずです。
私が間違っている場合は私を訂正してください、これはSIDとgmail-YouTubeの例に関して与えられた答えをコンパイルするはずです。