【问题标题】:Client side certificate javascript request客户端证书javascript请求
【发布时间】:2017-10-31 13:23:30
【问题描述】:

我们正在开发一个带有 python 烧瓶后端的反应应用程序。通常它一切正常,但是当将它放在具有客户端证书要求的服务器后面时,它几乎可以工作。它在 Chrome 中运行良好,而不是在 Firefox 中。

在浏览器中输入url时发送证书,react请求时不发送证书。

  1. 主请求正常完成,页面显示出来。
  2. 加载页面时向后端/backend/version 发出请求。
  3. 该请求失败,nginx 说

<html>
<head><title>400 No required SSL certificate was sent</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx/1.10.3</center>
</body>
</html>
  1. 当我打开 devtools 并粘贴相同的 url 时,它工作正常。客户端证书由浏览器发送。

我们如何提出请求:

const fetchVersion = () => (dispatch, getState) => {
  return dispatch({
  [CALL_API]: {
    endpoint: `${API_ROOT}/version`,
    method: 'GET',
    headers: {
      "Authorization": authHeader(),
    },
    types: [FETCH_VERSION_REQUEST,
      {
        type: FETCH_VERSION_SUCCESS,
        payload: (action, state, res) => {
          const contentType = res.headers.get('Content-Type');
          if (contentType && ~contentType.indexOf('json')) {
            return res.json().then(json => json.response);
          }
        },
      },
      {
      type: FETCH_VERSION_FAILURE,
      meta: (action, state, res) => checkIfInvalidToken(action, state, res, dispatch),
    }
    ],
  },
});
};

缺少什么?为什么 Firefox 不像 Chrome 那样将证书附加到请求中?

【问题讨论】:

标签: javascript reactjs firefox nginx client-certificates


【解决方案1】:

您可以尝试通过将[CALL_API].credentials 值显式指定为include 来查看问题是否得到解决

根据the documentation 默认值为omit,但firefox需要include始终发送cookie,即使是跨域调用。

关于您问题中的示例,代码可能会变成这样:

  [CALL_API]: {
    endpoint: `${API_ROOT}/version`,
    credentials: 'include',
    method: 'GET',
    headers: {
      "Authorization": authHeader(),
    },
...and so on

在纯实验目的的实验室中,我想我已经重现了您使用 Chrome 和 Firefox 报告的类似行为,而在这个实验室中,credentials: 'include' 解决了这个问题:video available here。

【讨论】:

  • 关于 [fetch() 在 Firefox 中使用 SSL 客户端身份验证失败](stackoverflow.com/a/39417601/1657028)
  • 完美运行,谢谢。虽然打破了开发模式,但这很容易用一个标志来解决。
猜你喜欢
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
相关资源
最近更新 更多