diff --git a/EnvelopeGenerator.API/Extensions/ControllerExtensions.cs b/EnvelopeGenerator.API/Extensions/SenderClaimExtensions.cs
similarity index 80%
rename from EnvelopeGenerator.API/Extensions/ControllerExtensions.cs
rename to EnvelopeGenerator.API/Extensions/SenderClaimExtensions.cs
index 4eb12f74..9284aca4 100644
--- a/EnvelopeGenerator.API/Extensions/ControllerExtensions.cs
+++ b/EnvelopeGenerator.API/Extensions/SenderClaimExtensions.cs
@@ -6,8 +6,24 @@ namespace EnvelopeGenerator.API.Extensions
///
/// Provides extension methods for extracting user information from a .
///
- public static class ControllerExtensions
+ public static class SenderClaimExtensions
{
+ private static string GetRequiredClaimOfSender(this ClaimsPrincipal user, string claimType)
+ {
+ var value = user.FindFirstValue(claimType);
+ if (value is not null)
+ {
+ return value;
+ }
+
+ var identity = user.Identity;
+ var principalName = identity?.Name ?? "(anonymous)";
+ var authType = identity?.AuthenticationType ?? "(none)";
+ var availableClaims = string.Join(", ", user.Claims.Select(c => $"{c.Type}={c.Value}"));
+ var message = $"Required claim '{claimType}' is missing for user '{principalName}' (auth: {authType}). Available claims: [{availableClaims}].";
+ throw new InvalidOperationException(message);
+ }
+
///
/// Attempts to retrieve the user's ID from the claims. Returns null if the ID is not found or invalid.
///