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 调用中传递授权标头的主要内容,如果未能解决你的问题,请参考以下文章