Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问网站数据的Windows智能卡身份验证_C#_.net_Smartcard - Fatal编程技术网

C# 访问网站数据的Windows智能卡身份验证

C# 访问网站数据的Windows智能卡身份验证,c#,.net,smartcard,C#,.net,Smartcard,我必须为一个项目从网站上获取数据。要访问此页面,需要具有PIN的智能卡。 不幸的是,目前我不知道如何在C#中实现这一点 目标: 1.使用智能卡和PIN在网站上进行身份验证 2.获取/发布一些数据 有人能给我一个解决这个问题的方法吗 更新 当我尝试通过浏览器访问网站时,会显示“正常”的Windows智能卡对话框 我的目标是编写一个控制台应用程序,只在页面上执行GET请求。 完整的身份验证应在后台运行。智能卡的PIN可以硬编码 好的,我找到了解决问题的办法。如果有人有类似的想法,我将提供我的解决方案

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

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

有人能给我一个解决这个问题的方法吗

更新

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

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

好的,我找到了解决问题的办法。如果有人有类似的想法,我将提供我的解决方案:

 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;
        }

好的,我找到了解决问题的办法。如果有人有类似的想法,我将提供我的解决方案:

 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安全性
对话?请在问题中添加PIN输入对话的屏幕截图。存在凭证提供程序的C#实现-看看您的智能卡是否使用
Windows安全性
对话?请在问题中添加PIN输入对话框的屏幕截图。存在凭证提供程序的C#实现-查看您是否需要在浏览器上读取智能卡的证书表单并在服务器上验证它,证书之前已在服务器上注册,如果您只需要在浏览器上读取智能卡的证书表单并在服务器上验证它,以及之前在服务器上注册的证书,请参阅上的答案,请参阅上的答案