Auto-link verified Google sign-ins by email

This commit is contained in:
2026-03-28 14:24:10 +01:00
parent 9f949ee9df
commit 19a4da9382
3 changed files with 110 additions and 1 deletions
@@ -5,7 +5,7 @@ using Microsoft.IdentityModel.Tokens;
namespace JobTrackerApi.Services;
public sealed record GoogleTokenPrincipal(string Subject, string? Email, string? GivenName, string? FamilyName, string? Name);
public sealed record GoogleTokenPrincipal(string Subject, string? Email, bool EmailVerified, string? GivenName, string? FamilyName, string? Name);
public interface IGoogleTokenValidator
{
@@ -56,9 +56,17 @@ public sealed class GoogleTokenValidator : IGoogleTokenValidator
return new GoogleTokenPrincipal(
Subject: subject,
Email: principal.FindFirst("email")?.Value?.Trim(),
EmailVerified: IsEmailVerified(principal),
GivenName: principal.FindFirst("given_name")?.Value?.Trim(),
FamilyName: principal.FindFirst("family_name")?.Value?.Trim(),
Name: principal.FindFirst("name")?.Value?.Trim()
);
}
private static bool IsEmailVerified(System.Security.Claims.ClaimsPrincipal principal)
{
var raw = principal.FindFirst("email_verified")?.Value?.Trim();
if (string.IsNullOrWhiteSpace(raw)) return false;
return string.Equals(raw, "true", StringComparison.OrdinalIgnoreCase) || raw == "1";
}
}