关于 ASP.NET Core 中 Google OAuth 包的困惑

WoI*_*IIe 4 c# google-api google-oauth google-api-dotnet-client asp.net-core

我需要访问一些 Google API(通过Google.Apis.*NuGet 包)。因此我需要按照官方文档Google.Apis.Auth.AspNetCore中的描述使用该包 :

services
    .AddAuthentication(o =>
    {
        o.DefaultChallengeScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;
        o.DefaultForbidScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;
        o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    })
    .AddGoogleOpenIdConnect(options =>
    {
        options.ClientId = googleClientId;
        options.ClientSecret = googleClientSecret;
    });
Run Code Online (Sandbox Code Playgroud)

另一方面,我使用经典的 ASP.NET Core Identity,特别是 使用 NuGet 包的Google 外部登录设置Microsoft.AspNetCore.Authentication.Google,其初始化如下:

services
    .AddAuthentication()
    .AddGoogle(options =>
    {
        options.ClientId = googleClientId;
        options.ClientSecret = googleClientSecret;
    });
Run Code Online (Sandbox Code Playgroud)

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

DaI*_*mTo 6

背景信息

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

打开id连接其认证或登录。它告诉您用户实际上已登录,但默认情况下它不会让您访问除用户个人资料信息之外的更多信息。

Google.Apis.Auth.AspNetCore

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

微软.AspNetCore.身份验证.Google

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

回顾

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

两者都添加

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

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