单点登录SSO

148 阅读2分钟

前后端单点登录方案的核心是[单点登录(SSO),即用户在一次登录后,可以在多个应用之间自由切换,无需再次进行登录验证。 这种方案在企业级应用中非常常见,能够有效提升用户体验和系统安全性。 实现方式有很多种,大家自行掌握,我来讲一下Token实现:生成包含用户信息的Token,通过地址栏或Cookie传输,适用于分布式系统。

  1. 用户首次登录时,前端将用户凭证发送到认证服务器。
  2. 认证服务器验证凭证后,创建一个Token并返回给前端。
  3. 前端将该Token存储在本地(如Cookie或localStorage)。
  4. 用户访问其他应用时,前端附带Token请求其他服务。
  5. 其他服务发送Token到认证服务器以验证Token的合法性。
  6. 如果Token有效,服务器允许访问资源。

以下是一个简化的Token生成和验证流程的伪代码示例:

认证服务器端:

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

密钥,用于Token签名

SECRET_KEY = 'your-secret-key'

创建Token

def create_token(user_id): s = Serializer(SECRET_KEY, expires_in=3600) return s.dumps({'user_id': user_id})

验证Token

def verify_token(token): s = Serializer(SECRET_KEY) try: data = s.loads(token) return data['user_id'] except Exception as e: return None

前端(用户端):

// 存储Token

localStorage.setItem('sso_token', token);

// 发送带有Token的请求

fetch('other-service.com/resource', {

headers: {

'Authorization': 'Bearer ' + localStorage.getItem('sso_token')

}

})

.then(response => response.json())

.then(data => console.log(data))

.catch(error => console.log(error));

总结下实现步骤:

  1. 搭建认证服务器:首先,您需要搭建一个统一的认证服务器,用于处理用户的登录请求和生成票据。常见的认证服务器有CAS、OAuth2.0等。
  2. 前端页面登录:前端页面需要向认证服务器发送登录请求。通常,这个请求会包含用户的用户名和密码。认证服务器验证通过后,会生成票据并返回给前端页面。
  3. 前端存储票据:前端页面在获取到票据后,需要将其存储在Cookie或LocalStorage中。这样,在后续的请求中,前端页面就可以自动携带这个票据了。
  4. 后端服务验证票据:当后端服务接收到前端页面的请求时,它会从请求中提取票据,并向认证服务器发送验证请求。如果票据有效,则认证服务器会返回用户信息给后端服务;否则,后端服务会拒绝请求。
  5. 处理请求并返回结果:如果票据有效且用户信息正确,后端服务会处理请求并返回结果给前端页面。前端页面在接收到结果后,会将其展示给用户。
在实际应用中,Token的生成和验证过程需要更加安全,例如使用加密的签名方法,并定期轮换Token以增强安全性。