2016-06-01 2 views
3

Schritt 1: Ich habe mich in meinem Google Mail-Konto angemeldet. Browser leitet tatsächlich zu accounts.google.com um. Also habe ich mich dort eingeloggt und zurück zu Gmail geloggtWie Youtube in Google Mail-Konto ohne Umleitung eingeloggt ist?

Schritt 2: Jetzt im Browser tippe ich youtube.com. Ohne Weiterleitungen werde ich mit dem Google Mail-Konto bei youtube angemeldet.

Youtube ist eine komplett andere Domäne. Wie kommuniziert es mit accounts.google.com ohne Umleitung? Ich habe die Netzwerkanfrage über die Chrome-Entwicklertools überprüft, sehe aber keine solche Weiterleitung!

Antwort

6

Dies ist das technische Lösung Schema Cross-Domain-Kommunikation zu ermöglichen, zwischen zwei os mehr Websites wie YouTube oder gmail mit einer zentralen sso Domain (accounts.google.com)

1) Anmeldung in gmail Umleitungen an accounts.google .com, identifiziert Sie und geben Sie ein Authentifizierungs-Token (JWT-Format) mit Ihren Kontoinformationen aus. Das Token wird in Browser local gespeichert

//Store the Json Web token with accountInfo in localStorage 
localStorage.setItem('tokenId',jwt); 

2) Youtube prüft accounts.google.com localstorage für Auth-Token suchen. Wenn gefunden, können Sie eingeben.

Cookies und localStorage können zwischen Domänen mit einer Zwischendomäne accounts.google.com geteilt werden. Auf der Homepage ist ein iframe eingebettet, der auf Cookies zugreift und Nachrichten an die Hauptstelle sendet.

//Create iframe when page is loaded pointing to sso domain. For example in gmail.com and youtube.com pointing to accounts.google.com 
var iframe = document.createElement('iframe'); 
iframe.style.display = "none"; 
iframe.src = 'https://sso.domain.com/sso.html?sourceDomain=...; 
iframe.id = 'sso.iframe'; 
document.body.appendChild(iframe); 

Wenn iframe geladen wird, sendet eine Nachricht mit dem jwt zu übergeordneten Seite

window.parent.postMessage(jwt, sourceDomain); 

Die übergeordnete Seite der Token

//Message listener for SSO events (created by the sso.iframe) 
addEventListener("message", _listener, false); 

function _listener(event){ 
    //origin check 
    if ( sourceDomain.lastIndexOf(event.origin) == -1){ 
     return; 
    } 

    var jwt = event.data 
    //do something with the token... 
} 

empfängt So domain1.com und domain2.com können Teilen Sie Cookies/localStorage auf diese Weise. Öffnen Sie Chrome-> Inspect-> Resources-> Local storage und Sie sehen zum Beispiel in accounts.google.com die geteilten Informationen (es gibt viele Datenfelder).

JWT ist eigenständig und mit Serverschlüssel signiert. Es enthält die Benutzerdaten und die Integrität und Identität des Emittenten kann

Check out https://github.com/Aralink/ssojwt um zu sehen, eine Implementierung von SSO auf diese Weise, und die Lösung aller Probleme mit den verschiedenen Browsern

Dies ist das allgemeine Schema überprüft werden verwendet von Google. Wenn Sie den Gmail- oder Youtube-Code durchsuchen, sehen Sie viele Dinge und andere zusätzliche Felder. Google fügt außerdem eine Ursprungsbeschränkung hinzu. Wenn Sie das SSO accounts.google.com verwenden möchten, müssen Sie sich in Google Apps registrieren, eine Integrations-ID erhalten und Ihre autorisierten Ursprünge angeben.

+0

Können Sie bitte angeben, wie diese localStorage gelesen wird, wenn youtube zum ersten Mal nach der Anmeldung bei Google Mail aufgerufen wird? – chanchal118

Verwandte Themen