CAS
第一章 目的、要求和内容
1.1 目的
基于CAS与LDAP的单点登录(SSO)的架构与实现(子系统分别基于Drupal和Moodle)。
1.2 要求
- 实现在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用子系统,从而实现一次登录多次使用。
- 原有的子系统在接入CAS后,子系统中原来存在的账户迁移到CAS的数据库中,使得原有账户也能使用单点登录服务。
1.3 内容
应用目前开源的统一身份认证系统CAS(Central Authentication Service)作为实现SSO单点登录的框架,选用Drupal与Moodle作为单点登录的子系统,通过CAS身份验证登录后,在Drupal与Moodle中同时登录。Drupal中原先存在的账户可同步到LDAP中,享受单点登录服务。
第二章 详细设计
2.1 CAS Server安装和配置
1. 系统环境
- CentOS7+Intellij IDEA2020+Tomcat9.0+JDK1.8
2.下载CAS模板 Overlay Template
- 采用 Apereo CAS 5.3.x 版本,JDK需要1.8+版本,下载地址:
https://github.com/apereo/cas-overlay-template/tree/5.3
3.导入CAS项目
-
进行解压,使用IDEA添加解压的项目,选择Maven,项目是一个overlay项目。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GlQ597qb-1625991911439)(H:\Typeora\笔记\java\cas\image-20210119182203442.png)]
-
选择本地解压好的项目,然后选择Maven,之后一直next即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jSWa8gf-1625991911441)(H:\Typeora\笔记\java\cas\image-20210119182250473.png)]
4. 配置tomcat
-
点击Tomcat旁的的下三角,选择编辑配置(Edit Configurations)
-
点击右上角的“+”号,选择Tomcat Server,选择local。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SVl99WV8-1625991911442)(H:\Typeora\笔记\java\cas\image-20210119182457184.png)]
-
选择本地安装的tomcat的安装目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XorTTaWF-1625991911443)(H:\Typeora\笔记\java\cas\image-20210119182509669.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZDatvZF-1625991911444)(H:\Typeora\笔记\java\cas\image-20210119182518281.png)]
-
配置URL与端口号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cT89d0Sh-1625991911446)(H:\Typeora\笔记\java\cas\image-20210119182613635.png)]
5. 打包cas
-
在Maven中双击package开始打包(需要耗费一些时间)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkMSuTVf-1625991911447)(H:\Typeora\笔记\java\cas\image-20210119182731566.png)]
-
打包后的目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9wTGD2BM-1625991911448)(H:\Typeora\笔记\java\cas\image-20210119182759954.png)]
6. 运行CAS Server
-
点击运行,运行成功后加载界面,配置成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qkCgcJDx-1625991911449)(H:\Typeora\笔记\java\cas\image-20210119182842241.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4J7fH4rz-1625991911451)(H:\Typeora\笔记\java\cas\image-20210119182852589.png)]
7.单点登录失败解决方案
可能遇到多个子系统间单点登录失败的情况,检查请求发现虽然cas账户使用同一TCG令牌但是依旧无法单点登录,这可能是因为基于安全的考虑,CAS Server默认会给TGC的Cookie加上secure选项。而请求协议又是HTTP,最终导致了响应头Cookie中的TGC未被提交到服务端,导致CAS的Remember功能不生效。
- 解决方案:在application.properties中设置tgc安全选项cas.tgc.secure=false,并设置cas.serviceRegistry.initFromJson=true
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3FocnOcc-1625991911453)(H:\Typeora\笔记\java\cas\image-20210130033250246.png)]
2.2 LDAP安装和配置
1. 安装OpenLDAP
# yum 安装相关包
yum install -y openldap openldap-clients openldap-servers
# 复制一个默认配置到指定目录下,并授权,这一步一定要做,然后再启动服务,不然生产密码时会报错
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# 授权给ldap用户,此用户yum安装时便会自动创建
chown -R ldap. /var/lib/ldap/DB_CONFIG
# 启动服务,先启动服务,配置后面再进行修改
systemctl start slapd
systemctl enable slapd
# 查看状态,正常启动则ok
systemctl status slapd
- 可能出现的错误
- 启动
systemctl start httpd
提示Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
- 解决方案:查看80端口
netstat -antlp | grep 80
,然后终止占用80端口的进程kill -9 xxx
,xxx为占用80端口的进程
- 启动
2. 修改openldap配置
安装openldap后,会有三个命令用于修改配置文件,分别为ldapadd, ldapmodify, ldapdelete,顾名思义就是添加,修改和删除。而需要修改或增加配置时,则需要先写一个ldif后缀的配置文件,然后通过命令将写的配置更新到slapd.d目录下的配置文件中去,完整的配置过程如下安装:
# 生成管理员密码,记录下这个密码,后面需要用到
# 此处{SSHA}后面内容为本次测试生成
slappasswd -s 123456
{
SSHA}LSgYPTUW4zjGtIVtuZ8cRUqqFRv1tWpE
# 新增修改密码文件,ldif为后缀,文件名随意,不要在/etc/openldap/slapd.d/目录下创建类似文件
# 生成的文件为需要通过命令去动态修改ldap现有配置,如下,在home目录下,创建文件
cd ~
vim changepwd.ldif
--------------------------------------------------------------
dn: olcDatabase={
0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {
SSHA}LSgYPTUW4zjGtIVtuZ8cRUqqFRv1tWpE
--------------------------------------------------------------
# 这里解释一下这个文件的内容:
# 第一行执行配置文件,这里就表示指定为 cn=config/olcDatabase={0}config 文件。你到/etc/openldap/slapd.d/目录下就能找到此文件
# 第二行 changetype 指定类型为修改
# 第三行 add 表示添加 olcRootPW 配置项
# 第四行指定 olcRootPW 配置项的值
# 在执行下面的命令前,你可以先查看原本的olcDatabase={0}config文件,里面是没有olcRootPW这个项的,执行命令后,你再看就会新增了olcRootPW项,而且内容是我们文件中指定的值加密后的字符串
# 执行命令,修改ldap配置,通过-f执行文件
ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif
执行命令后,有如下输出则为正常:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NmcJyoje-1625991911454)(H:\Typeora\笔记\java\cas\20190426144821449.png)]
继续进行配置
# 我们需要向 LDAP 中导入一些基本的 Schema。这些 Schema 文件位于 /etc/openldap/schema/ 目录中,schema控制着条目拥有哪些对象类和属性,可以自行选择需要的进行导入,
# 依次执行下面的命令,导入基础的一些配置,我这里将所有的都导入一下,其中core.ldif是默认已经加载了的,不用导入
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
# 修改域名,新增changedomain.ldif, 这里我自定义的域名为 lyx.com,管理员用户账号为admin。
# 如果要修改,则修改文件中相应的dc=lyx,dc=com为自己的域名
vim changedomain.ldif
-----------------------------------