Я использую Owin
для самостоятельного размещения веб-приложения.Как проверить подлинность с помощью смарт-карты в качестве отказа от проверки подлинности Windows в httpClint/httpListener
Схема аутентификации определяется на сервере выглядит следующим образом:
HttpListener listener = (HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
код моего клиент выглядит следующим образом:
using (var webRequestHandler = new WebRequestHandler {UseDefaultCredentials = true})
using (var httpClient = new HttpClient(webRequestHandler))
{
var responseCode = httpClient.PostAsync("https://server:443/myapi/dosomething/", null).Result.StatusCode;
Console.WriteLine(responseCode == HttpStatusCode.OK ? "Success" : "Failure");
}
Это прекрасно работает, когда зарегистрированный пользователь на компьютере клиента является пользователь, известный машиной сервера.
Проблемы возникают, когда, например, клиентская машина не является доменом, и клиент запускается локальным пользователем. В этом случае, я продлил мой клиент немного, следующим образом:
HttpStatusCode responseCode;
using (var webRequestHandler = new WebRequestHandler {UseDefaultCredentials = true})
using (var httpClient = new HttpClient(webRequestHandler))
{
responseCode = httpClient.PostAsync("https://server:443/myapi/dosomething/", null).Result.StatusCode;
}
if (responseCode == HttpStatusCode.Unauthorized)
{
string username;
string password;
// prompt user for credentials and store them at the above variables
using (var webRequestHandler = new WebRequestHandler { Credentials = new NetworkCredential(username, password)})
using (var httpClient = new HttpClient(webRequestHandler))
{
responseCode = httpClient.PostAsync("https://server:443/myapi/dosomething/", null).Result.StatusCode;
}
}
Console.WriteLine(responseCode == HttpStatusCode.OK ? "Success" : "Failure");
И это решает, но я ограничен, чтобы выполнить аутентификацию, используя резервную только имя пользователя/пароль.
Моя проблема заключается в том, что мне необходимо поддерживать аутентификацию смарт-карт, а также аутентификацию имени пользователя и пароля.