数码常识网
霓虹主题四 · 更硬核的阅读氛围

单点登录实现原理讲解 日常维护方法与实用案例

发布时间:2025-12-12 15:01:34 阅读:263 次

单点登录是什么?

你有没有这样的经历:早上打开电脑,先登录公司内网系统,再进邮箱、OA、考勤系统,每个都要输一遍账号密码。要是能一次登录,所有系统都自动认出来该多好?这其实就是单点登录(Single Sign-On,简称 SSO)要解决的问题。

简单说,单点登录就是用户在一个系统里登录后,再访问其他关联系统时,不用重复输入账号密码,系统会自动识别身份。

SSO 的核心思路

要做到一次登录处处通行,关键在于“信任”和“凭证传递”。就像你在酒店前台登记完,拿一张房卡,凭这张卡可以进出房间、健身房、餐厅。各个地方都认可这张卡的有效性,不需要你每次都出示身份证。

在技术上,这个“房卡”通常是一个加密的令牌(Token),比如 JWT(JSON Web Token)。用户首次登录认证中心后,系统生成一个令牌,之后访问其他系统时,把这个令牌带上,目标系统验证通过就放行。

常见的实现方式:基于 OAuth 2.0 和 JWT

现在大多数 SSO 方案都基于 OAuth 2.0 协议。举个例子:你想用微信登录某网站,点击“微信登录”按钮后,网站把你跳转到微信的登录页。你输入账号密码后,微信返回一个授权码给网站,网站再用这个码去换一个访问令牌(Access Token)。

这个令牌里包含了你的用户信息,比如 openid、昵称、头像等,网站拿到后就知道你是谁,完成登录。

<!-- 示例:OAuth 2.0 授权码流程 -->
&#x2F;authorize?response_type=code&client_id=your_client_id&redirect_uri=callback_url&scope=user_info

// 用户同意后,重定向并携带 code
https://your-site.com/callback?code=AUTH_CODE

// 网站后端用 code 换取 access_token
POST /token HTTP/1.1
Host: api.weixin.qq.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=AUTH_CODE&client_id=...&client_secret=...

JWT 如何用于 SSO

JWT 是一种自包含的令牌格式,由三部分组成:头部、载荷、签名。载荷里可以存放用户 ID、过期时间等信息,签名用来防篡改。

认证中心签发 JWT 后,浏览器将其存入 Cookie 或 localStorage。后续请求中,前端自动附加这个令牌到请求头:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxx

各个业务系统接收到请求后,用相同的密钥验证签名,解析出用户信息,无需查数据库,效率高。

实际部署中的注意事项

跨域问题是个常见坑。如果各个系统的域名不同,Cookie 默认不会共享。这时候可以用中央认证服务部署在独立域名下(如 sso.company.com),通过 iframe 或重定向方式统一处理登录状态。

安全性也不能忽视。令牌必须设置合理过期时间,支持主动注销机制。虽然 JWT 本身无状态,但可以通过维护黑名单或短期令牌+刷新机制来控制登出。

另外,企业内部常用 SAML 协议做 SSO,尤其在传统 IT 架构中。而互联网产品更倾向使用 OAuth 2.0 + OpenID Connect,接入方便,移动端支持好。