为公开部署的npm包处理CORS问题
公开部署的npm包处理CORS问题
嗨,这个场景我之前也帮人处理过,既然你的npm包要给任意域名的前端用,又不想维护一堆麻烦的域名白名单,给你几个实用的方案,你可以根据自己的API需求来选:
无身份验证需求:直接用通配符CORS配置
如果你的API是公开的,不需要用户携带Cookie、HTTP认证这类凭证,那最简单的办法就是在后端设置宽松的CORS规则:Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS Access-Control-Allow-Headers: Content-Type这样所有域名的前端都能正常调用你的API,缺点就是没法做用户身份关联,适合纯公开的接口场景。
需要身份验证:API密钥+动态Origin配置
要是你的API需要验证用户身份,别纠结白名单了,改用API密钥机制更靠谱:- 让使用你npm包的开发者先在你的平台注册,拿到专属的API密钥;
- 你的npm包在发起请求时,把这个密钥放到请求头里(比如
X-API-Key: 开发者的密钥); - 后端先验证这个密钥的合法性,只要密钥有效,就动态将
Access-Control-Allow-Origin设置为请求的Origin值,要是需要带凭证的话,再加上Access-Control-Allow-Credentials: true。
这样既不用维护一堆白名单,又能确保只有合法用户的请求能通过,安全性也有保障。
备选方案:让用户通过自身后端代理请求
要是你不想搞API密钥这套流程,也可以让使用你npm包的开发者,在他们自己的后端做个请求代理:前端调用自己的后端接口,再由他们的后端转发请求到你的API。这样CORS问题就转移到他们自己的后端处理了,你这边甚至不用配置CORS——因为后端之间的请求不受浏览器同源策略限制。不过这个方案会给开发者增加一点工作量,更适合本身就有后端服务的用户。
备注:内容来源于stack exchange,提问作者boomboxboy
相关产品推荐
相关产品推荐

