должен читаться email из токена
Tests / frontend-test (pull_request) Successful in 41s
Tests / backend-test (pull_request) Successful in 2m28s

This commit is contained in:
gorbenko.pavel
2026-08-13 09:37:28 +05:00
parent 3bfc7f9ddf
commit 8556626ff3
@@ -58,6 +58,14 @@ public static class AuthSetup
{ {
options.Authority = $"https://login.microsoftonline.com/{tenantId}/v2.0"; options.Authority = $"https://login.microsoftonline.com/{tenantId}/v2.0";
options.TokenValidationParameters = validationParameters(); options.TokenValidationParameters = validationParameters();
// Без этого JwtBearerHandler переименовывает короткие имена claim'ов
// из токена в длинные ClaimTypes-URI (upn → ClaimTypes.Upn,
// unique_name → ClaimTypes.Name — а НЕ ClaimTypes.Email!) ещё до
// того, как код увидит ClaimsPrincipal. CurrentUserAccessor ищет
// ровно сырые имена ("upn", "unique_name") — с ремаппингом они не
// совпадали ни с чем, и email инициатора не находился вообще
// (не только у токенов без claim'а email, как этот — у ЛЮБЫХ).
options.MapInboundClaims = false;
}); });
services.AddAuthentication() services.AddAuthentication()
@@ -65,6 +73,7 @@ public static class AuthSetup
{ {
options.Authority = $"https://login.microsoftonline.com/{tenantId}/v2.0"; options.Authority = $"https://login.microsoftonline.com/{tenantId}/v2.0";
options.TokenValidationParameters = validationParameters(); options.TokenValidationParameters = validationParameters();
options.MapInboundClaims = false;
options.Events = new JwtBearerEvents options.Events = new JwtBearerEvents
{ {
// Подпись, издатель и аудитория у app-only токена те же, что у // Подпись, издатель и аудитория у app-only токена те же, что у