SSO登录后前端如何安全获取并存储用户信息?

A. 喜静 阅读 7

我们接入了公司统一的SSO系统,登录成功后会跳转回前端页面并带上code参数。现在的问题是:我该在前端怎么拿这个code换用户信息?直接用axios发请求到后端接口可以吗?而且拿到用户信息后存localStorage会不会有安全风险?

目前我在入口页面这样处理跳转后的URL:

<script>
  const urlParams = new URLSearchParams(window.location.search);
  const code = urlParams.get('code');
  if (code) {
    // 清除url中的code,避免刷新重复使用
    window.history.replaceState({}, document.title, window.location.pathname);
    // 调用后端接口换取用户信息
    fetch('/api/auth/sso?code=' + code)
      .then(res => res.json())
      .then(user => localStorage.setItem('user', JSON.stringify(user)));
  }
</script>

但总觉得这样不太对,好像把敏感逻辑放前端了,求指点正确做法。

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
梓淇
梓淇 Lv1
你的做法基本是对的,核心流程没问题。

SSO的标准流程就是前端拿code → 发给后端 → 后端去换token和用户信息 → 返回给前端。你那段代码里,前端只是把code传过去,实际换token的逻辑是在后端完成的,所以不存在把敏感逻辑放前端的问题。

但有几个点要注意一下:

后端那边一定要保证code只能使用一次,用完就失效,不然有重放攻击风险。另外后端返回给前端的用户信息应该是脱敏后的,比如只需要用户ID、昵称、头像这些,别把token啊、敏感字段啊返回来。

关于localStorage存用户信息,确实有XSS风险,但如果你们没有XSS漏洞那就没问题。这是前端存用户状态的常见做法,比存cookie更安全一点(cookie有CSRF问题)。如果想更安全,可以考虑:

用sessionStorage代替localStorage,关闭浏览器就清掉
或者存一个加密后的用户信息,后端返回时做个简单加密
关键是把token存httpOnly的cookie里,别存localStorage,前端只存用户基本信息

你现在的实现没大问题,把心放肚子里。唯一建议优化的是fetch请求可以加个错误处理 万一后端换用户信息失败了不至于静默失败。
点赞
2026-03-17 00:02