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

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

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

作为一个完整性检查,我设置了一个默认的asp.net Web应用程序项目,在Vista中的默认Web站点(与上面的MVC项目相同)中的虚拟目录中运行,并将default.aspx页面配置为Require SSL and Require client certificates ,就像上面的MVC项目一样.跑吧,工作正常,我得到证书提示,可以选择证书并输入PIN卡,并从后面的代码中的request.clientcertificate对象读取我的X.509.

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

救命?!

更新:
正在进行的超级kludgy变通办法.我向它添加了一个文件夹’Auth’和一个’GetCert.aspx’文件,标记为SSL /需要客户端证书到MVC项目,然后将“routes.IgnoreRoute(”Auth / {* pathInfo}“)”添加到全局的.asax. GetCert.aspx响应的代码隐藏.从X.509写入我想要的数据.然后我在LogOn.aspx中添加了一个调用GetCert.aspx的jquery.get调用,并将证书主题结果作为字符串返回给LogOn.aspx中的div.我现在得到证书提示并在我的MVC视图中获得结果,但这不是这样做的方法!

最佳答案 我有一个工作解决方案使用表单身份验证和我的基本控制器类上的authorize属性,所以所有未经过身份验证的请求都转到Account / LogOn. logOn页面发布按钮路由到名为Authorize的操作,该操作使用RequireHttps属性进行修饰,该属性正确触发客户端证书的提示.选择证书后,授权操作会处理解析HttpClientCertificate以获取我想要的用户信息,并在我的users表中执行匹配查找并编写身份验证cookie.然后,我有一个HttpModule,它读取cookie以在AuthenticateRequest事件中创建自定义Principal.一切都很好.我在这里打开关于’忽略客户端证书’的IIS配置的下一个问题的另一个问题:
https://stackoverflow.com/questions/4141272/iis-6-ssl-client-certificates-configuration

点赞