前后端单点登录方案的核心是[单点登录(SSO),即用户在一次登录后,可以在多个应用之间自由切换,无需再次进行登录验证。 这种方案在企业级应用中非常常见,能够有效提升用户体验和系统安全性。 实现方式有很多种,大家自行掌握,我来讲一下Token实现:生成包含用户信息的Token,通过地址栏或Cookie传输,适用于分布式系统。
- 用户首次登录时,前端将用户凭证发送到认证服务器。
- 认证服务器验证凭证后,创建一个Token并返回给前端。
- 前端将该Token存储在本地(如Cookie或localStorage)。
- 用户访问其他应用时,前端附带Token请求其他服务。
- 其他服务发送Token到认证服务器以验证Token的合法性。
- 如果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));
总结下实现步骤:
- 搭建认证服务器:首先,您需要搭建一个统一的认证服务器,用于处理用户的登录请求和生成票据。常见的认证服务器有CAS、OAuth2.0等。
- 前端页面登录:前端页面需要向认证服务器发送登录请求。通常,这个请求会包含用户的用户名和密码。认证服务器验证通过后,会生成票据并返回给前端页面。
- 前端存储票据:前端页面在获取到票据后,需要将其存储在Cookie或LocalStorage中。这样,在后续的请求中,前端页面就可以自动携带这个票据了。
- 后端服务验证票据:当后端服务接收到前端页面的请求时,它会从请求中提取票据,并向认证服务器发送验证请求。如果票据有效,则认证服务器会返回用户信息给后端服务;否则,后端服务会拒绝请求。
- 处理请求并返回结果:如果票据有效且用户信息正确,后端服务会处理请求并返回结果给前端页面。前端页面在接收到结果后,会将其展示给用户。