Login youtube如何在不被重定向的情况下登录到gmail帐户?

Login youtube如何在不被重定向的情况下登录到gmail帐户?,login,single-sign-on,google-login,Login,Single Sign On,Google Login,第一步:我登录了我的gmail帐户。浏览器实际上会重定向到accounts.google.com。所以我在那里登录并重定向回gmail登录 步骤2:现在在浏览器中输入youtube.com。没有任何重定向,我就用gmail帐号登录youtube Youtube是一个完全不同的领域。它如何在没有任何重定向的情况下与accounts.google.com通信?我通过Chrome开发者工具检查了网络请求,但没有看到这样的重定向 这是一个技术解决方案,允许两个或多个网站(如youtube或gmail)使

第一步:我登录了我的gmail帐户。浏览器实际上会重定向到
accounts.google.com
。所以我在那里登录并重定向回gmail登录

步骤2:现在在浏览器中输入
youtube.com
。没有任何重定向,我就用gmail帐号登录youtube


Youtube是一个完全不同的领域。它如何在没有任何重定向的情况下与accounts.google.com通信?我通过Chrome开发者工具检查了网络请求,但没有看到这样的重定向

这是一个技术解决方案,允许两个或多个网站(如youtube或gmail)使用中央sso域(accounts.google.com)进行跨域通信

1) 登录gmail会重定向到accounts.google.com,识别您的身份,并使用您的帐户信息发出身份验证令牌(JWT格式)。令牌存储在浏览器localStorage中

//Store the Json Web token with accountInfo in localStorage
localStorage.setItem('tokenId',jwt);
2) Youtube检查accounts.google.com localStorage以查找身份验证令牌。如果找到,允许您输入

Cookie和localStorage可以使用中间域
accounts.google.com
在域之间共享。主页上嵌入了一个
iframe
,它访问cookie并向主服务器发送消息

//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);
加载iframe后,将一条带有jwt的消息发送到父页面

window.parent.postMessage(jwt, sourceDomain);
父页面接收令牌

//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...
 }
因此,domain1.com和domain2.com可以通过这种方式共享Cookie/localStorage。打开Chrome->Inspect->Resources->Local storage,您将在accounts.google.com中看到共享信息(有许多数据字段)

JWT是自包含的,并使用服务器密钥进行签名。它包含用户数据,可以验证发卡机构的完整性和身份

查看以这种方式实现的SSO,并使用不同的浏览器解决所有问题


这是google使用的通用模式。如果你浏览gmail或youtube代码,你会看到很多东西和其他附加字段。谷歌还增加了原产地限制。如果你想使用
accounts.google.com
SSO,你必须在谷歌应用程序中注册,获取集成ID并指定授权来源

你能详细说明在登录gmail后首次访问youtube时如何读取这些本地存储吗?谢谢。我一直在使用它作为我应用程序的SSO策略。