Как передать учетные данные Windows от клиента Angular в WebAPI? - PullRequest
0 голосов
/ 04 мая 2018

Мой бэкэнд - ASPNet WebApi2, работающий под IIS и использующий Windows Authentification.

У меня 2 клиента:

  1. WinForms: Передача полномочий проста. Я делаю следующее:

        var credentialCache = new CredentialCache();
        credentialCache.Add(new Uri(uri.GetLeftPart(UriPartial.Authority)), "NTLM", credentials);
    
        WebRequestHandler handler = new WebRequestHandler()
        {
            AuthenticationLevel = AuthenticationLevel.MutualAuthRequested,
            Credentials = credentialCache,
            PreAuthenticate = true,
            UseDefaultCredentials = false
        };
    
        client = new HttpClient(handler, true)
        {
            BaseAddress = uri,
        };
    
  2. Угловой: Поскольку конечный пользователь будет получать доступ к бэкэнду WebApi с помощью приложения Angular из систем, отличных от Windows, как я могу передать его / ее учетные данные Windows? (У меня есть экран входа в систему, где пользователь должен ввести свой домен / имя и пароль).

Я хотел бы передать учетные данные пользователя через код. Что-то вроде typed_rest-client . К сожалению, эта библиотека вызывает ошибки сборки и не может быть использована.

1 Ответ

0 голосов
/ 13 мая 2018

Здесь вы можете найти библиотеку: https://github.com/zorgoz/Http.BasicWindowsAuthentication

Примечание: он еще не "выпущен", и он был разработан и протестирован с автономным хостом, а не с интеграцией IIS, и никогда не думал о наличии нескольких методов аутентификации параллельно. Тем не менее, он может работать даже без изменений.

Как уже упоминалось в комментариях, вы можете попробовать использовать только IIS. Даже если включена только проверка подлинности Windows, а базовая - нет, в случае сбоя ntlm / keberos он вернется к какой-то базовой. Браузер будет отображать диалог входа в систему. И если вы передадите имя пользователя и пароль, он будет аутентифицирован так же, как и обычная аутентификация Windows. Как я уже сказал, вы могли бы добавить правильный заголовок в ваш запрос Ajax, тогда вы не должны видеть проблему. Подробнее здесь . Вышеуказанный механизм должен работать прозрачно - хотя я никогда не пробовал.

Если вы хотите использовать мое промежуточное программное обеспечение, вы должны решить, куда поместить его в конвейер. Для этого используйте UseStageMarker (больше здесь ). Вы заметите, что промежуточное ПО может предоставить отзыв о причине сбоя входа в систему. Если вы хотите, он добавит две записи заголовка в ответ, которые вы можете просмотреть и отобразить пользователю в вашем клиенте Angular.

...