2 votes

Utilisation de l'authentification avec Ajax.Request

Actuellement, j'ai une application Palm WebOS qui utilise une requête Ajax pour se connecter à un service web en utilisant une authentification de base. Pour envoyer le nom d'utilisateur et le mot de passe, je les inclus simplement dans l'URL (c'est-à-dire http://username:password@ip-address:port/) ce qui fonctionne très bien, sauf lorsque le mot de passe contient autre chose que des caractères alphanumériques (par exemple, un utilisateur m'a récemment envoyé un email avec un "@" et un "&" dans son mot de passe, et il n'a pas pu se connecter parce que les symboles n'étaient pas interprétés correctement pour l'URL). Y a-t-il un moyen d'envoyer les informations d'identification dans l'URL afin de permettre aux utilisateurs d'utiliser autre chose que des caractères alphanumériques dans leurs mots de passe?

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

La réponse est (j'ai supprimé l'URL pour des raisons de sécurité):

{"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": ""

3voto

Imre L Points 4130

Envoyer les informations d'authentification de base avec l'en-tête: 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 }
});

0voto

Pekka 웃 Points 249607

Vous pourriez essayer d'encoder le nom d'utilisateur et le mot de passe avant de les envoyer en utilisant encodeURIComponent.

Plus généralement, avez-vous testé cette méthode dans IE8? Car elle ne fonctionne plus pour les requêtes normales - le schéma username:password@ a été désactivé pour des raisons de sécurité.

Cependant, il se pourrait qu'ils soient toujours autorisés dans les requêtes Ajax.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X