【问题标题】:SOAP Authentication via web service using jQuery使用 jQuery 通过 Web 服务进行 SOAP 身份验证
【发布时间】:2011-07-05 06:31:52
【问题描述】:

我有一个需要soap 标头并返回身份验证令牌的Web 服务。我已经设法使用 jquery 将肥皂标头发布到 web 服务。问题是我如何让浏览器在每个请求通过 Web 服务进行授权时发送经过身份验证的令牌。您的帮助将不胜感激。我使用的有用链接如下: 参考:

  1. Securing ASP.Net Web Service using SOAP

  2. Calling Webservice from Jquery (Posting SOAP Header)

代码:

function logIn(username, password, token) {
        var soapMessage =
        '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> \
        <soap:Body> \
        <SecuredWebServiceHeader  xmlns="http://tempuri.org/"> \
        <Username>' + username + '</Username> \
        <Password>' + password + '</Password> \
        <AuthenticatedToken>' + token + '</AuthenticatedToken> \
        </SecuredWebServiceHeader> \
        </soap:Body> \
        </soap:Envelope>';

        $.ajax({
            url: "http://localhost/wstest/Service.asmx/AuthenticateUser",
            type: "POST",
            dataType: "xml",
            data: soapMessage,
            complete: endLogin,
            contentType: "text/xml; charset=\"utf-8\""
        });

        return false;
    }

    function endLogin(xmlHttpRequest, status) {
        alert(xmlHttpRequest.responseXML)
    }

【问题讨论】:

    标签: jquery web-services soap forms-authentication


    【解决方案1】:

    如果响应提供肯定 - 将该令牌发送回您的服务器以存储在会话中。

    【讨论】:

      【解决方案2】:

      我遇到了同样的情况,必须使用表单身份验证来保护我网站的一部分(包括 Web 服务),并且还有一个不受保护的公共部分,例如登录/注册表单、CSS 文件、JS 文件...

      我通过指定一个可以处理您的登录功能的公共 Web 服务(不受表单身份验证保护)解决了登录问题。

      您的登录功能应如下所示:

      [WebMethod(EnableSession=true)]
      [ScriptMethod]
      public ResponseBase<bool> DoLogin(LoginCredentials Credentials)
      {
              try
              {
                  // Perform login with credentials
      
                  if (loginOK)
                  {
                      FormsAuthentication.SetAuthCookie(/* Your user identification here */, true);
                  }
                  return new ResponseBase<bool> { Code= true};
              }
              catch (Exception _ex)
              {
                  // Save your log
                  return new ResponseBase<bool> { Message = "Incorrect Login" };
              }
      }
      

      您的客户将收到表单身份验证 cookie 和您对登录的响应。稍后您可以通过评估响应中的 Code 属性来评估登录是否成功。

      ResponseBase 类如下所示:

      [Serializable]
      [DataContract]
      public class ResponseBase<T>
      {
          /// <summary>
          /// Return code.
          /// </summary>
          [DataMember]
          public T Code { get; set; }
      
          /// <summary>
          /// Message.
          /// </summary>
          [DataMember]
          public string Message { get; set; }
      }
      

      最后但同样重要的是,我鼓励您使用 JSON 而不是 XML 调用您的 Web 服务,因为消息的重量很轻,服务器代码的更改为零。另外,在客户端中,您不必像在您的示例中那样手动构建消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 2016-01-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多