Estimados compañeros,
Les escribo porque estoy con un problema en el trabajo que no podemos sacar adelante. Y tiene que ver con la configuración de WCF.
Nuestra solución tiene una arquitectura típica de WebServer(IIS6)->AppServer(WCF, hosteado en un servicio windows), todo corriendo en el mismo dominio. El IIS tiene usuarios anónimos deshabilitados y autenticación windows integrada habilitada.
Luego también tiene en el web.config:
<identity impersonate="true" /> y <authentication mode="Windows" />
En la web app, tomamos bien el usuario y podemos autorizar correctamente al mismo, basandonos en sus roles (usando Authorization Manager).
Ahora queremos que el app server pueda obtener dicho usuario, que el mismo se propague hasta el servicio.
Estamos usando un NetTCPBinding común con su configuración por defecto (seguridad Transport y clientCredentialType Windows). Pero cuando ponemos esta configuración en el web server, no logramos que llegue el usuario y nos da una excepción: "The service does not allow you to log on anonymously.".
Esto la web app desde Cassini (Web developer server de Visual Studio) funciona bien, llegando el usuario al servicio WCF sin problemas).
Cualquier pista, dato, condolencias son bienvenidas =)
PD: configs:
CLIENTE
<netTcpBinding>
<binding name="HighThroughputTcp" maxBufferPoolSize="
2147483647"
<readerQuotas maxDepth="32" maxStringContentLength="5242880"
maxArrayLength="
2147483646" maxBytesPerRead="4096" maxNameTableCharCount="5242880" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
<binding name="SecureTcpBinding">
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://server:8010/FirmasService" binding="netTcpBinding"
bindingConfiguration="HighThroughputTcp" contract="FirmasServiceReference.IFirmasService"
name="NetTcpBinding_IFirmasService">
<identity>
<servicePrincipalName value="xxxxxx/RegistroDeFirmas" />
</identity>
</endpoint>
<endpoint address="net.tcp://server:8010/SoporteService" binding="netTcpBinding"
bindingConfiguration="SecureTcpBinding" contract="SoporteServiceReference.ISoporteService"
name="NetTcpBinding_ISoporteService">
<identity>
<servicePrincipalName value="xxxxxx/RegistroDeFirmas" />
</identity>
</endpoint>
<endpoint address="net.tcp://server:8010/DictamenesService"
binding="netTcpBinding" contract="DictamenesServiceReference.IDictamenesService"
bindingConfiguration="SecureTcpBinding" name="NetTcpBinding_IDictamenesService">
<identity>
<servicePrincipalName value="xxxxxx/RegistroDeFirmas" />
</identity>
</endpoint>
</client>
SERVIDOR
<bindings>
<netTcpBinding>
<readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="
2147483646" maxBytesPerRead="4096" maxNameTableCharCount="5242880"/>
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="RegistroDeFirmas.Services.SoporteService">
<endpoint address="net.tcp://localhost:8010/SoporteService" binding="netTcpBinding" contract="RegistroDeFirmas.Services.Contracts.ISoporteService">
<identity>
<servicePrincipalName value="xxxxx/RegistroDeFirmas"/>
</identity>
</endpoint>
<endpoint address="net.tcp://localhost:8010/SoporteService/mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
<service name="RegistroDeFirmas.Services.FirmasService">
<endpoint address="net.tcp://localhost:8010/FirmasService" binding="netTcpBinding" bindingConfiguration="HighThroughputTcp" contract="RegistroDeFirmas.Services.Contracts.IFirmasService">
<identity>
<servicePrincipalName value="xxxxx/RegistroDeFirmas"/>
</identity>
</endpoint>
<endpoint address="net.tcp://localhost:8010/FirmasService/mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
<service name="RegistroDeFirmas.Services.DictamenesService">
<endpoint address="net.tcp://localhost:8010/DictamenesService" binding="netTcpBinding" contract="RegistroDeFirmas.Services.Contracts.IDictamenesService">
<identity>
<servicePrincipalName value="xxxxxx/RegistroDeFirmas"/>
</identity>
</endpoint>
<endpoint address="net.tcp://localhost:8010/DictamenesService/mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>