带有 Google 身份验证的 ASP.NET Core 身份

问题描述 投票:0回答:1

我们有一个带有 ASP.NET Core Identity 的 ASP.NET Core 应用程序,我们希望用户仅通过 Google 进行身份验证(无登录表单)。

我们这样配置身份验证:

services.AddAuthentication(options =>
  {
      options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
      options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
  })
.AddCookie()
.AddGoogle(options =>
{
    options.ClientId = Configuration["Authentication:Google:ClientId"];
    options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
});

// ....

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

// ....

这就是

HomeController

[Authorize]
public class HomeController : BaseController
{
    public HomeController()
    {
    }

    public IActionResult Index()
    {
       return View();
    }
}

无需致电即可正常使用:

services.AddIdentity<User, Role>()
    .AddErrorDescriber<LocalizedIdentityErrorDescriber>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

它会转到谷歌并获得身份验证,但登录谷歌似乎无法设置身份验证cookie或其他东西。

它在主页索引和谷歌之间多次保持重定向循环,然后抛出错误:

处理请求时发生未处理的异常。
AuthenticationFailureException:关联失败。未知地点

AuthenticationFailureException:执行时遇到错误 处理远程登录。

asp.net-core oauth-2.0 single-sign-on asp.net-core-identity
1个回答
0
投票

如果没有google,Asp.net core身份的

AddIdentity
仍然会默认注册一个cookiescheme
CookieAuthenticationDefaults.AuthenticationScheme
来使用。

所以google auth需要添加另一个cookieschme。但默认情况下

AddCookie()
等于
AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
。它会与“asp.net core Identity cookie”产生冲突。你需要给它起另一个名字。并在 google auth 配置中指定新的 cookieschme。

builder.Services.AddAuthentication(
    options =>
    {
        options.DefaultScheme = "googleAuthCookie";
        options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
    }
    ).AddGoogle(googleOptions =>
{
    googleOptions.ClientId = "xxx";
    googleOptions.ClientSecret = "xxx";
    googleOptions.SignInScheme = "googleAuthCookie";
})
    .AddCookie("googleAuthCookie");
© www.soinside.com 2019 - 2024. All rights reserved.