对 ASP.NET Core 中的 Google OAuth 包感到困惑

Posted

技术标签:

【中文标题】对 ASP.NET Core 中的 Google OAuth 包感到困惑【英文标题】:Confusion about Google OAuth packages in ASP.NET Core 【发布时间】:2021-11-18 14:34:06 【问题描述】:

我需要访问一些 Google API(通过Google.Apis.* NuGet 包)。因此我需要使用Google.Apis.Auth.AspNetCore 包,如 official documentation:

services
    .AddAuthentication(o =>
    
        o.DefaultChallengeScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;
        o.DefaultForbidScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;
        o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    )
    .AddGoogleOpenIdConnect(options =>
    
        options.ClientId = googleClientId;
        options.ClientSecret = googleClientSecret;
    );

另一方面,我使用经典的 ASP.NET Core 标识,尤其是 Google external login setup 使用 Microsoft.AspNetCore.Authentication.Google NuGet 包初始化如下:

services
    .AddAuthentication()
    .AddGoogle(options =>
    
        options.ClientId = googleClientId;
        options.ClientSecret = googleClientSecret;
    );

有没有办法共享 OAuth 配置、登录信息……? ???两个包都使用自己的 OAuth 初始化代码... ????我会遇到同时调用AddGoogle()AddGoogleOpenIdConnect() 的问题吗?

【问题讨论】:

【参考方案1】:

背景资料

授权是OAuth2。例如,您可以使用它来请求访问用户的 google drive 帐户。一旦您获得访问权限,您将获得一个刷新令牌,并且您可以在需要时访问用户数据。

Open id connect 其身份验证或登录。它告诉您用户实际上已登录,默认情况下,您无法访问比用户个人资料信息更多的信息。

Google.Apis.Auth.AspNetCore

严格来说,Google API 库通常只允许您访问授权。但是Google.Apis.Auth.AspNetCore 确实以AddGoogleOpenIdConnect 的形式向身份验证添加了一个开放ID 连接组件,这将同时为您提供身份验证和授权。

Microsoft.AspNetCore.Authentication.Google

是作为它的状态身份验证或登录。用户正在登录并验证他们当前正在访问您的应用程序。

回顾

Microsoft.AspNetCore.Authentication.Google 只为您提供身份验证或登录,而Google.Apis.Auth.AspNetCore 可能会为您提供登录和授权。

同时添加

TBH 我质疑您为什么要同时添加两者。从技术上讲,如果你这样做了,而且他们没有像他们可能的那样互相殴打。您最终可能会进行双重登录。因为这两个库都将尝试对用户进行身份验证。您将需要两个访问令牌,每个库一个。我不确定他们是否设置了不同的 cookie,如果他们设置了相同的 cookie,那么它们将相互重置 cookie,导致用户需要再次登录或授权应用程序以重置您尝试使用的每个库的 cookie。

更不用说将 [Authorize] 属性添加到方法会做什么,如果您添加到授权表单,它将如何知道选择哪一个

【讨论】:

感谢您解惑。

以上是关于对 ASP.NET Core 中的 Google OAuth 包感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ASP.Net Core Identity 从登录用户中检索 Google 个人资料图片?

Google Chart和Chart.Js,在Asp .NET Core 2.2中将脚本端发送C#变量

ASP.net core web api:使用 Facebook/Google OAuth 访问令牌进行身份验证

用于具有单个回调 url 的多租户应用程序的 ASP.NET Core Google Auth?

使用 Google Auth、Angular 4、ASP.Net Core 2 进行身份验证时出现 405

ASP.NET Core中的依赖注入:控制反转(IoC)