什么是cas

CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。CAS 是 耶鲁大学(Yale University)发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。
cas流程

cas是一项很标准的技术,虽然从今天看有点过时,不过并不影响它的重要。我只是想吐槽提供cas的厂商很垃圾~

完成cas登录操作

  • java
  • php ... 根本跑不通 估计是php版本更新太快 无法跟进,也有厂商说有新接口,但不能适用于目标机构
  • net ... 不在开发栈
  • asp ... 过时了
  • go ... 反正没见过
  • node 同上

所以 重点是java的登录,因为java的无法接入spring cloud 遂采用跳转方式单开端口处理认证问题(基于这个思路,我们解决了所有语言的cas登录问题)。

java'cas登录设置

1.拿到demo
2.修改demo下WEB-INF/web.xml 按照机构的要求改 服务器地址,IP地址等信息,修改demo下index.jsp大致如:

<%@page import="java.util.Map"%>
<%@page import="java.security.Principal" %>
<%@page import="cn.hutool.crypto.SecureUtil" %>
<%@page import="org.jasig.cas.client.authentication.AttributePrincipal" %>
<%@ page import="cn.hutool.core.date.DateUtil" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="cn.hutool.core.util.URLUtil" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%
    String uid = request.getRemoteUser();
    String str = "";
    Principal principal = request.getUserPrincipal();
    AttributePrincipal aPrincipal = (AttributePrincipal)principal;
    Map<String, Object> map = aPrincipal.getAttributes();
    String dateStr = DateUtil.today();
    map.put("key", SecureUtil.md5(uid + "kkkkkkkksecret" + dateStr));
// 此处进行了简单加密,用于下一个阶段的验证,可以自定规则
    response.setCharacterEncoding("UTF-8");
    StringBuilder decodeStr = new StringBuilder("?");
    Iterator<String> it = map.keySet().iterator();
        while (it.hasNext()) {
            String k = it.next();
            decodeStr.append(k).append("=").append(URLUtil.encode((String) map.get(k))).append("&");
    }
//        定义的spring的回调地址 自己服务端需要处理逻辑的地方
            response.sendRedirect("/api/cas/login"+decodeStr);
%>

3.在服务器安装tomcat环境,假定端口8082,根目录/www/tomcat8/
4.上传demo到 /www/tomcat8/webapps/caslogin,现在可以通过http://host:8082/caslogin 访问认证页了,至于要不要反代不在这里体现
5.自己的服务端完成 /api/cas/login 接口的回调处理,get->uid 获取当前登录的用户的身份id,跟自己的业务逻辑匹配,完成后办法token之类的redirect到自己的前端
6.前端直接获取token完成登录