Аутентификация SOAP через веб-сервис с использованием jQuery - PullRequest
5 голосов
/ 27 февраля 2011

У меня есть веб-сервис, который ожидает мыльный заголовок и возвращает токен аутентификации. Мне удалось опубликовать мыльный заголовок на веб-сервис с помощью jquery. Проблема заключается в том, как заставить браузер отправлять аутентифицированный токен при каждом запросе авторизации через веб-сервис. Ваша помощь будет очень ценной. Полезные ссылки, которые я использовал, приведены ниже: Справка:

  1. Защита веб-службы ASP.Net с использованием SOAP

  2. Вызов веб-сервиса из Jquery (публикация заголовка SOAP)

Код:

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

Ответы [ 2 ]

0 голосов
/ 24 мая 2012

У меня была такая же ситуация: мне нужно было защитить часть моего веб-сайта (включая веб-службы) аутентификацией по формам, а также иметь незащищенную публичную часть, например формы входа / регистрации, CSS-файлы, JS-файлы ...

Я решил проблему входа в систему, назначив общедоступный веб-сервис (не защищенный проверкой подлинности с помощью форм), который может обрабатывать вашу функцию входа в систему.

Ваша функция входа в систему должна выглядеть следующим образом:

[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, из-за небольшого веса сообщения с нулевыми изменениями в коде сервера.Кроме того, в клиенте вам не нужно вручную создавать сообщение, как в вашем примере.

0 голосов
/ 07 марта 2011

, если ответ дает положительный результат - отправьте этот токен обратно на сервер для сохранения в сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...