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

Confusion about Google OAuth packages in ASP.NET Core

我需要访问一些 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 Identity,尤其是 Google external login setup 使用 Microsoft.AspNetCore.Authentication.Google 像这样初始化的 NuGet 包:

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

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

背景资料

授权为OAuth2。例如,您可以使用它来请求访问用户 google 驱动器帐户。一旦您被授予访问权限,您将获得一个刷新令牌,您将能够在需要时访问用户数据。

Open id connect 其认证或登录。它告诉您用户实际上已登录,默认情况下它不会让您访问更多用户个人资料信息。

Google.Apis.Auth.AspNetCore

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

Microsoft.AspNetCore.Authentication.Google

如其状态认证或登录。用户正在登录并验证他们当前正在访问您的应用程序。

回顾

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

两者相加

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

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