soapheader 身份验证

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

我无法让我的客户重新确认 Visual Studio 添加到代理类中的 AuthHeaderValue 我看过很多例子,但找不到任何关于如何解决这个问题的信息。

香皂类

     public class AuthHeader : SoapHeader
     {
        public string Username;
        public string Password;

     }

网络服务

     public class Service1 : System.Web.Services.WebService
     {
        public AuthHeader Authentication; ** where does visual studio append value to proxy 

    [SoapHeader("Authentication", Required = true)]
    [WebMethod]
    public string security()
    {
        if (Authentication.Username == "test" &&
            Authentication.Password == "test")
        {
            return "authenticated";
        }
        else
        {
            return "get lost";
        }            
    }

客户

   static void Main(string[] args)
    {
        ServiceReference1.AuthHeader auth = new ServiceReference1.AuthHeader();
        auth.Username = "test";
        auth.Password = "test";

        ServiceReference1.Service1SoapClient ser = new ServiceReference1.Service1SoapClient();
        ser.AuthHeaderValue = auth;  ** does not reconise authheadervalue
        String message = ser.security();
        Console.WriteLine(message);

    }
c# web-services authentication soap
3个回答
0
投票

您必须将身份验证参数值作为标头的

TRUE
传递。 检查完整的解决方案这里


0
投票
WebService service = new WebService();
       service.Authentication.Username = "a";
       service.Authentication.Password = "a";
       string str = service .CheckAuthn();

应用该代码


0
投票

试试这个

public ServiceAuthHeader Credentials;
public class ServiceAuthHeader : SoapHeader
{
    public string Username;
    public string Password;
}

安全方法更改如下

 public static string Validate(ServiceAuthHeader soapHeader)
 {
        string error_msg = "Pass";
        if (soapHeader == null)
        {
            error_msg = "No soap header was specified.";
        }
        else if (soapHeader.Username == null || soapHeader.Username == "")
        {
           error_msg = "Username was not supplied for authentication in SoapHeader.";
        }
        else if (soapHeader.Password == null || soapHeader.Password == "")
        {
           error_msg = "Password was not supplied for authentication in SoapHeader.";
        }

        else if (soapHeader.Username != "test" || soapHeader.Password != "test")
        {
             error_msg = "Please pass the proper username and password for this service.";
        }

      return error_msg;
 }

在某个公共类或其他地方保留带有您的凭据的方法

 public static void AuthValidatoin(WebserviceObject callwebservice)
 {
       ServiceAuthHeader serviceAuthHeaderValue = new LocalERPWebService.ServiceAuthHeader();
       serviceAuthHeaderValue.Username = "test";
       serviceAuthHeaderValue.Password = "test";
       callwebservice.ServiceAuthHeaderValue = serviceAuthHeaderValue;
 } 

当您调用网络服务时,使用上述方法来验证服务,如下所示

 WebserviceObject CallWebService = new WebserviceObject();
 common.AuthValidatoin(CallWebService);
© www.soinside.com 2019 - 2024. All rights reserved.