如何在使用 IIS Express 在 Visual Studio 2015 中调试时从 CAC 获取 Request.ServerVariables("CERT_SUBJECT")

How to obtain Request.ServerVariables("CERT_SUBJECT") from a CAC while debugging in Visual Studio 2015 with IIS Express

我有一个 ASP.NET 网页可以读取用户的 CAC 卡。发布到测试服务器时,它工作正常;然而,在我使用 IIS Express 的本地开发环境中,当使用 Request.ServerVariables("CERT_SUBJECT") 时,我得到空字符串。我能够检索“LOGON_USER”变量,但“CERT_*”都是空字符串。

目前我的项目设置包含

Anonymous Authentication = false
Windows Authentication = true
SSL Enabled = true   // Created the default IIS express cert.  Have also tried false with no luck

此外,我也尝试过这样修改applicationhost.config

<security>

    <access sslFlags="SslRequireCert"> <!-- originally none -->

</security>

<authentication>

    <anonymousAuthentication enabled="false" userName="" /> <!--originally true-->

    <basicAuthentication enabled="false" />

    <clientCertificateMappingAuthentication enabled="false" />

    <digestAuthentication enabled="false" />

    <iisClientCertificateMappingAuthentication enabled="true"> <!--originally false-->
    </iisClientCertificateMappingAuthentication>

    <windowsAuthentication enabled="true"> <!--originally false-->
        <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
        </providers>
    </windowsAuthentication>

</authentication>

关于我需要进行的进一步配置以允许我的开发环境在调试期间看到这些变量的任何想法?谢谢。

事实证明以下设置是正确的。项目属性应设置为

Anonymous Authentication = false
Windows Authentication = true
SSL Enabled = true

和 applicationhost.config 像这样

<access sslFlags="Ssl,SslNegotiateCert,SslRequireCert"> <!-- originally none -->
<anonymousAuthentication enabled="false" userName="" /> <!--originally true-->

<basicAuthentication enabled="false" />

<clientCertificateMappingAuthentication enabled="false" />

<digestAuthentication enabled="false" />

<iisClientCertificateMappingAuthentication enabled="true"> <!--originally false-->
</iisClientCertificateMappingAuthentication>

<windowsAuthentication enabled="true"> <!--originally false-->
    <providers>
        <add value="Negotiate" />
        <add value="NTLM" />
    </providers>
</windowsAuthentication>

此外,在web选项卡下的项目设置中,点击Create Virtual Directory按钮。

最后,查看项目属性。有一个名为 Ssl URL 的设置。收到。调试时,除非您的项目以 SSL 模式启动,否则它将以常规 http 地址启动并呈现访问禁止错误。将 Ssl URL 粘贴到浏览器中,然后按回车键。该页面现在将提示您输入 CAC 密码,您将能够使用 Request.ServerVariables.

查看 CERT 服务器变量