【发布时间】:2016-07-14 20:09:53
【问题描述】:
我正在使用 Owin 来自托管 Web 应用程序。
服务器端定义的认证方案如下:
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");
这解决了它,但我仅限于使用用户名/密码执行后备身份验证。
我的问题是我需要支持智能卡身份验证以及用户名/密码身份验证。
【问题讨论】:
标签: c# authentication windows-authentication smartcard dotnet-httpclient