Как использовать аутентификацию Windows с Identity Server 3?

Моя цель - приложение Angular, которое использует веб-службу, а пользователи приложения / веб-службы проходят проверку подлинности с использованием аутентификации Windows. Пользователи должны иметь возможность войти в систему на нашем домене Windows, открыть браузер и использовать приложение Angular без повторного входа.

Исследование

Я скачал все образцы исходного кода с https://github.com/IdentityServer/IdentityServer3.Samples/

Я работал с примером Simplest OAuth2 Walkthrough. Нет проблем.

Затем я открыл образец веб-хоста (Windows Auth All-In-One). Я мог восстановить и собрать проект, закомментировав две строки кода, которые вызывали проблемы (строки 313,359 Clients.cs, установка "AllowAccessTokensViaBrowser=false". Вероятно, не имеет значения.)

Когда приложение было запущено, я увидел целевую страницу IdentityServer3 на localhost:44333. Отлично.

Я также мог видеть метаданные службы аутентификации Windows (документ SAML) на локальном хосте:44333/windows. Также отлично.

Проблема в том, что я не знаю, что делать дальше. Этот документ предполагает, что следующим шагом является написание клиента, который делает запрос к службе аутентификации Windows для получения токена:

http://github.com/IdentityServer/IdentityServer3/issues/1463

Это правильный подход? Я не могу заставить пример кода работать. Я даже не уверен, что могу указывать OAuth2Client в нужном месте. Кто-нибудь может объяснить этот процесс или привести пример с работающим клиентом? Заранее спасибо за помощь:)

РЕДАКТИРОВАТЬ

Я проводил дальнейшие исследования. Я проверил журналы сервера идентификации, чтобы убедиться, что операция добавления конечной точки WS-Federation завершается во время настройки. Оно делает.

Затем я создал простое консольное приложение для вызова службы проверки подлинности Windows, как предлагается здесь: github.com/IdentityServer/IdentityServer3/issues/2318

Импортировав Thinktecture.IdentityModel.Client, я изменил код на этой странице, чтобы он соответствовал моим номерам портов и т. Д. В итоге я получил следующее:

   var handler = new HttpClientHandler
   {
       UseDefaultCredentials = true
   };
   var oauthClient = new OAuth2Client(
                    new Uri("https://localhost:44333/windows/token"),
                    handler);

   var result = oauthClient.RequestCustomGrantAsync("windows").Result;

Мой объект результата все еще имеет HttpErrorStatusCode NotFound, что меня огорчает.

ДРУГОЕ РЕДАКТИРОВАНИЕ

Я попытался указать клиенту на конечную точку сервера идентификации, как предложено ниже Бранимиром. Итак, мой код теперь читает:

var oauthClient = new OAuth2Client(
   new Uri("https://localhost:44333/connect/token"),
   handler);

Это тоже не работает. Вот что говорят журналы сервера идентификации:

Start token request
iisexpress.exe Information: 0 : 04/27/2016 20:35:23 +01:00 [Information] (IdentityServer3.Core.Validation.SecretParser)
 Parser found no secret
iisexpress.exe Information: 0 : 04/27/2016 20:35:23 +01:00 [Information] (IdentityServer3.Core.Validation.ClientSecretValidator)
 No client secret found
iisexpress.exe Information: 0 : 04/27/2016 20:35:23 +01:00 [Information] (IdentityServer3.Core.Endpoints.TokenEndpointController)
 End token request
iisexpress.exe Information: 0 : 04/27/2016 20:35:23 +01:00 [Information] (IdentityServer3.Core.Results.TokenErrorResult)
 Returning error: invalid_client

Так что я не продвигаюсь дальше.

1 ответ

Решение

Почему вы вообще хотите использовать конечную точку токена - просто сделайте неявный поток OAuth/OpenID Connect. Это будет аутентифицировать пользователя автоматически с использованием аутентификации Windows.