如何将用户凭据传递给Web服务?

问题描述 投票:0回答:3

我正在 Windows 应用程序中使用 WSDL 使用 Web 服务。当我尝试使用方法时,出现以下错误:-

HTTP 请求未经客户端身份验证方案授权 '匿名的'。从服务器收到的身份验证标头是“”

{“远程服务器返回错误:(401) 未经授权。”}

我有用户凭据,但不知道如何在 Windows 应用程序中使用 C# 代码传递它。

c# winforms web-services
3个回答
13
投票

这是它对我的作用:-

配置文件设置如下所示:-

<configuration>
    <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="bindingName"  >
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Basic" proxyCredentialType="None" realm=""/>
                <message clientCredentialType="UserName" algorithmSuite="Default"/>
              </security>
            </binding>

          </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://10.10.10.10:1880/testpad/services/Testwebservice"
                binding="basicHttpBinding" bindingConfiguration="bindingName"
                contract=testService.GetData" name="test_Port1" />
        </client>
    </system.serviceModel>
</configuration>

我在这里传递用户凭据:-

 var ser = new GetDataClient();
 ser.ClientCredentials.UserName.UserName = "userid";
 ser.ClientCredentials.UserName.Password = "Pa$$word1";

0
投票

您可以尝试使用此处提到的方法生成服务客户端代理。一旦您拥有 WCF 客户端代理的实例,它将具有一个属性

ClientCreditials
,您可以根据需要填充该属性。 希望这有帮助。


0
投票

在创建客户端的方法中添加以下代码

private void SetAuthCredentials<T>(ClientBase<T> client) where T : class
{
    client.ClientCredentials.UserName.UserName = _config.Login;
    client.ClientCredentials.UserName.Password = _config.Password;
    var httpBinding = (BasicHttpBinding)client.Endpoint.Binding;
    httpBinding.Security.Transport.ClientCredentialType =
        HttpClientCredentialType.Basic;
    httpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
}

这添加了基本身份验证方案的标头

© www.soinside.com 2019 - 2024. All rights reserved.