Как использовать аутентификацию 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.