我有一个Web服务,需要一个soap标头并返回一个身份验证令牌。我已设法使用jquery将soap标头发布到web服务。问题是如何使浏览器在每个Web服务授权请求上发送经过身份验证的令牌。你的帮助会很大。我使用的有用链接如下: 参考:
代码:
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)
}
答案 0 :(得分:0)
如果响应提供肯定 - 将该令牌发送回您的服务器以存储在会话中。
答案 1 :(得分:0)
我有同样的情况,必须使用表单身份验证来保护我的网站的一部分(包括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服务,因为消息的重量轻,服务器代码没有任何变化。另外,在客户端中,您不必像在示例中那样手动构建消息。