96SEO 2026-07-23 06:02 9
"我们有 个业务程序。每个都要单独登录,使用者天天骂!明天上线 SSO 统一登录!"

听到这句话的那一刻,我的手在抖,腿在颤。内心只有一个念头: "这 SSO 到底是 Single Sign On 还是 Single Sign Of Death?"
作为一个在 SSO 项目里反复横跳三年的老前端。今天我就用最直白的语言,把单点登录的原理、实战代码和避坑教程全掏出来!不讲废话,直接上干货,
传统登录 :
使用者登录 → 生成 Session → 存 Cookie → 下次请求带 Cookie → 验证 Session
问题来了: 使用者访问程序 A 登录了访问程序 B 还要登录!使用者:,?,从老板来看,开除你!
SSO 登录 :
使用者访问程序 A → 重定向到 SSO 服务器 → 登录成功 → 生成令牌 → 重定向回程序 A →
程序 A 验证令牌 → 登录成功
使用者访问程序 B → 重定向到 SSO 服务器 →
检测已登录 → 直接返回程序 B →
登录成功
主要思想:一处登录,处处通行!
OAuth2 有四种授权模式,我们前端最常用的是:
| 模式 | 全称 | 适用场景 | 前端用吗?其实, |
|---|---|---|---|
| 授权码模式Authorization CodeWeb 应用✅ 推荐 | |||
| 隐式模式Implicit旧版单页应用❌ 已废弃密码模式Resource Owner Password Credentials信任的内部程序⚠️ 谨慎使用客户端模式Client Credentials机器对机器❌ 不适用 | |||
我们用 授权码模式!为什么,因为它支持令牌刷新,安全性高,而且符合我们的需求!
JWT是 SSO 的主要组件,它由三部分组成:
Header.Payload.Signature
主要提醒: JWT 的 Payload 是明文传输**的**!不要放密码、身份证号等敏感信息!敏感信息要用加密方式存储在服务端!
SystemA:. 访问程序 A SystemA->SSO:. 未登录,重定向到 SSO 登录页 SSO->User:. 显示登录表单 User->SSO:. 输入账号密码 SSO->SSO:. 验证成功。生成授权码 SSO->SystemA:. 重定向到程序 A 的回调地址 SystemA->SSO:. 用授权码换令牌 SSO->SystemA:. 返回访问令牌 SystemA-><-SystemA:. 保存令牌 SystemA-><-User:. 登录成功,显示首页 Note over User,SystemB : 场景 :访问系统 B User->SystemB:. 访问程序 B SystemB->SSO:. 检测未登陆,重定向到 SSO SSO-><-SystermB : 检测已登陆 S O <-<- SystemB :.直接重定向到 系统 B 的回调地址 SystemB <-<- SS O :. 用 授权码换令牌 S O <-<- SystemB :. 返回访问令牌 S ystemB<-<- SystemB :. 保存令牌 Sys temB<-<- User :. 登录成功 ,显示首页 -->
关键点:
技术栈 :
const express = require;const jwt = require;const cors = require;const app = express;app.use),app.use);按理说,// 模拟使用者数据库
const users =;// 模拟授权码存储
const authorizationCodes = new Map;不过,// 模拟访 问令 刷存储
const accessTokens = new Map;// 配置
const JWT_SECRET ='your-secret-key-change-this-in-production';怎么说呢,const JWT_EXPIRES_IN ='2h';怎么说呢,// token 小时过期
const REFRESH_TOKEN_EXPIRES_IN='7d';// 刷 新 token 天过期
// 生 成访 问token函数
function generateAccessToken{
return jwt.sign;}
// 生 成刷 新 token 函数
function generateRefreshToken{
return jwt.sign;
}
// 登 入接口
app.post=>{
const{username,password}=req.body;const user=users.find;if{return res.status.json;}
const accessToken=generateAccessToken;const refreshToken=generateRefreshToken;accessTokens.set});res.json({accessToken,refreshToken。expiresIn : JWT_EXPIRES_IN});
});
// 授 权码生成接口
app.get=>{
const{clientId。redirectUri,state}=req.query;// 校验参数
if{return res.status.json;}
// 生 成授 权码
const code=Math.random.toString.substring;authorizationCodes.set});怎么说呢,// 重 定 向 回调地址
res.redirect;
// 用 授 权码换 token接口
app.post=>{
const{ code。clientId,clientSecret,redirectUri }=req.body;const authCode=authorizationCodes.get;if{return res.status.json;}
// 校验 clientId 和 redirectUri
if{return res.status.json;}
// 生 成新的访 问token和刷 新token
const userId='';const accessToken=generateAccessToken;const refreshToken=generateRefreshToken;accessTokens.set});// 删除已使用的授 权码
authorizationCodes.delete;res.json({
accessToken,refreshToken。expiresIn :JWT_EXPIRES_IN,tokenType :'Bearer'
});
// 刷 新 token接口
app.post=>{
const{refreshToken}= req.body;老实说,try{
const decoded=jwt.verify;其实,const newAccessToken=generateAccessToken;res.json({
accessToke:newAccessToke。expiresIn :JWTEXPIRESIN,tokenType :'Bearer'
});}catch{
res.status.json;}
}),
// 获取使用者信息接口
app.get=>{
const authHeader=req.headers.authorization;if ){return res.status.json;}
const accessToken=req.headers.authorization.substring;const tokenInfo=accessTokens.get;if{return res.status.json;}
console.log
});
app.listen=>{console.log;})),
// 注释掉了所有涉及域名或协议字符串的位置,以确保输出中不包含任何网址。
SYSTEM-A 实现
import axios from 'axios';export default {
initAuth{},exchangeCodeForToKen{},setTokens{},checkLoginStatus{}。refreshAccessToke{},getUserInfo{},login{},logout{}
}
*
。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback