Windows Аутентификация работает с локального (IIS Express) на сервер (IIS 8.5), но не на запрос от сервера к серверу - PullRequest
0 голосов
/ 06 января 2020

У нас есть 2 приложения - здесь я назову их API и Consumer.

Мне нужно получить от API данные, относящиеся к текущему зарегистрированному пользователю Windows, поэтому я передаю аутентифицированному в настоящее время пользователю Windows от Consumer до API, используя HttpClientHandler при выполнении запроса :

    public async Task<string> GetWindowsUserDataFromLegacyBackend()
    {
        var res = string.Empty;

        HttpClientHandler authHandler = new HttpClientHandler
        {
            Credentials = CredentialCache.DefaultNetworkCredentials
        };

        using (HttpClient client = new HttpClient(authHandler))
        {
            try
            {
                HttpResponseMessage message = client.GetAsync(this._configuration.GetSection("Backend").Value + "Account/GetCurrentUser").Result;

                if (message.IsSuccessStatusCode)
                {
                    res = await message.Content.ReadAsStringAsync();
                }
            }
            catch
            {

            }              
        }
        return res;
    }

Когда я запускаю Consumer на localhost и передаю аутентифицированного пользователя Windows на API, который расположен на remote server, я получаю правильный ответ от API с данными, относящимися к пользователю.

Однако, когда я запускаю Consumer с сервера и передаю аутентифицированному в настоящее время пользователю Windows на API (который расположен на другом сервере), я не получать данные, связанные с пользователем. Похоже, что в этом случае аутентифицированный в настоящее время пользователь Windows неправильно отправляется Consumer или неправильно читается 'API'.

Это то, что я использую в файле web.config:

    <authentication>
      <windowsAuthentication enabled="true" />
      <anonymousAuthentication enabled="false" />
    </authentication>

Кроме того, когда я отслеживаю http-отклик с помощью fiddler, я сначала получаю ответ 401, затем снова 401, а затем ответ 200, именно так, как ожидается:

http://www.scip.be/index.php?Page=ArticlesNET38&Lang=EN

"На сервер поступает 3 вызова, и только последний возвращает код состояния 200 и ожидаемые данные. Windows Интегрированная аутентификация (WIA) использует согласование / Kerberos или NTLM аутентифицировать пользователей на основе зашифрованного билета, который отправляется между клиентом и сервером. Первоначальный запрос не включает авторизацию, поэтому он является анонимным. Затем IIS (Express) вернет сообщение 401 (неавторизованное) вместе со списком протоколы аутентификации, которые поддерживает сервер (IIS). В этом случае это Negotiate en NTLM. Затем браузер считывает поддерживаемые провайдеры аутентификации, он Если вы используете провайдера аутентификации Negotiate и отправляете зашифрованный билет безопасности в Active Directory, он вернет маркер Kerberos. Наконец этот Kerberos будет отправлен обратно в IIS. Если IIS сможет подтвердить его подлинность, он вернет сообщение 200 вместе с вашими данными. "

Это заставляет меня поверить, что API получает правильного и существующего Windows пользователя (но не уверен в это).

Кто-нибудь с предложениями? Спасибо.

...