Wix与SvelteKit跨域SSO请求如何携带身份提供商会话Cookie?
跨域SSO实现方案及问题排查
能不能用会话Cookie实现跨域SSO?
可以,但跨域Ajax请求(比如你用的fetch)携带Cookie有严格的浏览器安全限制,这正是你当前碰壁的原因。像Google这类SSO能跨域识别登录状态,要么是用了顶级域名共享Cookie(比如.google.com下的子域名),要么是通过重定向流程完成身份验证,而非直接发起跨域Ajax请求。
为什么你的fetch请求带不上Cookie?
即便你设置了credentials: 'include'和CORS响应头,仍可能因为以下原因失败:
- Wix的会话Cookie大概率标记了
SameSite=Strict或SameSite=Lax:Strict:完全禁止跨域请求携带Cookie,只有同源请求才会发送。Lax:仅允许GET方法的顶级导航请求(比如页面跳转、a标签点击)携带Cookie,Ajax请求不在此列。
- 另外,当
Access-Control-Allow-Credentials设为true时,Access-Control-Allow-Headers里的*是无效的,必须明确指定允许的请求头(不过你是GET请求,这个影响不大)。
可行的解决方法:重定向式SSO流程
你补充的思路完全正确,跨域场景下,重定向才是可靠携带会话Cookie的方式,具体流程如下:
- 在你的SvelteKit应用中添加SSO登录按钮,点击后跳转至Wix上的身份验证端点(即你创建的那个能返回JWT的接口)。
- 该端点处于Wix同源环境,能正常读取用户会话Cookie,验证身份后生成JWT。
- Wix端点验证通过后,重定向回你的SvelteKit应用,并将JWT通过安全的方式传递(不建议用URL参数,避免被日志记录)。
- 你的SvelteKit应用接收JWT后,存入本地存储或创建自身会话,完成SSO登录。
优化建议
- 不要直接把JWT放在URL参数里,可以让Wix端点先将JWT存入后端共享存储,重定向时传递一个临时凭证,再由你的SvelteKit后端去获取JWT。
- 确认Wix的会话Cookie是
SameSite=Lax(多数平台默认配置),这样重定向时能正常携带。 - 在SvelteKit中用服务器端路由(
+server.js)处理Wix返回的凭证,避免前端直接接触敏感信息。
内容的提问来源于stack exchange,提问作者ejkreboot
相关产品推荐
相关产品推荐

