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

发布于 2024-09-25 14:53:01 字数 1112 浏览 5 评论 0原文

我需要从用户的卡中捕获用户的 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 响应的代码隐藏从 X.509 写入我想要的数据。然后,我在 LogOn.aspx 中添加了一个 jquery.get 调用,该调用调用 GetCert.aspx 并将证书主题结果作为字符串返回到 LogOn.aspx 中的 div。我现在得到了证书提示并在我的 MVC 视图中得到结果,但这不是执行此操作的方法!

I need to capture user's X.509 certificates from their cards and map to a user table for forms authentication in ASP.NET MVC. I have created an MVC (ver 2) project in VS 2008, configured to run as a virtual directory under the Default Web Site in the local IIS on Vista using the default template but added RequireHttpsAttribute to the Account/LogOn ActionResult. No other changes. Using the local IIS Manager, I created a self-signed cert and applied it, then set the Account/Logon.aspx page to Require SSL and Require client certificates.

Running in debug, when I click the 'Log On' link from the Welcome page (Home/Index view), it correctly routes to Account/Logon.aspx using https but no prompt for certificate. Using Dynatrace (awesome, http://ajax.dynatrace.com), I can see that the response status is getting set to 403 but again, no cert prompt.

As a sanity check, I set up a default asp.net web app project to run in a virtual directory in the default Web Site (same as MVC project above) in Vista and configured the default.aspx page to Require SSL and Require client certificates, as done in the MVC project above. Ran it, works fine, I get the certificate prompt and can choose cert and enter PIN for card and read my X.509 from request.clientcertificate object in the code behind.

The application pool for both virtual directories is set to Classic .NET AppPool in integrated pipeline mode.

Help?!

Update:
Super kludgy workaround in progress. I added a folder 'Auth' and an 'GetCert.aspx' file to it that is marked SSL/Require client certificates to the MVC project and then added "routes.IgnoreRoute("Auth/{*pathInfo}")" to the global.asax. The codebehind of the GetCert.aspx response.writes the data I want from the X.509. Then I added a jquery.get call in LogOn.aspx which calls GetCert.aspx and returns the cert Subject results as a string to a div in LogOn.aspx. I now get the cert prompt and get the results in my MVC view, but this can't be the way to do this!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

多孤肩上扛 2024-10-02 14:53:01

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

I have a working solution using forms authentication and the authorize attribute on my base controller class so all non-authenticated requests go to Account/LogOn. The logOn page post button routes to an action called Authorize which is decorated with the RequireHttps attribute which correctly triggers the prompt for the client cert. Once the cert is selected the Authorize action handles parsing the HttpClientCertificate for the user info I want and doing a match lookup in my users table and writes an authentication cookie. I then have an HttpModule that reads the cookie to create a custom Principal in the AuthenticateRequest event. This all works great. I'm opening another question for the next issue regarding IIS configuration of 'ignore client certificates' here: https://stackoverflow.com/questions/4141272/iis-6-ssl-client-certificates-configuration

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文