2016-07-21 36 views
1

我有一个小的WCF服务在内部网,我需要在其中实现身份验证。该服务通过http与不同的Java客户端进行通信(使用basicHttpBinding)。我试着配置,像这样httpBasicBinding与身份验证,没有消息或传输安全

<basicHttpBinding> 
    <binding> 
     <security mode="None"> 
     <message clientCredentialType="UserName"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 

绑定和增值服务行为

<behavior> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="LocalTasks.Services.Validators.IntegrationUserNameValidator,LocalTasks.Services"/> 
     </serviceCredentials> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 

但是调用这个服务不打我的自定义UserNamePassword验证。 我也尝试过相同的变体,但安全模式设置为消息并添加了证书。在这种情况下,验证器工作正常。

如何配置服务以通过basicHttpBinding验证用户身份,而没有任何消息或传输安全性?

回答

1

你不能那样做。您需要消息或传输安全性,以便在从客户端传输到服务器时加密凭证。

您确实应该使用消息或传输安全性。

您也可以使用TransportCredentialOnly,这将不需要SSL证书,但建议仅用于测试。

<basicHttpBinding> 
    <binding name="Authentication" > 
    <security mode="TransportCredentialOnly" > 
     <message clientCredentialType="UserName"/> 
    </security> 
    </binding> 
</basicHttpBinding> 
+0

因为它需要修改Java客户端的遗留代码。因此,没有任何方法可以将证书发送到服务器,而无需通过打开的http通道进行安全保护 – Anton

+0

如果你仍然无法加密,那么你可以使用安全模式'TransportCredentialOnly'。看我的编辑。 – cvlad

+0

我明白了。任何额外的需要? – Anton

相关问题