Олицетворение в ядре asp.net 2.2 - PullRequest
0 голосов
/ 11 июля 2019

Я строю шлюз API (реализованный с использованием proxykit), который остается между веб-клиентом и сервером веб-API. Шлюз API может пересылать запросы клиента в веб-API на основе некоторых условий маршрутизации и под идентификатором клиента. Для этого шлюз API должен выдавать себя за клиента и отправлять запросы от имени клиента. Я реализовал олицетворение в качестве промежуточного программного обеспечения, которое находится между клиентом и IIS, в котором развернут шлюз API. В частности, в методе Configure я добавил следующий код:

app.Use(async (context, next) =>
        {
            var user = (WindowsIdentity)context.User.Identity;
            await WindowsIdentity.RunImpersonated(user.AccessToken, async () =>
            {
                await next();
            });
        });
app.Map("/api/", app1 =>
        {
            app1.RunProxy(ctx => ctx
                .ForwardTo("https://server1/api/")
                .AddXForwardedHeaders()
                .Send());
        });

Однако программа вылетает с ошибкой 503: localhost в настоящее время не может обработать этот запрос. Программа работает нормально, если нет олицетворения, т.е. удаление RunImpersonated. Может кто-нибудь подсказать, как решить эту проблему? Я использую ядро ​​Asp.net 2.2.

К сожалению, я не смог найти никаких решений в интернете. Есть некоторые дискуссии по этим вопросам, но они либо фокусируются на фреймворке Asp.net, либо на старой версии ядра asp.net, которые не применимы к моему делу. Некоторым людям удается получить работу по олицетворению, но они представляют свой сценарий использования, только когда RunImpersonated используется синхронно, что мне бесполезно, поскольку мне приходится использовать асинхронный Invoke для делегирования запроса серверу веб-API.

app.Use(async (context, next) =>
        {
            var user = (WindowsIdentity)context.User.Identity;
            await WindowsIdentity.RunImpersonated(user.AccessToken, async () =>
            {
                await next();
            });
        });
app.Map("/api/", app1 =>
        {
            app1.RunProxy(ctx => ctx
                .ForwardTo("https://server1/api/")
                .AddXForwardedHeaders()
                .Send());
        });

Я получил ошибку: Эта страница не работает localhost в настоящее время не может обработать этот запрос. ОШИБКА HTTP 503

...