Я хочу расширить эту функциональность, чтобы пользователи могли входить в систему с помощью Google. После успешного входа в Google система должна обновить данные пользователя (например, адрес электронной почты и имя) в базе данных и сгенерировать токен JWT. Однако во время реализации я столкнулся с проблемами и подозреваю, что что-то не хватает в моей настройке.
Вот мой текущий код — конфигурация аутентификации:
Код: Выделить всё
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddGoogle(googleOptions =>
{
googleOptions.ClientId = builder.Configuration["Google:ClientID"];
googleOptions.ClientSecret = builder.Configuration["Google:ClientSecret"];
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JWT:Key"])),
ValidateIssuer = true,
ValidIssuer = builder.Configuration["JWT:Issuer"],
ValidateAudience = true,
ValidAudience = builder.Configuration["JWT:Audience"],
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
});
Код: Выделить всё
[HttpGet("google-login")]
public IActionResult GoogleLogin()
{
var properties = new AuthenticationProperties
{
RedirectUri = Url.Action("GoogleCallback")
};
return Challenge(properties, GoogleDefaults.AuthenticationScheme);
}
[HttpGet("google-callback")]
public async Task GoogleCallback()
{
var result = await HttpContext.AuthenticateAsync();
if (!result.Succeeded)
return Unauthorized();
// Token Generation Logic
return Ok(token);
}
Код: Выделить всё
https://localhost/signin-google?state=...

Будем очень признательны за любую помощь в решении этой проблемы!
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/792 ... p-net-core