using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using Domain.Exceptions; namespace Shared.Contracts; /// Extension methods for reading well-known claims off an authenticated . public static class ClaimsPrincipalExtensions { /// /// Extracts the authenticated caller's user ID from the validated access token's sub claim. /// /// Thrown when the claim is missing or malformed. public static Guid GetAuthenticatedUserId(this ClaimsPrincipal user) { string? userIdClaim = user.FindFirst(JwtRegisteredClaimNames.Sub)?.Value; if (!Guid.TryParse(userIdClaim, out Guid userId)) throw new UnauthorizedException("Access token is missing a valid user ID claim"); return userId; } }