使用跨多个不同域网站的单个帐户登录

时间:2016-09-17 12:20:05

标签: http cookies oauth-2.0 cross-domain single-sign-on

要求:
我有两个域d1.com和d2.com,我想只使用d1.com进行帐户登录/ sigin。如果用户登录d1.com,他应该自动登录d2.com。很简单!

示例:
我首先想举个例子。 比如登录google.com,会自动登录youtube.com。我只想将此示例限制为此2域。

步骤:(我的假设)
1 即可。登录google.com
2。谷歌在google.com域级别存储一些cookie或oauth令牌 3. 打开youtube.com
4 即可。谷歌尝试检查用户是否已登录,但谷歌无法从google.com存储访问cookie或oauth2令牌。谷歌如何知道这是登录google.com的用户 的 5 即可。为了从google.com获取Cookie或令牌信息,youtube.com必须将用户重定向到google.com,但它不会这样做。谷歌如何知道这是登录google.com的同一用户
6 即可。客户端或服务器请求标头中是否有任何设置允许youtube.com检查google.com的cookie或令牌?

如果有人可以帮助详细说明实施此类要求所涉及的步骤。

1 个答案:

答案 0 :(得分:1)

它(YouTube)没有获得Google的Cookie。它设置了它自己。

以下是如何实现类似的内容。

S1.com - 用户网站(YouTube)

S2.com - 验证网站(Google)

  1. 用户请求来自 S1

    的内容

    S1 在浏览器Cookie中查找user_token(因此可以进行API调用)

  2. [未找到令牌]:

    1. S1 使用公钥重定向到 S2 (例如S2.com/get_auth/?public_key=xxxxx[&auth_url=xxxxx))
    2. [在S2 OAUTH PAGE上]:

      注意:public_key,因此 S2 会知道哪个应用正在请求auth_key

      注意:用户必须登录(如果未登录)并选择授予您的应用程序权限

      注意:auth_url是用户登录后重定向到的网址(可选,因为当注册您的应用 S2 时可以设置此选项)

      注意:您还可以使用cancel_url来处理用户取消(登录失败或授予访问权限)

      1. 用户登录并授予访问 S2

      2. S2 使用auth_key重定向回 S1 (auth_url)(例如S1.com/oauth/?auth_key=xxxxx)

      3. [在第二页上]:

        1. S1 auth_url检查auth_key,如果找到,ping(发送一些数据) S2 以换取user_token(在后面 - 端

          注意:ping将涉及发送标识您的应用和auth_key的数据

          • e.g。 {app_id:xxxxx,private_key:xxxxx,auth_key:xxxxx}
        2. 如果auth_key有效,则
        3. S2 使用user_token回复(到后端调用)

          注意:验证auth_key可能涉及(但不限于)获取与auth_key关联的公钥(意味着当有效公钥请求auth_key时,必须保存两个数据以供参考),然后检查以确保public_key匹配private_key(以及可选的app_id)

        4. S1 然后设置拥有 user_token Cookie,然后使用它进行API调用(继续用户会话)