基于CAS与LDAP的单点登录(SSO)的架构与实现

本文详述了如何使用CAS与LDAP搭建单点登录(SSO)架构,涉及CAS Server的安装配置、LDAP的安装配置、以及Moodle与Drupal的安装和配置,确保用户只需登录一次即可访问所有相互信任的应用子系统。在配置过程中,文章还解决了一些常见问题,如单点登录失败的解决方案,以及如何在Drupal中同步LDAP用户。
摘要由CSDN通过智能技术生成

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
-----------------------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值