7

HTTP基本認証ヘッダーラインを認証Cookieに保存したいので、後続のリクエストで承認ヘッダーを処理する必要はありません(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
    });
},

これは最初にログインしたユーザーには機能するように見えますが、後続の認証ヘッダーが追加されて上書きされないため、ブラウザーセッション内の他のユーザーには機能しません。構文を使用してCookieを上書きできることは知っていname=valueますが、この構文は認証ヘッダーには適用されません。

新しいユーザーがログインしたら、古い認証ヘッダーを削除する方法はありますか?

どんな助けでもいただければ幸いです。ありがとう、JeHo

4

1 に答える 1

12

最初のユーザーにも機能しなかったようです。問題は、認証ヘッダーがおそらく以前にブラウザーによって設定されていたということでした(ブラウザーの認証ダイアログを使用したとき)。

私が今していることは、ログイン情報を標準のname = value cookieに保存し、認証ヘッダーを手動で設定することです。

Cookieを設定します。

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

クッキーを読んでください:

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

権限ヘッダーを設定します。

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

これは少し厄介に思えますが、機能します。

警告:Cookieに保存する機密データは必ずエンコードしてください。そうしないと、セキュリティの問題が発生します。詳細については、 CWEを確認してください。

于 2010-03-17T09:10:05.037 に答える