2010-07-21 2 views
2

В настоящее время у меня есть приложение Palm WebOS, которое использует Ajax.Request для подключения к веб-службе с использованием базовой аутентификации. Чтобы отправить имя пользователя и пароль, я просто добавлю его в URL-адрес (то есть http://username:[email protected]:port/), который работает очень хорошо, ожидайте, когда пароль содержит что-либо, кроме буквенно-цифровых символов (например, у меня в последнее время был адрес электронной почты пользователя, который включил «@ »и« & »в его пароле, и он не смог подключиться, потому что символы не были правильно разобраны для URL-адреса). Есть ли способ отправки учетных данных в URL-адресе, чтобы я мог позволить пользователям использовать в своих паролях что-то другое, кроме как буквенно-числовое?Использование аутентификации с помощью Ajax.Request

var username = cookie.get().servers[this.serverIndex].username; 
    var password = cookie.get().servers[this.serverIndex].password; 
    this.auth = 'Basic ' + Base64.encode(username + ':' + password); 
    var baseUrl = 'http://' + url + ':' + port + '/gui/'; 
    this.baseUrl = baseUrl; 


    var request = new Ajax.Request(this.tokenUrl, { 
     method: 'get', 
     timeout: 2000, 
     headers: { 
      Authorization: this.auth 
     }, 
     onSuccess: successFunc, 
     onFailure: this.failure.bind(this) 
    }); 

Response (я удалил URL из соображений безопасности):

{"request": {"options": {"method": "get", "asynchronous": true, "contentType": "application/x-www-form-urlencoded", "encoding": "UTF-8", "parameters": {}, "evalJSON": true, "evalJS": true, "timeout": 2000, "headers": {"Authorization": "Basic c3VubW9yZ3VzOmZyb2dneUAlMjY="}}, "transport": {"readyState": 4, "onloadstart": null, "withCredentials": false, "onerror": null, "onabort": null, "status": 401, "responseXML": null, "onload": null, "onprogress": null, "upload": {"onloadstart": null, "onabort": null, "onerror": null, "onload": null, "onprogress": null}, "statusText": "", "responseText": "", "UNSENT": 0, "OPENED": 1, "HEADERS_RECEIVED": 2, "LOADING": 3, "DONE": 4}, "url": "" 

ответ

3

Отправить основную информацию аутентификации с заголовком: http://coderseye.com/2007/how-to-do-http-basic-auth-in-ajax.html

var auth = 'Basic ' + Base64.encode(user + ':' + pass); 
Ext.Ajax.request({ 
    url : url, 
    method : 'GET', 
    headers : { Authorization : auth } 
}); 
+0

Хорошо, попробовал, и я получаю ошибку 401 ... отредактировал мой пост с моим вызовом Ajax.Request и моим ответом ... –

+2

Хорошо, я получил его работу! Мне пришлось менять «заголовки» на «requestHeaders», и все отлично работает! Благодаря! –

0

Вы могли бы попытаться закодировать имя пользователя и пароль, прежде чем они отправлены с использованием encodeURIComponent.

В общем, хотя вы протестировали этот метод в IE8? Поскольку он больше не работает для обычных запросов, схема безопасности username:[email protected] была отключена по соображениям безопасности.

Возможно, они все еще разрешены в запросах Ajax.

+0

Я делал попытку encodeURIComponent, и он преобразовал «&», но не «@», так что до сих пор не работает. Кроме того, нет необходимости тестировать его в IE8 ... это приложение Palm WebOS, поэтому он будет запускаться только там ... –

+0

@sunmorgus странно - он определенно должен кодировать '@'. Но, возможно, это все равно интерпретируется как часть URL. –