前端实现单点登录(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。
- 前端接收到回调请求后,需要将该
Ticket或Token发送到后台,验证用户身份并获取会话信息。 - 后台验证通过后,可以生成 JWT 或
Access Token作为登录凭证,前端可以将该凭证存储在localStorage或sessionStorage中。
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。
- 前端设置凭据传递:在
fetch或axios请求中,将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 防护等安全配置。