【问题标题】:ASP.NET MVC 2 and request client certificate (Smart Card authentication)ASP.NET MVC 2 和请求客户端证书(智能卡身份验证)
【发布时间】:2010-09-29 20:00:08
【问题描述】:

我需要从他们的卡中捕获用户的 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 视图中得到结果,但这不是这样做的方法!

【问题讨论】:

    标签: asp.net-mvc ssl client certificate smartcard


    【解决方案1】:

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

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2015-02-26
    • 2011-04-09
    • 2013-10-07
    相关资源
    最近更新 更多