Ajax:Základní Auth a ověřovací cookie HTTP

Chci uložit hlavičku základního ověřování HTTP v ověřovacím souboru cookie, abych se nemusel zabývat hlavičkou autorizace v následujících požadavcích (používám jQuery):

authenticate: function(auth) {
    var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
    document.cookie = "Authorization: " + header;
    $.ajax({
        type: "GET",
        url: "http://someurl",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: auth.success,
        error: auth.error
    });
},

I když se zdá, že to funguje pro prvního uživatele, který se přihlásí, nefunguje to pro žádné další uživatele v relaci prohlížeče, protože následující autorizační hlavičky se přidávají a nepřepisují. Vím, že je možné přepsat soubor cookie pomocí name=value syntaxe, ale tato syntaxe se nevztahuje na autorizační hlavičku.

Existuje nějaký způsob, jak se zbavit staré autorizační hlavičky, jakmile se přihlásí nový uživatel?

Jakákoli pomoc by byla oceněna. Díky, JeHo

Odpověď

Zdá se, že to nefungovalo ani prvnímu uživateli. Problém byl v tom, že autorizační hlavička byla pravděpodobně nastavena prohlížečem dříve (když jsem použil autentizační dialog prohlížeče).

To, co nyní dělám, je ukládání přihlašovacích údajů do standardního souboru cookie name=value a ruční nastavení autorizační hlavičky.

Nastavte soubor cookie:

var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password);
document.cookie = "Authorization=" + header;

Přečtěte si cookie:

function getAuthCookie() {
   var cn = "Authorization=";
   var idx = document.cookie.indexOf(cn)

   if (idx != -1) {
       var end = document.cookie.indexOf(";", idx + 1);
       if (end == -1) end = document.cookie.length;
       return unescape(document.cookie.substring(idx + cn.length, end));
   } else {
       return "";
  }
}

Nastavte autorizační hlavičku:

    $.ajax({
        type: "GET",
        url: "http://someurl",
        contentType: "application/json; charset=utf-8",
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Authorization", getAuthCookie());
        },
        dataType: "json",
        success: auth.success,
        error: auth.error
    });

Zdá se to trochu trapné, ale funguje to.

Upozornění:Ujistěte se, že jste zakódovali všechna citlivá data, která ukládáte do souborů cookie, jinak by to vedlo k bezpečnostnímu problému. Další informace naleznete na CWE.