自学内容网 自学内容网

什么是单点登录,如何实现,结合示例讲解

单点登录Single Sign-On, SSO)是一种认证机制,允许用户只需登录一次,就可以访问多个相互独立的应用系统,而无需每次重新登录。它通过在多个系统之间共享认证状态,简化用户体验,提高安全性和效率。

实现步骤:

  1. 认证中心:搭建一个统一的认证服务器,所有应用系统都依赖它进行认证。
  2. 用户登录:用户在认证中心登录,生成凭证(如Token或Session)。
  3. 凭证共享:通过Cookie、Token或OAuth等方式,在不同应用系统中验证凭证的合法性。
  4. 自动登录:用户访问其他系统时,通过凭证自动认证,无需再次登录。

常见技术:

  • OAuth 2.0SAMLJWT 是常用的SSO实现协议或方式。

在实现单点登录SSO)时,前端的工作主要涉及以下几点:

1. 检测登录状态

前端需要通过向SSO服务器发送请求来判断当前用户是否已登录:

  • 使用 CookieToken(如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)!