Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net mvc ASP.NET MVC 2和请求客户端证书(智能卡身份验证)_Asp.net Mvc_Ssl_Client_Certificate_Smartcard - Fatal编程技术网

Asp.net mvc ASP.NET MVC 2和请求客户端证书(智能卡身份验证)

Asp.net mvc ASP.NET MVC 2和请求客户端证书(智能卡身份验证),asp.net-mvc,ssl,client,certificate,smartcard,Asp.net Mvc,Ssl,Client,Certificate,Smartcard,我需要从用户的卡中捕获用户的X.509证书,并映射到用户表,以便在ASP.NET MVC中进行表单身份验证。我在VS 2008中创建了一个MVC(2版)项目,配置为使用默认模板在Vista上的本地IIS中的默认网站下作为虚拟目录运行,但在帐户/登录操作结果中添加了RequireAttribute。没有其他变化。使用本地IIS管理器,我创建了一个自签名证书并应用了它,然后将Account/Logon.aspx页面设置为需要SSL和客户端证书 在调试中运行时,当我从欢迎页面(主页/索引视图)单击“登

我需要从用户的卡中捕获用户的X.509证书,并映射到用户表,以便在ASP.NET MVC中进行表单身份验证。我在VS 2008中创建了一个MVC(2版)项目,配置为使用默认模板在Vista上的本地IIS中的默认网站下作为虚拟目录运行,但在帐户/登录操作结果中添加了RequireAttribute。没有其他变化。使用本地IIS管理器,我创建了一个自签名证书并应用了它,然后将Account/Logon.aspx页面设置为需要SSL和客户端证书

在调试中运行时,当我从欢迎页面(主页/索引视图)单击“登录”链接时,它会使用https正确路由到Account/Logon.aspx,但不会提示输入证书。使用Dynatrace(awesome,),我可以看到响应状态被设置为403,但同样没有证书提示

作为健全性检查,我设置了一个默认asp.net web app项目,以在Vista中默认网站(与上面的MVC项目相同)的虚拟目录中运行,并将default.aspx页面配置为需要SSL和客户端证书,如上面的MVC项目所做的。运行它,工作正常,我得到证书提示,可以选择cert并输入卡的PIN,然后从代码后面的request.clientcertificate对象中读取我的X.509

在集成管道模式下,两个虚拟目录的应用程序池都设置为Classic.NET AppPool

救命啊

更新:
超级笨拙的解决方案正在进行中。我在MVC项目中添加了一个文件夹“Auth”和一个标记为SSL/Require client certificates的“GetCert.aspx”文件,然后在global.asax中添加了“routes.IgnoreRoute(“Auth/{*pathInfo}”)”。GetCert.aspx response.com的代码隐藏写入我想要从X.509获取的数据。然后我在LogOn.aspx中添加了一个jquery.get调用,它调用GetCert.aspx并将证书主题结果作为字符串返回LogOn.aspx中的一个div。我现在得到证书提示,并在我的MVC视图中得到结果,但这不是做到这一点的方法

我有一个有效的解决方案,在我的基本控制器类上使用forms身份验证和authorize属性,以便所有未经身份验证的请求都转到Account/LogOn。“登录页面发布”按钮路由到名为“授权”的操作,该操作由RequireHttps属性修饰,该属性可正确触发客户端证书提示。选择证书后,“授权”操作将解析HttpClientCertificate以获取所需的用户信息,并在“我的用户”表中进行匹配查找,并写入验证cookie。然后,我有一个HttpModule,它读取cookie以在AuthenticateRequest事件中创建自定义主体。这一切都很好。我在这里为下一期关于“忽略客户端证书”的IIS配置打开另一个问题:

可能对某人有用:和