21 votos

IIS alojado en WCF service + autenticación de Windows en IIS + TransportCredentialOnly/autenticación de Windows en basicHttpBinding

Quiero crear un WCF service alojado en iis 6 y deshabilitar la autenticación anónima en IIS. Y no usar SSL.

Así que la única forma que tenemos es el uso de basicHttpBinging con TransportCredentialOnly, itsn no?

Puedo crear un directorio virtual, el conjunto de la Autenticación Integrada de Windows y desactive la casilla "Habilitar el Acceso Anónimo".

Aquí está mi web.config:

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="MyBinding">
                    <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <services>
            <service name="Samples.ServiceFacadeService" behaviorConfiguration="ServiceFacadeServiceBehavior">
                <endpoint address="" binding="basicHttpBinding" bindingName="MyBinding"
                          contract="Samples.IServiceFacadeService">
                </endpoint>
            </service>
        </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceFacadeServiceBehavior">
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

Usted puede ver que yo aun no he incluido MEX-enpoint para el intercambio de metadatos. Sólo un extremo y un enlace para que con TransportCredentialOnly de seguridad.

Pero cuando intenta iniciar el servicio (la invocación de un método a través del proxy de cliente) me dieron excepción en el registro de Sucesos:

Excepción: Sistema.ServiceModel.ServiceActivationException: El servicio '/wcftest/ServiceFacadeService.svc' no puede ser activado debido a un excepción durante la compilación. El mensaje de excepción: la Seguridad la configuración de este servicio requiere 'Anónimo' de Autenticación, pero es no está habilitado para la aplicación de IIS que aloja este servicio.. ---> Sistema.NotSupportedException: Seguridad la configuración de este servicio requiere 'Anónimo' de Autenticación, pero es no está habilitado para la aplicación de IIS que aloja este servicio.

No tengo idea de por qué mi servicio requieren Anónimo auth? Por qué?

16voto

jezell Puntos 2430

Echa un vistazo a este post por Nicholas Allen de la WCF equipo acerca de este problema exacto:

http://blogs.msdn.com/drnick/archive/2007/03/23/preventing-anonymous-access.aspx

8voto

Shrike Puntos 2594

La respuesta encontrada jezell. Gracias. He mezclado bindingName y bindingConfiguration :

<endpoint address="" binding="basicHttpBinding" bindingName="MyBinding"
          contract="Samples.IServiceFacadeService">
</endpoint>

Eso es correcto:

<endpoint address="" binding="basicHttpBinding" **bindingConfiguration**="MyBinding"
          contract="Samples.IServiceFacadeService">
</endpoint>

7voto

Sixto Saez Puntos 9582

El extremo MEX todavía puede ser el problema (ver este post). Pruebe a deshabilitar MEX como este:

<services>
    <!-- Note: the service name must match the configuration name for the service implementation. -->
    <service name="MyNamespace.MyServiceType" behaviorConfiguration="MyServiceTypeBehaviors" >
        <!-- Add the following endpoint.  -->
        <!-- Note: your service must have an http base address to add this endpoint. -->
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>
</services>

<behaviors>
    <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors" >
            <!-- This disables it. -->
            <serviceMetadata httpGetEnabled="false" />
        </behavior>
    </serviceBehaviors>
</behaviors>



Aquí es un buen post sobre el afianzamiento de MEX.

3voto

user333701 Puntos 116

Uso basicHttpBinding por su extremo mex y aplicar el mismo bindingConfiguration:



1voto

wcfdude Puntos 11

Para obtener VS proyecto de servicio wcf (nuevo proyecto de ejemplo) para trabajar con la autenticación en IIS, usted tiene que:

1) Permitir el acceso Anónimo en IIS
2) Prefijo de sus métodos públicos con un atributo como este:

[PrincipalPermission(SecurityAction.Demand, Role = "MyADGroup")]
public string SendMyMessage(string Message)
{...}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X