将react-django临时站点放在基本auth后面,但是auth与端点的令牌auth冲突

时间:2019-12-17 20:38:19

标签: authentication axios basic-authentication staging

情况如何?

我有一个使用Django + React构建的登台站点。

您必须登录才能访问的API部分。我正在为此使用Django的令牌身份验证。

然后我想将整个网站置于基本身份验证的后面,以防止任何人意外绊倒它。

出了什么问题?

这意味着我需要在请求中传递两种身份验证方法。如here所述,这是可能的。

Authorization: Token lksdjf893kj2nlk2n3rl2dOPOnm, Basic YXNkZnNhZGZzYWRmOlZLdDVOMVhk

在用户登录后将其提供给用户后,便在我的JS代码中设置了令牌。

在第一次页面加载时触发基本身份验证,此后浏览器将其存储,并且我相信会自动将其附加到服务器具有以下标头的任何请求上:

WWW-Authenticate: basic

我已将Django配置为返回以下标头:

WWW-Authenticate: basic, token

当Authorization标头为空时,这成功导致通过axios发送的XHR请求附加基本标头。

问题是Authorization标头不为空,因为我需要在其中设置令牌值。

 const axiosConfig = {
    method: requestType,
    url: `${url}`,
    withCredentials: true,
    headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
    },
    data: payload
};

// If we're logged in then send our auth token
if (localStorage.auth_token) {
    // Axios can't see the basic authentication header here so we can't append.
    console.log(axiosConfig.headers.Authorization);

    // Basic auth will only get sent if I don't set anything here
    axiosConfig.headers.Authorization = `Token ${localStorage.auth_token}`;
}

此时,浏览器似乎不再添加基本标头,因此我的身份验证失败。

有没有解决的办法?

我想要一个全面的基本身份验证,因为我无法无意间在登台阶段公开任何内容,否则我必须完全依靠令牌身份验证和robots.txt,这不理想。

1 个答案:

答案 0 :(得分:0)

最后的答案是端口转发。

我删除了基本身份验证,关闭了端口80和443,然后使用端口转发将SSH映射到本地主机。

ssh -N -L 8755:127.0.0.1:443 user@ip_address