访问网站数据的 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 智能卡身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用智能卡身份验证进行自动化测试(硒或其他选项?)

在 python 中使用智能卡在网站上进行身份验证

Intranet Windows 身份验证网站 受信任站点要求提供登录凭据

Windows身份验证,后备登录表单

IIS 节点和 Windows 身份验证:IIS 网站不断提示输入凭据

Windows 身份验证不适用于 HttpClient [重复]