SAML单点登录后样式丢失,CSS加载异常怎么办?
我们前端接入了公司统一的 SAML 单点登录,登录成功后跳转回原页面,但发现页面的样式完全乱了。本地开发和直接访问都正常,唯独经过 SAML 跳转回来就不对。我怀疑是相对路径问题,但试了改成绝对路径还是不行。
比如下面这段 CSS 是写在 public/styles/main.css 里的,引用方式是 <link href="/styles/main.css" rel="external nofollow" rel="stylesheet">,但 SAML 回调后浏览器 Network 里显示这个 CSS 返回的是 HTML 内容而不是 CSS,状态码却是 200。
body {
font-family: 'Inter', sans-serif;
background-color: #f8fafc;
margin: 0;
padding: 0;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
这通常是因为接入 SAML 的时候,那个认证中间件或者过滤器配置得太宽了,把静态资源请求也给拦截了。浏览器去加载 CSS 时没带上有效的 Session Cookie,或者 SAML 的 Cookie 属性(比如 SameSite)设置不当,导致后端以为你还没登录,就把登录页面的 HTML 塞给了
标签,浏览器一脸懵逼,样式自然就炸裂了。解决办法就是在后端配置里,把静态资源路径(比如 /public、/styles)排除在认证检查之外,让它们变成匿名可访问。
如果你用的是 Node.js 的 Express,大概得这么改,把静态资源托管放在认证中间件之前:
如果你用的是 Java (Spring Security) 或者 Nginx 做的反向代理,原理也是一样的,在拦截规则里加个白名单,放行
/styles/**或者/public/**。改完重启,绝对就好了。