CAS-单点登录和联合身份验证服务

237 阅读2分钟

前言

它允许用户在一个地方登录后,能够访问多个受保护的应用程序,而不需要多次输入用户名和密码。CAS 由 Yale University 开发,并且是一个开源项目,现在由 Apereo Foundation 维护。

特点

单点登录(SSO):

用户只需要登录一次,就可以访问多个受保护的应用程序。 例如,用户在访问一个应用程序时登录,之后再访问其他受 CAS 保护的应用程序时,无需再次输入用户名和密码。 集中式身份验证:

所有应用程序的身份验证都由中央 CAS 服务器处理,简化了身份验证的管理。 管理员可以在一个地方集中管理用户身份和权限。 安全性:

用户的凭证(如用户名和密码)只在 CAS 服务器上存储和处理,减少了凭证泄露的风险。 CAS 支持多种安全协议和标准,如 SAML、OAuth 等。 灵活性:

CAS 可以与多种身份验证机制(如 LDAP、数据库、Active Directory 等)集成,提供灵活的身份验证方案。 支持多种编程语言和框架,如 Java、Python、Node.js、.NET 等。

原理

用户访问受保护的应用程序:

用户尝试访问一个受 CAS 保护的应用程序。 重定向到 CAS 服务器:

如果用户尚未登录,应用程序会将用户重定向到 CAS 服务器的登录页面。 用户登录:

用户在 CAS 服务器的登录页面输入用户名和密码。 CAS 服务器验证用户身份:

CAS 服务器验证用户的身份。如果验证成功,CAS 服务器会生成一个票据(ticket)。 重定向回应用程序:

CAS 服务器将用户重定向回原始应用程序,并附带一个票据(ticket)。 应用程序验证票据:

应用程序将收到的票据发送回 CAS 服务器进行验证。 CAS 服务器验证票据的有效性,并返回用户的身份信息。 用户访问应用程序:

应用程序根据用户的身份信息授予访问权限。

demo


if (to.path !== "/login") {  
if (whiteList.indexOf(to.path) !== -1) {  
next();  
} else {  
removeToken();  
if (window.location.href.indexOf("ticket") === -1) {  
//window.location.href = "/api/cas/login?service=http://localhost:8848/api";  
window.location.href = "/api/cas/login";  
} else {  
console.log(window.location.href);  
  
next();  
}  
//next({ path: "/login" });  
}  
} else {  
next();  
}

正是有了这个全局路由守卫导致如果访问的是不是login的话那么会跳转到/api/cas/login

proxy: {  
"/api": {  
target: "http:// 192.168.119.1:10095", // 移除末尾的 /api  
changeOrigin: true,  
rewrite: path => path.replace(/^\/api/, "")  
}  
},

vite.config.ts里边呢是有一个代理如下:

proxy: {  
"/api": {  
target: "http:// 192.168.119.1:10095", // 移除末尾的 /api  
changeOrigin: true,  
rewrite: path => path.replace(/^\/api/, "")  
}  
},

他会将路径变为http://192.168.119.1/cas/login