IE 11 未在 API 调用中传递授权标头

Posted

技术标签:

【中文标题】IE 11 未在 API 调用中传递授权标头【英文标题】:IE 11 not passing Authorization header in API call 【发布时间】:2019-11-06 19:54:54 【问题描述】:

堆栈:部署在 AWS 上的 ReactJS、axios、api

在我的 reactjs 应用程序中,我正在使用 axios 调用部署在 aws 上的 API。此应用在 chrome 和 firefox 中运行良好,但在 IE 11 中失败。

所有 api 均已正确配置为允许在访问控制标头 中进行授权

我正在使用下面的代码在请求中添加授权标头和 accessToken

   const axiosInstance = axios.create(
  baseURL: `https://abc.api.nonprod.org/`
);

export const createTokenHeaders = (idToken, accessToken) => (
  authorization: `Bearer $idToken`,
  accessToken: `Bearer $accessToken`
);
// Add a request interceptor
export const reqInterceptor = config =>
  // get the bearer token and add it in the header
  Auth.currentSession()
    .then(data => 
      const idToken = data.getIdToken().getJwtToken();
      const accessToken = data.getAccessToken().getJwtToken();
      // eslint-disable-next-line no-param-reassign
      config.headers = Object.assign(, config.headers, createTokenHeaders(idToken, accessToken));
      return config;
    )
    .catch(err => 
      console.log(err);
      throw new Error('Error getting bearer token');
    );

axiosInstance.interceptors.request.use(reqInterceptor);

export const performGet = (uri, queryParams = , headers) => 
  const requestParams = 
    params: queryParams,
    headers
  ;
  return axiosInstance.get(uri, requestParams);
;

当我从 localhost:3000 在 chrome 中运行此应用程序时,chrome 正确调用 OPTIONS 请求,然后使用正确的 Authorization 标头获取请求。

但是当我在 IE 中运行同一个应用程序时,它没有调用 OPTIONS 请求,也没有在 GET 请求中传递 Authorization 标头(但是它正在传递 accessToken 标头)。

【问题讨论】:

你有没有试过用F12开发者工具检查是否有错误?另外,参考this thread,建议您检查一下您是否已将该网站添加到IE的信任站点列表中。尝试从中删除。另外,这里有个similar thread,你可以查一下。 区分大小写,也许吧?见developer.microsoft.com/en-us/microsoft-edge/platform/issues/…(这里指的是Edge,但提到IE进行相同类型的比较)。 查看***.com/questions/45792360/… 【参考方案1】:

您的 IE 是否在增强保护模式下运行? 这似乎不是代码问题。 https://www.npmjs.com/package/react-native-axios

react-native-axios 支持 IE11。 使用 f12 调试器并检查网络流量中未找到的 url。

【讨论】:

【参考方案2】:

您可能需要设置 withCredentials: true 才能将授权标头传递给 CORS 请求。

【讨论】:

以上是关于IE 11 未在 API 调用中传递授权标头的主要内容,如果未能解决你的问题,请参考以下文章

授权标头不适用于 cors [关闭]

防止 nuxt auth 将授权标头发送到外部 url

Azure 授权 - 让未经身份验证的用户调用 api

Angularjs - 未在 Safari 中添加授权标头

如何在 POSTMAN 环境中添加授权标头?

simple-auth-token JWT 授权未设置授权标头