Fix OAuth state validation error by specifying authentication scheme in callback
Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com>
This commit is contained in:
parent
0fac698803
commit
aa56f84f34
1 changed files with 9 additions and 4 deletions
|
|
@ -1,4 +1,5 @@
|
|||
using Microsoft.AspNetCore.Authentication;
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Microsoft.AspNetCore.Authentication.Google;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
|
@ -29,14 +30,15 @@ namespace ShiftScheduler.Server.Controllers
|
|||
[HttpGet("callback")]
|
||||
public async Task<IActionResult> Callback()
|
||||
{
|
||||
var result = await HttpContext.AuthenticateAsync();
|
||||
if (!result.Succeeded)
|
||||
// Explicitly specify the Google authentication scheme for the callback
|
||||
var result = await HttpContext.AuthenticateAsync(GoogleDefaults.AuthenticationScheme);
|
||||
if (!result.Succeeded || result.Principal == null)
|
||||
{
|
||||
return Redirect("/?error=auth_failed");
|
||||
}
|
||||
|
||||
var emailClaim = result.Principal?.FindFirst(ClaimTypes.Email) ??
|
||||
result.Principal?.FindFirst("email");
|
||||
var emailClaim = result.Principal.FindFirst(ClaimTypes.Email) ??
|
||||
result.Principal.FindFirst("email");
|
||||
|
||||
if (emailClaim?.Value == null || !_authorizedEmails.Contains(emailClaim.Value))
|
||||
{
|
||||
|
|
@ -44,6 +46,9 @@ namespace ShiftScheduler.Server.Controllers
|
|||
return Redirect("/?error=unauthorized");
|
||||
}
|
||||
|
||||
// Sign in with the cookie scheme after successful Google authentication
|
||||
await HttpContext.SignInAsync(result.Principal);
|
||||
|
||||
return Redirect("/");
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue