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

本文关键字:之间 设置 授权 连接 客户端 C#WCF php Web 服务 | 更新日期: 2023-09-27 18:01:04

我们的php Web服务为客户端提供Web功能。我们使用了以下代码来进行身份验证。

$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="用户名";客户ClientCredentials.UserName.Password="密码";

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

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

似乎我必须将身份验证放在soaphead中
http://ericphan.info/blog/2010/6/3/adding-custom-http-header-to-all-wcf-requests.html
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c96c8f6e-0711-4ba1-a97c-008f44610f0e/
http://www.codeproject.com/KB/webservices/SOAPHeaderAuthentication.aspx
根据互联网上的一些例子
但我还没有为我的案例喷气式飞机找到一个例子。

         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("");
               }                                 
           }

上面的代码已经解决了我的问题(我使用这些URL作为参考(

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

尝试

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

更新:它应该是TransportWithMessageCredential模式