ASP. NET Core 3.0: как переслать существующую аутентификацию другому запросу - проблема двойного прыжка? - PullRequest
0 голосов
/ 03 февраля 2020

У меня следующий сценарий (все приложения и службы используют asp. net core 3.0 на Windows):

У меня есть клиентское приложение, которое выполняется в контексте AppUser , Он использует HttpClient для отправки запроса в WebServiceA, который работает в контексте WebUser. В запросе используется аутентификация Windows.

    var credentialsCache = new CredentialCache { { uri, "Negotiate", CredentialCache.DefaultNetworkCredentials } };
    var handler = new HttpClientHandler { Credentials = credentialsCache };
    var httpClient = new HttpClient(handler);

В WebServiceA вызов принят правильно и аутентифицирован: HttpContext.User.Identity.IsAuthenticated - истина, HttpContext.User.Identity.Name - AppUser.

Для возможности чтобы обработать запрос, WebServiceA должен отправить еще один запрос в WebServiceB. Этот запрос также должен быть аутентифицирован как AppUser .

В настоящее время я использую следующий код для создания HttpClient, который выполняет запрос к WebServiceB:

    var credentialsCache = new CredentialCache { { uri, "Negotiate", CredentialCache.DefaultNetworkCredentials } };
    HttpClientHandler handler = new HttpClientHandler
    {
        Credentials = credentialsCache,
        UseDefaultCredentials = true
    };
    HttpClient httpClient = new HttpClient(handler);

проблема в том, что вызов всегда аутентифицируется как WebUser (который запускает службу), а НЕ AppUser (который отправил запрос) .

Я думал, что DefaultNetworkCredentials всегда принадлежат аутентифицированному пользователю.

Как я могу отправить (из WebRequest) другой WebRequest на другой WebService, который аутентифицирован тем же пользователем, который отправил исходный запрос? Есть ли способ передать аутентификацию от одного WebService к другому?

Относительно Kerberos и AD: WebServiceA и WebServiceB работают на разных серверах в одном домене. Они размещены не в IIS, а в Windows Service.

Я попытался установить имя участника-службы, как описано здесь: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-3.0&tabs=visual-studio

setspn -S HTTP/ServerA.domain domain\WebUser

Также пробовал: setspn -a WebServiceA/WebUser domain\WebUser

Но безуспешно.

После трех дней веб-исследований и попыток, у меня кружится голова ... Как я могу получить UserCredentials во второй запрос? Или из-за (возможно, неправильной?) Конфигурации AD (SPN) WebService всегда молча принимает учетные данные пользователя, запустившего службу?

Я благодарен за каждую подсказку!

Штеффи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...