什么是单点登录,如何实现,结合示例讲解
单点登录(Single Sign-On, SSO
)是一种认证机制,允许用户只需登录一次,就可以访问多个相互独立的应用系统,而无需每次重新登录。它通过在多个系统之间共享认证状态,简化用户体验,提高安全性和效率。
实现步骤:
- 认证中心:搭建一个统一的认证服务器,所有应用系统都依赖它进行认证。
- 用户登录:用户在认证中心登录,生成凭证(如Token或Session)。
- 凭证共享:通过Cookie、Token或OAuth等方式,在不同应用系统中验证凭证的合法性。
- 自动登录:用户访问其他系统时,通过凭证自动认证,无需再次登录。
常见技术:
- OAuth 2.0、SAML、JWT 是常用的SSO实现协议或方式。
在实现单点登录(SSO
)时,前端的工作主要涉及以下几点:
1. 检测登录状态
前端需要通过向SSO服务器发送请求来判断当前用户是否已登录:
- 使用 Cookie 或 Token(如JWT)从浏览器中获取凭证。
- 向SSO服务器验证用户凭证的有效性。
2. 重定向至登录页面
如果用户未登录,前端会将用户重定向到SSO登录页面。
if (!isLoggedIn()) {
window.location.href = 'https://sso.example.com/login?redirect=' + window.location.href;
}
redirect
参数确保用户登录后能返回原始页面。
注意:
除了返回url还需要传递其他参数,比如appId这些跟服务方约定的参数,以便认证系统完成验证,这个需要根据项目的实际情况来定。
3. 接收登录信息
用户在SSO服务器登录后,前端会接收到用户凭证(如Token),并将其存储到浏览器中,以便后续请求携带。
localStorage.setItem('token', receivedToken);
4. 跨域请求
由于SSO可能涉及多个域名,前端需要处理跨域请求:
- 设置 CORS 或使用隐藏的 iframe 来完成跨域认证。
- 确保SSO服务器允许这些跨域请求。
5. 登出逻辑
前端提供一个统一的登出按钮,点击后通知SSO服务器销毁登录状态,然后从各个子系统清除用户数据。
function logout() {
localStorage.removeItem('token');
window.location.href = 'https://sso.example.com/logout';
}
示例实现流程:
<!DOCTYPE html>
<html>
<head>
<title>SSO Demo</title>
</head>
<body>
<h1>Single Sign-On Demo</h1>
<button id="login-btn">Login</button>
<button id="logout-btn">Logout</button>
<script>
function isLoggedIn() {
return !!localStorage.getItem('token');
}
document.getElementById('login-btn').addEventListener('click', function() {
if (!isLoggedIn()) {
window.location.href = 'https://sso.example.com/login?redirect=' + window.location.href;
}
});
document.getElementById('logout-btn').addEventListener('click', function() {
localStorage.removeItem('token');
window.location.href = 'https://sso.example.com/logout';
});
// On page load, check login status and act accordingly
if (isLoggedIn()) {
console.log('User is logged in');
// Make authenticated requests
} else {
console.log('User is not logged in');
}
</script>
</body>
</html>
注意点:
- 确保SSO服务器支持跨域策略。
- 使用安全的存储方式(如HTTP-only Cookies)避免Token泄露。
- 使用HTTPS确保数据传输安全。
原文地址:https://blog.csdn.net/misstianyun/article/details/142450284
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!