【问题标题】:Windows Smart Card Authentication to Access Website-Data访问网站数据的 Windows 智能卡身份验证
【发布时间】:2019-07-23 00:58:00
【问题描述】:

我必须从一个项目的网站中提取数据。要访问此页面,需要带有 PIN 的智能卡。 不幸的是,目前我不知道如何在 C# 中实现这一点。

目标: 1. 在网站上使用智能卡和 PIN 进行身份验证 2. GET/POST 一些数据

有人可以为我提供解决此问题的方法吗?

更新

当我尝试通过浏览器访问网站时,会显示“正常”的 Windows 智能卡对话框。

我的目标是编写一个仅在页面上执行 GET 请求的控制台应用程序。 完整的身份验证应在后台运行。智能卡的 PIN 可以硬编码。

【问题讨论】:

  • 您的智能卡是否使用Windows Security 对话?请在问题中添加 PIN 输入对话框的屏幕截图。
  • 存在凭证提供程序的 C# 实现 - 看看here

标签: c# .net smartcard


【解决方案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;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2019-12-06
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多