Oauth 2.0 允许用户使用Google帐户登录我的网站,而不使用3d party Cookie

Oauth 2.0 允许用户使用Google帐户登录我的网站,而不使用3d party Cookie,oauth-2.0,google-api,google-oauth,google-login,Oauth 2.0,Google Api,Google Oauth,Google Login,我一直在遵循非常简单的说明(“将Google登录集成到您的web应用程序”) 虽然它在Chrome83中可以工作,但我在JavaScript控制台中收到关于第三方cookie的警告。事实上,当我的用户(其中一些禁用了第三方cookie)尝试登录按钮时,它会闪烁一个窗口,但什么也没有发生 在“疑难解答”下的文档中,它说“如果您的许多用户启用了此功能……另一个解决方法是实现服务器端OAuth 2.0流。” 嗯。那么,服务器端OAuth2.0流是什么意思呢 (FWIW我的应用程序是一个React单

我一直在遵循非常简单的说明(“将Google登录集成到您的web应用程序”)


虽然它在Chrome83中可以工作,但我在JavaScript控制台中收到关于第三方cookie的警告。事实上,当我的用户(其中一些禁用了第三方cookie)尝试登录按钮时,它会闪烁一个窗口,但什么也没有发生

在“疑难解答”下的文档中,它说“如果您的许多用户启用了此功能……另一个解决方法是实现服务器端OAuth 2.0流。”

嗯。那么,服务器端OAuth2.0流是什么意思呢


(FWIW我的应用程序是一个React单页应用程序)。

上有一般信息。这里有一种方法:

  • 您的应用程序提供了指向您的用户登录的链接。此链接指向大写单词所在的位置:

    • CLIENT_ID
      -注册为您拥有的谷歌云项目的一部分,使用云控制台(当前在API&Services/OAuth许可屏幕下)
    • 重定向\u URI
      -应用程序中必须在该项目中注册的URI
    • 状态
      -我使用它来保存希望用户发送到的最终URI
    • NONCE
      -防止重播攻击
  • 当用户导航到该URI时,将通过Google登录过程获取这些URI。成功签名后,它们被重定向到
    REDIRECT\u URI?state=state&code=code
    STATE
    是您在前面的链接中提供的
    STATE
    code
    是身份验证代码

  • 您的应用程序通过向位于的Google OAuth令牌服务发出服务器端POST请求,传递
    code
    CLIENT\u ID
    CLIENT\u SECRET
    (注册应用程序时在云控制台中提供),
    重定向\u URI
    ,来处理对该
    重定向\u URI
    的请求,和
    GRANT\u TYPE
    (字符串
    authorization\u code

    对该请求的JSON响应将包括一个名为
    id\u token
    的字段。该
    id\u令牌
    是一个JWT,其中包括
    sub
    字段中用户的已验证电子邮件地址

    然后,您可以使用该用户信息建立自己的会话,并为其设置第一方cookie。您可以使用GoogleAuth库或第三方库验证和解析JWT

  • 使用设置会话cookie的重定向响应来响应
    重定向\u URI
    ,将用户发送到应用程序的相应部分


  • 这是相当详细的,但我在我创建的一个示例应用程序中完成了上面的操作,它为此工作。我希望它能适应您的需要。

    谢谢,这正是我需要的。它花了将近一天的时间才开始工作,我仍然需要解决一些重要的问题,比如注销,以及在令牌过期后在一个不可见的iframe中重新登录,但这绝对是使用google访问oauth2的正确方法。非常好的回答,谢谢!我在谷歌的文档中搜索了详细信息,找到了以下链接:。关于“服务器流”的部分允许您想要的内容—无需第三方cookie的用户身份验证。我构建了一个小应用程序,它使用谷歌端点进行身份验证,没有第三方cookis,而且运行良好。希望能有帮助。
    <script src="https://apis.google.com/js/platform.js" async defer></script>
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com">
    <div class="g-signin2" data-onsuccess="onSignIn"></div>