Found this bit while trying to find out why none of the impersonation stuff works.
ASP.NET Core doesn't implement impersonation.
and
RunImpersonated doesn't support asynchronous operations and shouldn't be used for complex scenarios. For example, wrapping entire requests or middleware chains isn't supported or recommended.
That sounds like a no-go to me. Is it no longer practical to query the database as the end user?