访问网站数据的 Windows 智能卡身份验证
Posted
技术标签:
【中文标题】访问网站数据的 Windows 智能卡身份验证【英文标题】:Windows Smart Card Authentication to Access Website-Data 【发布时间】:2019-07-23 00:58:00 【问题描述】:我必须从一个项目的网站中提取数据。要访问此页面,需要带有 PIN 的智能卡。 不幸的是,目前我不知道如何在 C# 中实现这一点。
目标: 1. 在网站上使用智能卡和 PIN 进行身份验证 2. GET/POST 一些数据
有人可以为我提供解决此问题的方法吗?
更新
当我尝试通过浏览器访问网站时,会显示“正常”的 Windows 智能卡对话框。
我的目标是编写一个仅在页面上执行 GET 请求的控制台应用程序。 完整的身份验证应在后台运行。智能卡的 PIN 可以硬编码。
【问题讨论】:
您的智能卡是否使用Windows Security
对话?请在问题中添加 PIN 输入对话框的屏幕截图。
存在凭证提供程序的 C# 实现 - 看看here
【参考方案1】:
好的,我找到了解决问题的方法。如果有人有类似的想法,我会提供我的解决方案:
X509Certificate2 cert = PickCertificate();
var req = (HttpWebRequest)WebRequest.Create("//");
req.CookieContainer = new CookieContainer();
req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0";
req.ClientCertificates.Add(cert);
req.UseDefaultCredentials = true;
ServicePointManager.ServerCertificateValidationCallback = (c, certificate, chain, errors) => true;
var res = (HttpWebResponse)req.GetResponse();
public static X509Certificate2 PickCertificate()
X509Certificate2 cert;
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
if (store.Certificates.Count == 1)
cert = store.Certificates[0];
else
cert = X509Certificate2UI.SelectFromCollection(store.Certificates, "Caption", "Message", X509SelectionFlag.SingleSelection)[0];
store.Close();
return cert;
【讨论】:
以上是关于访问网站数据的 Windows 智能卡身份验证的主要内容,如果未能解决你的问题,请参考以下文章
Intranet Windows 身份验证网站 受信任站点要求提供登录凭据