将反应客户端谷歌登录转移到 ASP.NET 服务器端

Posted

技术标签:

【中文标题】将反应客户端谷歌登录转移到 ASP.NET 服务器端【英文标题】:Transferring react client-side google sign-in to ASP.NET server-side 【发布时间】:2020-02-03 16:48:11 【问题描述】:

我正在使用react-google-login 库让用户通过谷歌在客户端登录我的应用程序,它工作正常并返回令牌和配置文件信息。

  <GoogleLogin
      clientId="XXXX.apps.googleusercontent.com"
      buttonText="Login"
      onSuccess=responseGoogle
      onFailure=responseGoogle
      cookiePolicy='single_host_origin'
  />

 const responseGoogle = (response) => 
     console.log(response);
 

以下是服务器上启用谷歌身份验证的配置:

services.AddAuthentication()
    .AddGoogle(options =>
    
        IConfigurationSection googleAuthNSection = 
            Configuration.GetSection("Authentication:Google");

        options.ClientId = googleAuthNSection["ClientId"];
        options.ClientSecret = googleAuthNSection["ClientSecret"];
    );

但是,我不知道如何将这个成功的登录转移到 asp.net 服务器端。如何使用google发送的token在服务器端登录用户?我想在两种情况下这样做:(a)系统中的电子邮件与 gmail 不匹配,(b)系统中的电子邮件与 gmail 匹配。感谢您的帮助。

【问题讨论】:

你在服务器端使用什么样的认证机制?通常,身份验证发生在服务器端,它会从您的身份验证器获取 JWT 令牌,并将其返回给前端。 @GlennvanAcker 感谢您的评论。事实上,我做到了。但是,那么我该如何从前端处理它呢?我是否将其与每个请求一起发送到服务器?我不清楚。 是的,据我所知,您需要将它包含在您的请求中,因为您将使用它来保护您的控制器操作,它需要能够验证您的客户端。它确实是通过 google 进行身份验证的客户端,但它需要这样做以保护您的 API。否则,任何人都可以直接与 API 对话。 【参考方案1】:

对auth过程的小误解。您可以通过两种方式进行:

client side OAuth (react-google-login) server side OAuth (Microsoft.AspNetCore.Authentication.Google)

但是您试图将它们混合在一起,这是可能的,但不是很有用,因为处理令牌过期更难,而且客户端的范围也受到安全原因的限制。

你需要按照下一条指令来实现服务器端 OAuth,你不需要使用react-google-login

    Facebook, Google, and external provider authentication in ASP.NET Core Google external login setup in ASP.NET Core

【讨论】:

如果它可以帮助任何人(因为我花了一些时间进行故障排除),我已经使用 Asp.NET Identity 记录了服务器端流程mahdikarimipour.com/blog/…。

以上是关于将反应客户端谷歌登录转移到 ASP.NET 服务器端的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 ASP.NET 将资金从商家 Paypal 帐户转移到 EndUser Paypal 帐户?

如何通过 ASP.NET 将资金从商家 Paypal 帐户转移到 EndUser Paypal 帐户?

如何在 asp.net 中为谷歌广告线索表单开发网络挂钩

将 JWT 身份验证实现从 .net core 2 转移到 asp.net web api 2

asp.net从谷歌应用程序帐户发送邮件不起作用

Asp.Net:将数据从 WCF 服务广播到 Asp.Net 客户端的最佳方式