前端单点登录

475 阅读3分钟

前端实现单点登录(SSO)时,需要进行一些必要的配置来与 CAS 服务器或其他认证服务器进行通信。以下是基本步骤和配置说明:

1. 配置 CAS 服务器地址

前端需要知道 CAS 服务器的地址,以便将用户重定向到 CAS 服务器进行认证。

javascript
复制代码
const CAS_SERVER_URL = 'https://your-cas-server.com/cas';
const CLIENT_APP_URL = 'https://your-app.com';

2. 配置重定向逻辑

  • 当用户访问受保护资源(例如需要登录才能访问的页面)时,检查用户是否已登录。
  • 如果未登录,将用户重定向到 CAS 服务器的登录页面。
javascript
复制代码
// 示例代码:检查用户登录状态并重定向到 CAS 服务器
function checkLogin() {
  if (!isUserLoggedIn()) {
    // 重定向到 CAS 登录页面
    window.location.href = `${CAS_SERVER_URL}/login?service=${CLIENT_APP_URL}/callback`;
  }
}

// 检查是否有有效的登录状态(例如存储在 localStorage 中的 token)
function isUserLoggedIn() {
  return !!localStorage.getItem('auth_token');
}

3. 处理 CAS 服务器的回调

在用户登录成功后,CAS 服务器会将用户重定向回客户端应用,并附带一个服务票据(Service Ticket)或 Token

  • 前端接收到回调请求后,需要将该 TicketToken 发送到后台,验证用户身份并获取会话信息。
  • 后台验证通过后,可以生成 JWT 或 Access Token 作为登录凭证,前端可以将该凭证存储在 localStoragesessionStorage 中。
javascript
复制代码
// 示例代码:解析回调 URL 中的 Service Ticket
function handleCasCallback() {
  const urlParams = new URLSearchParams(window.location.search);
  const ticket = urlParams.get('ticket');

  if (ticket) {
    // 调用后端 API 验证 Ticket,并获取用户会话信息
    fetch(`${CLIENT_APP_URL}/api/validate?ticket=${ticket}`)
      .then((response) => response.json())
      .then((data) => {
        // 假设验证成功,后台返回 auth_token
        localStorage.setItem('auth_token', data.auth_token);
        window.location.href = '/'; // 跳转到首页或原来请求的页面
      });
  }
}

4. 配置退出逻辑

  • 用户退出时,前端需要清除本地存储的会话凭证(如 auth_token),然后重定向到 CAS 服务器的登出页面。
  • 确保所有登录的客户端应用也同步退出。
javascript
复制代码
function logout() {
  localStorage.removeItem('auth_token'); // 清除本地 token
  window.location.href = `${CAS_SERVER_URL}/logout?service=${CLIENT_APP_URL}`; // 重定向到 CAS 服务器的登出页面
}

5. 设置跨域请求(如果前后端分离)

前端与 CAS 服务器或后端之间可能涉及跨域请求。确保以下配置可以支持跨域访问:

  • 后端设置跨域:在后端服务器上允许跨域访问,特别是允许前端的客户端 URL。
  • 前端设置凭据传递:在 fetchaxios 请求中,将 credentials 设置为 "include" 以携带 Cookie 或其他凭据。
javascript
复制代码
fetch('https://your-backend.com/api/validate', {
  method: 'POST',
  credentials: 'include', // 携带凭据
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ ticket }),
});

6. 配置 HTTPS

为确保安全性,特别是在生产环境中,前端和 CAS 服务器都需要使用 HTTPS,防止敏感信息(如 Token 或 Cookie)在传输过程中被窃取。

7. 防止 CSRF 攻击

  • 对于 SSO 系统,建议在请求中加入 CSRF Token,防止跨站请求伪造攻击。
  • 前端可从后端获取 CSRF Token,并在每次请求中附带该 Token。

总结

实现单点登录的前端配置主要包括:

  • 配置 CAS 服务器 URL 和客户端应用 URL。
  • 配置重定向逻辑,将用户重定向到 CAS 服务器的登录页面。
  • 处理登录回调,验证 Service Ticket 并获取会话信息。
  • 配置退出逻辑,确保前端和 CAS 服务器同步登出。
  • 设置跨域请求、HTTPS、CSRF 防护等安全配置。