2008-09-19 32 views

Respuesta

3

No estoy del todo seguro de si esto es lo que está buscando, pero aquí tiene.

MyClient client = new MyClient(); 
    client.ClientCredentials.UserName.UserName = "u"; 
    client.ClientCredentials.UserName.Password = "p"; 
+2

Parece que no funciona para el proxy NTLM. Necesitaba completar 'client.ClientCredentials.Windows' para que funcione. –

+7

esto es una credenciales de canal, no credenciales de proxy http –

+1

@aloneguid Bastante seguro en WCF hace doble deber. Sí, es una locura. –

1

No estoy seguro de si esto es lo que está buscando, pero a continuación se muestra un código de trabajo para autenticar utilizando las credenciales del cliente.

Dim client As ProductServiceClient = New ProductServiceClient("wsHttpProductService") 
    client.ClientCredentials.UserName.UserName = "username" 
    client.ClientCredentials.UserName.Password = "password" 
    Dim ProductList As List(Of Product) = client.GetProducts() 
    mView.Products = ProductList 
    client.Close() 
2

Resolví esto agregando un usuario de Active Directory al Pool de aplicaciones> Identidad en lugar de servicios de red. Este usuario también está en un grupo que tiene permiso para navegar por Internet a través del servidor proxy. También agregue este usuario al grupo IIS_WPG en el servidor host del cliente.

En el código siguiente, el primer bit autentica al cliente con el servicio WCF. El segundo bit supone pasar los crendentials al servidor proxy interno para que el cliente llame a un servicio WCF en el servidor DMZ. Pero no creo que la parte de proxy funcione. De todos modos, estoy dejando el código.

 // username token credentials 
     var clientCredentials = new ClientCredentials(); 
     clientCredentials.UserName.UserName = ConfigurationManager.AppSettings["Client.Mpgs.Username"]; 
     clientCredentials.UserName.Password = ConfigurationManager.AppSettings["Client.Mpgs.Password"]; 
     proxy.ChannelFactory.Endpoint.Behaviors.Remove(typeof(ClientCredentials)); 
     proxy.ChannelFactory.Endpoint.Behaviors.Add(clientCredentials); 

     // proxy credentials 
     //http://kennyw.com/indigo/143 
     //http://blogs.msdn.com/b/stcheng/archive/2008/12/03/wcf-how-to-supply-dedicated-credentials-for-webproxy-authentication.aspx 
     proxy.ChannelFactory.Credentials.Windows.ClientCredential = new System.Net.NetworkCredential 
                    (
                     ConfigurationManager.AppSettings["Client.ProxyServer.Username"] 
                     , ConfigurationManager.AppSettings["Client.ProxyServer.Password"] 
                     , ConfigurationManager.AppSettings["Client.ProxyServer.DomainName"] 
                    ); 

En mi web.config He utilizado el siguiente,

<system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="True" proxyaddress="http://proxyServer:8080/" bypassonlocal="False" autoDetect="False" />  </defaultProxy> 
</system.net> 
<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_ITest" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/> 
       <security mode="TransportWithMessageCredential"> 
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
        <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default"/> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://wcfservice.organisation.com/test/test.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITest" contract="Test.Test" name="WSHttpBinding_ITest"/> 
    </client> 
</system.serviceModel> 

El código anterior funciona de mi máquina local. Cuando cargo el código en un servidor de desarrollo, no funciona. Miré los registros del servidor proxy y se muestra a continuación,

2011-06-14 05:21:10 2 11.11.11.11 - - authentication_failed DENEGADO "Organización/Finanzas" - 407 TCP_DENIED CONNECT - tcp wcfservice.organisation.com 443/- - - 11.11.11.11 612 161 -

2011-06-14 05:21:10 6 11.11.11.152 ServerName $ - policy_denied DENEGADO "Organización/Finanzas" - 403 TCP_DENIED CONNECT - tcp wcfservice.organisation.com 443/- - - 11.11.11.205 185 361 -

Nuestro administrador de sistema inteligente DF agregó un usuario de Active Directory al Pool de aplicaciones> Identidad en lugar de servicios de red. Este usuario también está en un grupo que tiene permiso para navegar por Internet a través del servidor proxy. También agregue este usuario al grupo IIS_WPG en el servidor host del cliente.

Esto funcionó para mí.

Cuestiones relacionadas