Web Services soapheader身份验证

b1zrtrql  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(148)

我无法让我的客户端识别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);

    }
vmpqdwk3

vmpqdwk31#

您必须将验证参数值作为TRUE传递给头。请检查完整的解决方案here

vkc1a9a2

vkc1a9a22#

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

应用该代码

jogvjijk

jogvjijk3#

试试这个

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;
 }

调用Web服务时,请使用上述方法对服务进行身份验证,如下所示

WebserviceObject CallWebService = new WebserviceObject();
 common.AuthValidatoin(CallWebService);

相关问题