Аутентификация пользователя через веб-сервис REST в другом домене - asp.net - PullRequest
1 голос
/ 14 апреля 2011

Я хочу подключиться к веб-службе в другом домене для аутентификации пользователей.Сам веб-сервис является сервисом RESTful, написанным на Java.Данные передаются в и из него в формате JSON.

Сначала я попытался подключиться с помощью jQuery (см. Ниже)

        function Login()
    {
        $.ajax({
        url: "http://www.externaldomain.com/login/authenticate",  
        type: "POST",
        dataType: "json",
        contentType: "application/json",
        data: "{'emailAddress':'bob@bob.com', 'password':'Password1'}", 
        success: LoadUsersSuccess,
            error: LoadUsersError
        });         
    }
    function LoadUsersSuccess(){
        alert(1);
    }
    function LoadUsersError(){
        alert(2);
    }

Однако при проверке Firebug это вызвало метод 405 NotДопустимая ошибка.

На данном этапе, так как я впервые работаю с веб-сервисами, я действительно просто подумал, что это лучший способ сделать что-то?Стоит ли продолжать этот метод, чтобы найти решение, или лучше всего попытаться найти ответ на этот вопрос на стороне сервера?Если да, есть ли у кого-нибудь примеры, которые они могли бы опубликовать?

Большое спасибо

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Хорошо, чтобы обновить, где я нахожусь, я зарегистрировал Firebug и на внешнем сервере, и причина, по которой я получаю ошибку 405, заключается в том, что я делаю Get, а не Post.

Что мне нужно сделать, это отправить имя пользователя и пароль, а затем получить обратно GUID, который затем будет использоваться для любых будущих запросов. Я подумал, что наличия «type: post» в коде будет достаточно, но, видимо, нет. Кто-нибудь знает, где я могу пойти не так? Как я уже сказал, новичок в веб-сервисах и ничего из того, что я пробовал смотреть онлайн, не оказали никакого влияния. Большое спасибо

1 голос
/ 21 апреля 2011

Хорошо, я решил проблему, и я сделал это, вернувшись к C # и сделав это там вместо использования jQuery или JSONP, и использовал Json.Net для обработки полученных данных.Вот код:

protected void uxLogin_Click(object sender, EventArgs e)
{
StringBuilder data = new StringBuilder();
data.Append("{");
data.Append("'emailAddress': '" + uxEmail.Text + "', ");
data.Append("'password': '" + uxPassword.Text + "'");
data.Append("}");

byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
string url = System.Configuration.ConfigurationManager.AppSettings["AuthenticationURL"].ToString();

string JSONCallback = string.Empty;
Uri address = new Uri(url);

// Create the web request  
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

// Set type to POST  
request.Method = "POST";
request.ContentType = "application/json";
// Create a byte array of the data we want to send  

// Set the content length in the request headers  
request.ContentLength = byteData.Length;

// Write data  
using (Stream postStream = request.GetRequestStream())
{
    postStream.Write(byteData, 0, byteData.Length);
}

// Get response  
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
    // Get the response stream  
    StreamReader reader = new StreamReader(response.GetResponseStream());

    // Console application output  
    JSONCallback = reader.ReadToEnd().ToString();
}


if (!String.IsNullOrEmpty(JSONCallback))
{
    JObject jObject = JObject.Parse(JSONCallback);
    if ((bool)jObject["loginResult"] == false)
    {
        string errorMessage = jObject["errorMessage"].ToString();
        int errorCode = (int)jObject["errorCode"];
    }
    else
    {
        string idToken = jObject["idToken"].ToString();
        Session["Userid"] = idToken;
        Response.Redirect("~/MyDetails.aspx");
    }
}
else
{
    uxReturnData.Text = "The web service request was not successful - no data was returned";
}

}

Спасибо в любом случае:)

1 голос
/ 14 апреля 2011

Выполнять междоменные вызовы веб-службы в браузере очень сложно.Поскольку это потенциальная уязвимость безопасности, браузеры блокируют эти типы запросов.Тем не менее, есть обходной путь под названием JSONP.Если вы используете JSONP вместо обычного JSON, вы сможете выполнить междоменный запрос.

...