在php webservice和C#WCF客户端之间设置授权连接

时间:2011-07-05 12:44:54

标签: c# php wcf soap

我们的php webservice为客户提供网络功能。我们使用以下代码进行身份验证。

$client = new SoapClient("some.wsdl", 
                         array('login' => "some_name",
                               'password' => "some_password"
                         ));

客户端已使用C#构建,我们已经能够在没有身份验证的情况下建立连接,但我们无法应用身份验证。

我们应该为客户提供什么样的房产? 我已经尝试将此配置与用户名凭据结合使用。

        <basicHttpBinding>
            <binding name="webserviceControllerBinding">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Basic"/>
                </security>
            </binding>
        </basicHttpBinding>

client.ClientCredentials .UserName.UserName =“username”; client.ClientCredentials.UserName.Password =“password”;

我们的php服务使用什么样的安全性? 我们如何使用身份验证建立可靠的连接,但不使用证书或https。

3 个答案:

答案 0 :(得分:0)

尝试

<security mode="TransportWithMessageCredential">
   <message clientCredentialType="UserName" algorithmSuite="Default" />
</security>

更新:它应该是TransportWithMessageCredential模式

答案 1 :(得分:0)

答案 2 :(得分:0)

         MessageHeader header= MessageHeader.CreateHeader("My-CustomHeader","http://myurl","Custom Header.");

           using (phptoebiTestclient.ServiceReference1.webserviceControllerPortTypeClient client = new phptoebiTestclient.ServiceReference1.webserviceControllerPortTypeClient())
           {
               using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
               {
                   OperationContext.Current.OutgoingMessageHeaders.Add(header);
                   HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
                   byte[] toEncodeAsBytes    = System.Text.ASCIIEncoding.ASCII.GetBytes("username:password");                       
                   httpRequestProperty.Headers.Add("Authorization: Basic "+ System.Convert.ToBase64String(toEncodeAsBytes));                                              
                   OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
                   string str = client.getVacanciesReference("");
               }                                 
           }

上面的代码解决了我的问题(我使用这些网址作为参考)

http://caught-in-a-web.blogspot.com/2008/04/how-to-add-custom-http-header-in-wcf.html
http://en.wikipedia.org/wiki/Basic_access_authentication