4

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

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

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

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

帮助?!

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

4

1 回答 1

2

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

于 2010-11-10T04:42:08.777 回答