我使用Owin
自己託管Web應用程序。如何通過智能卡進行身份驗證作爲httpClint/httpListener中的Windows身份驗證的回退
在服務器中定義的身份驗證方案如下:
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");
這解決了它,但我僅限於只執行使用用戶名/密碼的備用身份驗證。
我的問題是我需要支持智能卡身份驗證以及用戶名/密碼身份驗證。