使用Passport OIDC对接Active Directory时的CORS错误解决咨询
解决Passport OIDC对接Active Directory的CORS错误
核心问题
你现在踩的坑是用AJAX请求触发OIDC授权流程,这完全不符合OIDC授权码模式的设计逻辑。OIDC授权本来就需要浏览器直接跳转到AD的登录页面,而非通过前端发跨域AJAX请求——微软的login.microsoftonline.com服务器不会给你的http://localhost域名添加Access-Control-Allow-Origin头,你也没有权限修改AD服务器的响应头。
最快解决方法:修改前端登录触发逻辑
把你的Axios请求换成直接跳转后端的登录路由,彻底绕开CORS限制:
ad_login: function() { // 直接跳转到后端AD登录接口,不用AJAX请求 window.location.href = 'http://localhost:3001/api/v1/auth/ad'; }
这样浏览器会直接发起普通GET请求到后端,后端再重定向到AD的授权页面,整个流程都是浏览器原生跳转,不存在跨域AJAX的CORS拦截问题。
处理Edge的/userinfo接口错误
Edge中出现的错误,是因为/userinfo接口返回的Access-Control-Allow-Origin是通配符*,但你的请求带了credentials(withCredentials: true)——CORS规则明确要求:带凭证的请求不能用通配符作为允许的origin。
检查后端的/userinfo路由,确保它使用你全局配置的corsOptions(origin设为http://localhost,credentials为true),如果是单独配置的CORS,改成和全局一致:
// 给/userinfo路由绑定正确的CORS配置 router.get('/userinfo', cors(corsOptions), (req, res) => { // 你的接口逻辑 });
关于CORS代理的说明
完全没必要使用CORS代理,因为问题根源是请求方式错误,换成本地跳转就解决了。代理只会增加额外的架构复杂度,反而容易引入新问题。
内容的提问来源于stack exchange,提问作者ubunut-user20
相关产品推荐
相关产品推荐

