ServiceSecurityContext.Current.WindowsIdentity.Name为null

时间:2012-08-29 15:23:56

标签: wcf

我正在使用带证书身份验证的邮件安全性

        <basicHttpBinding>
            <binding name ="customBinding">
                <security mode="Message">
                    <message clientCredentialType="Certificate"/>
                </security>
            </binding>
        </basicHttpBinding>

我正在尝试记录客户端用户名,当我这样做时:

ServiceSecurityContext.Current.WindowsIdentity.Name

我得到了空。如何在使用此安全模式时检索客户端的用户名?

2 个答案:

答案 0 :(得分:0)

 <basicHttpBinding>
        <binding name="BasicHttpEndpointBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>

ServiceSecurityContext类使用Windows身份验证

答案 1 :(得分:0)

我没有什么可以测试的,但是您可以尝试将transport-Window与message-Certificat混合使用。我真的不确定,如果可能的话。

<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="expires" content="0" />    
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />

以及您的 web.config

<basicHttpBinding>
  <binding name ="customBinding">
     <security mode="Message">  
             <message clientCredentialType="Certificate" />  
             <transport clientCredentialType="Windows"/>
      </security>    
   </binding>
</basicHttpBinding>

供参考: 消息Windows https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/message-security-with-a-windows-client

消息证书https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/message-security-with-a-certificate-client

我通过带有Transport-Security(ssl)的basicHttpBinding绑定了客户端的用户名:

<system.web><authentication mode="Windows"/></system.web>

且没有ssl:

<security mode="Transport">
     <transport clientCredentialType="Windows"/>
</security>

请确保 IIS 配置了身份验证-已启用Windows身份验证

希望这可以帮助正在处理此问题的人。