Further investigating this issue I’ve found that it is possible to use the native DI container to inject the ClaimsPrincipal where needed like that:
services.AddTransient<ClaimsPrincipal>(s =>
s.GetService<IHttpContextAccessor>().HttpContext.User);
This feels kind of weird injecting it, however it is better than storing it in the CallContext.