Chrome 的 HTTP BASIC 身份验证注销问题

Posted

技术标签:

【中文标题】Chrome 的 HTTP BASIC 身份验证注销问题【英文标题】:HTTP BASIC Authentication logout issue with Chrome 【发布时间】:2016-05-14 10:34:21 【问题描述】:

我正在使用以下方法从使用基本 HTTP 身份验证的 HTTP 服务器注销。 这适用于 IE 和 FireFox 。但在 Chrome 的情况下,即使用户名和密码错误,我也能获取 html 文件。

在 Chrome 中,流程是,我收到“********** Failed ***********”错误,然后显示请求的页面(some_server_file.html)。

但在 IE/Chrome 中,流程是,我收到“********** Failed ***********”错误,然后登录对话框提示输入凭据。

不知何故,即使在第一次请求因错误的凭据而失败后,Chrome 也会发送正确的用户名和密码。

谁能解决 Chrome 问题?

function logout() 
    jQuery.ajax(
            type: "get",
            url: "some_server_file.html",
            async: false,
            username: "wronguser",
            password: "wrongpass",
            headers: "Authorization": "Basic xxx"
        )
        .success(function () 
            console.log("********** Success ***********");
        )
        .fail(function () 
            console.log("********** Failed ***********");
        );
    return false;

谢谢

【问题讨论】:

我认为这可能会对您有所帮助。它显然可以在 Chrome 54 中运行,也可能在更高版本上运行。本质上,您发送不正确的凭据以清除 chrome 中的身份验证缓存。有关详细信息,请参阅***.com/a/30308402/1917897。 【参考方案1】:

基本身份验证并非旨在管理注销。

如果您希望能够注销用户,您可以在您的服务器上创建一个端点,返回 HTTP 403(禁止)状态代码。这将触发浏览器“注销”/清除基本身份验证缓存。

User clicks logout button --> 
Ajax call to /logout which will return HTTP 403 --> 
Browser basic authentication cache will be cleared

【讨论】:

@JavaUser 有帮助吗? 在我的情况下,从服务器返回 401 而不是 403 工作

以上是关于Chrome 的 HTTP BASIC 身份验证注销问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTTP-Basic 身份验证发出 HTTP GET 请求

使用JAVA请求需要Basic身份验证的网页

默认发送 BASIC auth,而不是等待 HTTP 401

HTTP基本身份验证背后的Django Rest框架

HTTP验证大法(Basic Auth,Session, JWT, Oauth, Openid)

身份验证不起作用