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

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
-------------------------------------------------------------------------
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=lyx,dc=com" read by * none
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=lyx,dc=com
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=lyx,dc=com
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}LSgYPTUW4zjGtIVtuZ8cRUqqFRv1tWpE
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=lyx,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=lyx,dc=com" write by * read
-------------------------------------------------------------------------
# 执行命令,修改配置
ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif

这里有5个修改,所以执行会输出5行表示成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7svc9mbJ-1625991911455)(H:\Typeora\笔记\java\cas\20190426161145765.png)]

启用memberof功能

# 新增add-memberof.ldif, #开启memberof支持并新增用户支持memberof配置
vim add-memberof.ldif
-------------------------------------------------------------
dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap
 
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf
-------------------------------------------------------------
 
# 新增refint1.ldif文件
vim refint1.ldif
-------------------------------------------------------------
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint
-------------------------------------------------------------
 
# 新增refint2.ldif文件
vim refint2.ldif
-------------------------------------------------------------
dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember  manager owner
-------------------------------------------------------------
 
# 依次执行下面命令,加载配置,顺序不能错
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-memberof.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif

配置修改完了,在上述基础上,我们来创建一个叫做 lyx company 的组织,并在其下创建一个 admin 的组织角色(该组织角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元:

# 新增配置文件
vim base.ldif
----------------------------------------------------------
dn: dc=lyx,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: lyx Company
dc: lyx
 
dn: cn=admin,dc=lyx,dc=com
objectClass: organizationalRole
cn: admin
 
dn: ou=People,dc=lyx,dc=com
objectClass: organizationalUnit
ou: People
 
dn: ou=Group,dc=lyx,dc=com
objectClass: organizationalRole
cn: Group
----------------------------------------------------------
# 执行命令,添加配置, 这里要注意修改域名为自己配置的域名,然后需要输入上面我们生成的密码
ldapadd -x -D cn=admin,dc=lyx,dc=com -W -f base.ldif

通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中基准 dc=lyx,dc=com 是该树的根节点,其下有一个管理域 cn=admin,dc=lyx,dc=com 和两个组织单元 ou=People,dc=lyx,dc=com 及 ou=Group,dc=lyx,dc=com。

3.安装phpldapadmin

# yum安装时,会自动安装apache和php的依赖。
# 注意: phpldapadmin很多没更新了,只支持php5,如果你服务器的环境是php7,则会有问题,页面会有各种报错
yum install -y phpldapadmin
 
# 修改apache的phpldapadmin配置文件
# 修改如下内容,放开外网访问,这里只改了2.4版本的配置,因为centos7 默认安装的apache为2.4版本。所以只需要改2.4版本的配置就可以了
# 如果不知道自己apache版本,执行 rpm -qa|grep httpd 查看apache版本
 
vim /etc/httpd/conf.d/phpldapadmin.conf
-----------------------------------------------------------------
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require all granted
  </IfModule>
-----------------------------------------------------------------
 
 
# 修改配置用DN登录ldap
vim /etc/phpldapadmin/config.php
-----------------------------------------------------------------
# 398行,默认是使用uid进行登录,我这里改为cn,也就是用户名
$servers->setValue('login','attr','cn');
 
# 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息
$servers->setValue('login','anon_bind',false);
 
# 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));
-----------------------------------------------------------------
 
 
# 启动apache
systemctl start httpd
systemctl enable httpd

4.登录phpLDAPadmin界面

启动了apache服务后,在浏览器上访问: http://ip/ldapadmin ,然后使用上面定义的用户,进行登录,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EliKqOtZ-1625991911456)(H:\Typeora\笔记\java\cas\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTAwNDM1MA==,size_16,color_FFFFFF,t_70)]

5.添加用户

1)选中dc=lyx,dc=com的目录树,选择创建一个子条目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KX5edknh-1625991911457)(H:\Typeora\笔记\java\cas\image-20210128203422342.png)]

2)选择Generic: Posix Group

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-satw7KJ2-1625991911458)(H:\Typeora\笔记\java\cas\image-20210128203534683.png)]

3)设置组名Test,然后点击创建对象得到新的用户组Test

4)点击cn=Test,选择创建一个子条目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7eoXsFhW-1625991911458)(H:\Typeora\笔记\java\cas\image-20210128204327305.png)]

5)选择Generic: User Account

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r1AIAEEO-1625991911459)(H:\Typeora\笔记\java\cas\image-20210128204501171.png)]

6)设置第一个名字、最后一个名字、密码,GID号选择Test,Home directory为http://localhost:8443/cas_overlay_war_exploded/login,点击创建对象完成用户创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3t7aO8cj-1625991911460)(H:\Typeora\笔记\java\cas\image-20210128205255609.png)]

7)若要将LDAP中的用户同步到drupal中,LDAP中的用户必须带有属性电子邮件,所以选择增加新的属性,在下拉列表中选中Email

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M66eb1tA-1625991911461)(H:\Typeora\笔记\java\cas\image-20210128205637092.png)]

8)输入设置的用户邮箱并点击Update Object

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJNOdrlM-1625991911461)(H:\Typeora\笔记\java\cas\image-20210128210100073.png)]

2.3 XAMPP安装和配置

1.下载

在xampp官网https://www.apachefriends.org/zh_cn/download.html进行下载,本实验选择为linux下64位7.4.13的版本

2.安装

1)安装前,需要先给xampp安装包可执行的权限

chmod 777 xampp-linux-x64-7.4.13-0-installer.run

2)运行 ./xampp-linux-x64-7.4.13-0-installer.run 进行安装操作。根据提示进行选择需要安装的部分即可

3)安装完成后图形界面启动如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mNHRYQOS-1625991911463)(H:\Typeora\笔记\java\cas\image-20210128183123137.png)]

3.配置文件修改

对端口修改,防止冲突

1)在上方导航栏选择Manage Servers,选择Apache Web Server,点击右侧Configure

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FPiMCSaM-1625991911463)(H:\Typeora\笔记\java\cas\image-20210128183451502.png)]

2)进入端口页面(这里是我已经修改过的,默认Port 是80,SSL Port 是443),可以看到Port端可以直接修改,也可以通过点击下面的Open Conf File来修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-POsObDHO-1625991911464)(H:\Typeora\笔记\java\cas\image-20210128183551986.png)]

3)这里讲一下文件修改,打开文件查找80,本实验将其修改为8081(当然你可以设为其他,只要没被占用);修改SSL端口需要修改httpd-ssl.conf文件,可以通过命令,同样可以通过文件搜索(位置在/opt/lampp/etc/extra下),文件搜索443将其全部修改为你想要的端口(本实验设置为4433)

4)在上方导航栏选择Manage Servers,选择MySQL Database,点击右侧Configure修改端口号,若未发生冲突也可不修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYyKeynN-1625991911465)(H:\Typeora\笔记\java\cas\image-20210128193530365.png)]

4.启动

/opt/lampp/lampp start

5.停止或重启

如需停止xampp则使用命令/opt/lampp/lampp stop

如需重启xampp则使用命令/opt/lampp/lampp restart

2.4 Moodle安装和配置

1.下载

从官网https://download.moodle.org/releases/latest/下载moodle版本,这里采用了moodle3.9.1版本。

2.解压

将下载后的moodle安装包解压,然后将其放置xampp目录下的htdocs目录下。

3.配置

1)在浏览器地址栏中输入localhost:8081/moodle (之前改过Apache的端口为8081)

2)一直next,注意选择数据库驱动时选择改进的MySQL

3)数据库设置界面,数据库主机为localhost,数据库名为moodle,数据库用户名为root,数据库密码为空,数据库服务端口为3306(若在xampp中修改过则设置为修改后的端口号)

4)可能出现下图中的情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NDPlzuIZ-1625991911466)(H:\Typeora\笔记\java\cas\image-20210128194545432.png)]

  • 解决方案

    • a)修改/opt/lampp/htdocs/moodle/config.php

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e6G9KfU4-1625991911467)(H:\Typeora\笔记\java\cas\image-20210128194909274.png)]

    • b)修改/opt/lampp/etc/php.ini,去掉intl,xmlrpc,soap前面的分号

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XJLAlkpJ-1625991911467)(H:\Typeora\笔记\java\cas\image-20210128195221517.png)]

    • c)在php.ini文档末尾添加如下内容

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iO29P4aT-1625991911468)(H:\Typeora\笔记\java\cas\image-20210128195429605.png)]

4.完成安装

修改完后继续完成安装,需要加载更新许多模块会耗费一些时间,耐心等待安装完成

5.设置管理员账号与密码

6.设置http协议

Moodle的CAS插件根据配置默认生成的ServerBaseURL是https,本实验配置的CAS服务器采用http协议,故要对Moodle的设置进行修改:

1)修改Moodle相应的模块文件夹中的Client.php文件(本实验的路径为/opt/lampp/htdocs/moodle/auth/cas/CAS/CAS/Client.php)中的_getServerBaseURL()内将https修改为http,图中为已修改好的结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJoPUd5K-1625991911468)(H:\Typeora\笔记\java\cas\image-20210130021102479.png)]

2.5 Drupal 安装和配置

1.下载

从官网https://www.drupal.org/project/drupal下载drupal,本实验使用的版本为linux环境的8.8版本,即drupal-8.8.x-dev.tar.gz

2.解压

将下载后的drupal安装包解压,然后将其放置xampp目录下的htdocs目录下。

3.配置数据库

在浏览器中输入http://localhost:8081/phpmyadmin/进入phpmyadmin,第一次登录默认的用户名为root,密码为空,创建新的数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a7oKsP4p-1625991911469)(H:\Typeora\笔记\java\cas\image-20210128200451774.png)]

4.配置

浏览器中输入http://localhost:8081/你所命名的资料夹或网页名称,本实验设置的drupal解压在htdocs下的文件夹名为drupal,故输入为http://localhost:8081/drupal

1)在语言选项中选择English,或选择简体中文,当然如果你选择中文,这就需要去官网下载,比较麻烦。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUbBeUOk-1625991911469)(H:\Typeora\笔记\java\cas\image-20210128200828169.png)]

2)选择标准模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bVLdlLT2-1625991911471)(H:\Typeora\笔记\java\cas\image-20210128200853992.png)]

3) 下一步如果出现下述页面(如果先安装moodle的话,opcache是已经配置好的,所以不会出现问题):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1gDpArKY-1625991911472)(H:\Typeora\笔记\java\cas\image-20210128200943981.png)]

解决办法:修改/opt/lampp/etc/php.ini,找到 opcache.enable=0,将它前面的注释去掉,并将其值改为1,然后在下面增加一行:zend_extension=php_opcache.dll 就可以了,记得保存后要重新启动Apache服务器。

4)数据库配置:资料库就填写你之前新增的资料库,使用者名称就填写你之前新增的使用者名称及密码,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iUsnQnMv-1625991911472)(H:\Typeora\笔记\java\cas\image-20210128201300688.png)]

5. 安装

安装后会出现网站配置的页面,其中依次输入你的网站名称及网站电子邮箱(这两个后面都可以更改的),再设定你网站的超级管理员,这个账号的权限是最大的,不受任何限制,也就是我们所谓的超级使用者,一般来说,在管理drupal网站时,不建议直接使用超级使用者账户去管理网站;最后依次输入电子邮箱地址,及国家地区的选择。点击保存继续,出现如下界面则为搭建成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9XoOwzJ-1625991911473)(H:\Typeora\笔记\java\cas\image-20210128201501764.png)]

2.6 CAS Server协议配置

本实验采用HTTP协议(不安全,不建议实际生产环境使用)

1.查看http端口信息

在Tomcat安装目录下(/usr/local/tomcat/conf)中serve.xml中可查看Http端口信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p1hdboJH-1625991911473)(H:\Typeora\笔记\java\image-20210128202157011.png)]

2.配置

1)默认为http协议,端口号建议修改为8443

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fcYYTeTT-1625991911474)(H:\Typeora\笔记\java\cas\image-20210128202437821.png)]

2)在target/cas/WEB-INF/classes/service中修改Apereo服务,将https修改为http,图中为已修改好的结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MpLDWl5r-1625991911475)(H:\Typeora\笔记\java\cas\image-20210130032459276.png)]

3)在target/cas/WEB-INF/classes/service中修改HTTPSandIMAPS文件,新增|http,图中为已修改好的结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yPpltXCX-1625991911475)(H:\Typeora\笔记\java\cas\image-20210130032754525.png)]

2.7 CAS Server与LDAP连接

1.添加LDAP依赖

在pom.xml中添加LDAP依赖

2.重新打包

Maven中clean,之后打包,等待打包完成(需要一段时间),打包完成后重新运行服务,配置成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NkTtAzfV-1625991911476)(H:\Typeora\笔记\java\cas\image-20210128203041643.png)]

2.8 Moodle与CAS连接

1.下载插件

进入https://moodle.org/plugins/auth_casattras,下载CAS插件(Authentication: CAS server (SSO) with user-attribute release)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ppeLL7px-1625991911477)(H:\Typeora\笔记\java\cas\image-20210129173928198.png)]

2.安装插件

1)以管理员身份登录,访问个人主页>网站管理>插件>安装插件,上传ZIP文件,然后点击按钮“从ZIP文件安装插件”。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fU1nuQDc-1625991911477)(H:\Typeora\笔记\java\cas\image-20210129173955751.png)]

2)核验是否收到“验证通过!”的信息,然后点击“安装插件”按钮。

3)点击按钮“安装插件”之后,页面会自动跳转到*设置**>网站管理>*通告,然后安装进程(如,创建必要的数据库等等)会开始进行。

3.插件设置

1)访问管理>网站管理>插件,往下拉,可以看到身份认证处多出了CAS模块,点击进入CAS插件设置页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fe2R1any-1625991911479)(H:\Typeora\笔记\java\cas\image-20210129174201024.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cepUIRLs-1625991911479)(H:\Typeora\笔记\java\cas\image-20210129174213842.png)]

2)在设置页面对以下属性进行修改,修改完成后,滑倒页面最下端,点击保存更改:

  • Hostname修改为CAS服务器的主机名。(eg:127.0.0.1)

  • Base_URI修改为CAS服务器的URI。(eg:cas_overlay_war_exploded/)

  • Port修改为CAS服务器的端口号。(eg:8443)

  • CAS logout option选择‘是’。

  • Multi-authentication选择‘是’,此时moodle登录界面将拥有多种登录方式。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fjL6LTGn-1625991911480)(H:\Typeora\笔记\java\cas\image-20210129205906088.png)]

4.启用CAS登录模式

访问管理>网站管理>插件>身份认证,将CAS server (SSO) with user-attribute release的‘使用状态’由禁用改为使用。(图中为已修改后的状态)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZ9bhbC0-1625991911481)(H:\Typeora\笔记\java\cas\image-20210129210138302.png)]

5.完成连接

退出管理员用户后,进入Moodle登录页面,会看到插件CAS在登录页面的按钮;点击CAS按钮后,将自动跳转至CAS服务器登录页面,网址中会携带了Moodle的相关认证信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dsHHCYPP-1625991911481)(H:\Typeora\笔记\java\cas\image-20210129174623875.png)]

2.9 Drupal与CAS连接

1.下载模块

1)进入https://www.drupal.org/project/cas,根据官方文档的要求下载插件:cas-8.x-1.7.tar.gz

2)根据官方文档说明,上述模块还需要模块cas attributes 和external Auth的支持,点击蓝色字体部分,下载相应的模块:cas_attributes-8.x-1.0-beta2.tar.gz和externalauth-8.x-1.3.tar.gz。同时因为CAS属性模块需要token模块,所以还需下载token-8.x-1.7.tar.gz。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dIzrZXgp-1625991911481)(H:\Typeora\笔记\java\cas\image-20210129210841547.png)]

2.安装模块

登入管理员账号,访问Manage>Extend,点击install new module,将下载好的4个插件依次上传安装好。安装完成后,访问Manage>Configuration,在PEOPLE处将出现CAS插件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzQ3O1uf-1625991911483)(H:\Typeora\笔记\java\cas\image-20210129175005954.png)]

3.模块设置

设置页面对以下属性进行修改,设置完成后对配置进行保存:

  • CAS server中hostname、port、path的修改同moodle;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xjotKDs-1625991911484)(H:\Typeora\笔记\java\cas\image-20210129211148406.png)]

  • GENERAL SETTINGS中对复选框进行勾选,因为drupal8版本的cas模块只在现有的登录表单上提供了一个简单的链接,如果仅采用CAS作为主要登录方式的话,建议在自定义模块中更改登录页面以隐藏标准表单。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7zvhKFh4-1625991911485)(H:\Typeora\笔记\java\cas\image-20210129211250404.png)]

  • USER ACCOUNT HANDLING中对CAS用户进行账号处理的限制:禁止CAS用户通过常规表单进行登录;限制密码的管理,防止CAS用户更改其Drupal密码;限制电子邮件管理,防止CAS用户更改电子邮件。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wBRJWRDC-1625991911485)(H:\Typeora\笔记\java\cas\image-20210129211330263.png)]

  • GATEWAY FEATURE(AUTO LOGIN)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gYaQFdi9-1625991911486)(H:\Typeora\笔记\java\cas\image-20210129211458364.png)]

  • LOG OUT BEHAVIOR中勾选复选框,启用后将用户重定向到CAS注销页面来完成注销。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTNNgUAa-1625991911487)(H:\Typeora\笔记\java\cas\image-20210129211517195.png)]

4.完成连接

退出管理员账号,进入Drupal登录页面,会看到模块CAS在登录页面的链接,点击链接后,将自动跳转至CAS服务器登录页面,网址中会携带了Drupal的相关认证信息。。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mGVqfTFi-1625991911487)(H:\Typeora\笔记\java\cas\image-20210129175259383.png)]

2.10 Drupal与LDAP连接

1.下载模块

进入https://www.drupal.org/project/ldap/,本实验使用durpal8.8的版本,因此选择ldap模块的版本为8.x-3.0-beta7

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L9LrtzWh-1625991911488)(H:\Typeora\笔记\java\cas\image-20210129203455443.png)]

2.安装模块

登录管理员账号,Manage>Extend,由于ldap是一个集成模块,包含ldap_user、ldap_servers、ldap_query等多个子模块,点击install安装好LDAP Authentication(依赖External Authentication)、LDAP Authorization Provider(依赖External Authentication和Authorization)、LDAP Help、LDAP Query、LDAP Users、LDAP Servers。

注:若LDAP模块安装前尚未安装External Authentication(下载地址:https://www.drupal.org/project/externalauth)和Authorization(下载地址:https://www.drupal.org/project/authorization)模块,请先安装这两个模块后再安装LDAP模块。

3.模块设置

访问Manage>Configuration,在PEOPLE处将出现LDAP Servers和LDAP Queries插件,点击LDAP Servers进行配置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hTEtC6Sh-1625991911488)(H:\Typeora\笔记\java\cas\image-20210129203620164.png)]

1)点击Add Server新增与LDAP服务器的连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CH49TKhC-1625991911489)(H:\Typeora\笔记\java\cas\image-20210129203702207.png)]

2)填写SERVER设置,完成后对配置进行保存:

  • Name设置连接的LDAP服务器的名字(eg:ldapserver)
  • Machine-readable name设置服务器的唯一的名字(别名),不可与其他服务器重名(eg:ldapserver)
  • 勾选Enable启用服务器
  • LDAP Server type:选择LDAP服务器类型,本实验选择的为OpenLDAP
  • 服务器地址名:LDAP服务器的域名或者IP地址名(eg: ldap://127.0.0.1)
  • Server port:389

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0WxkMM42-1625991911491)(H:\Typeora\笔记\java\cas\image-20210129203924290.png)]

3)填写BINDING设置,完成后对配置进行保存:

  • Binding Method for Searches选择绑定方式,建议选择Service Account Bind: Use credentials in the Service Account field below to bind to LDAP
  • 选择Service Account Bind绑定方式需要将LDAP的管理员账号填写到DN for non-anonymous search,同时将LDAP管理员账号密码填写到Password for non-anonymous search(本实验设置的管理员账号为cn=admin,dc=lyx,dc=com,密码为123456)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cCl1tfV2-1625991911491)(H:\Typeora\笔记\java\cas\image-20210129204044360.png)]

4)填写USERS设置,完成后对配置进行保存:

  • Base DNs for LDAP users, groups, and other entries填入检索LDAP目录树基于的节点(eg: cn=Test,dc=lyx,dc=com)
  • AuthName attribute和AccountName attribute填写为cn
  • Email attribute填写为mail
  • Persistent and Unique User ID Attribute填写为uidnumber
  • 勾选Does the Persistent and Unique User ID Attribute hold a binary value?
  • Expression for user DN. Required when “Bind with Users Credentials” method selected.填写为cn=%username,%basedn

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bNyueseV-1625991911491)(H:\Typeora\笔记\java\cas\image-20210129204208986.png)]

5)填写GROUPS(非常重要,关系到后续的drupal到ldap的同步)设置,完成后对配置进行保存:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DX4wWc6C-1625991911491)(H:\Typeora\笔记\java\cas\image-20210129204256863.png)]

6)配置User mapping

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hiFVk48k-1625991911492)(H:\Typeora\笔记\java\cas\image-20210130014928278.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QbX7UEaP-1625991911494)(H:\Typeora\笔记\java\cas\image-20210130014937294.png)]

  • PROVISIONING FROM LDAP TO DRUPAL MAPPINGS填写从LDAP到Drupal同步的一些映射的配置,其中前六行自动生成,填入的映射根据实际的情况填写(eg:[userpassword]映射到Filed:PassWord、[mail]映射到Filed:Email)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vbaA8PPg-1625991911494)(H:\Typeora\笔记\java\cas\image-20210130015047594.png)]

  • BASIC PROVISIONING TO LDAP SETTINGS

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0a6LVkTR-1625991911495)(H:\Typeora\笔记\java\cas\image-20210130015119918.png)]

  • PROVISIONING FROM DRUPAL TO LDAP MAPPINGS填写从Drupal到LDAP同步的一些映射的配置,填入的映射根据实际的情况填写(eg:此处要求将drupal账户同步到cn=Test,dc=lyx,dc=com的用户组下,则设置Source Drupal token为Test这一组的gid号500,Target LDAP token为[gidnumber]):

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x536hCVY-1625991911495)(H:\Typeora\笔记\java\cas\image-20210130020320170.png)]

6)Logon Options设置登录选项,Allowable Authentications选择Mixed code, Authentication LDAP Server Configurations启用之前添加的Server:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoSfmedj-1625991911496)(H:\Typeora\笔记\java\cas\image-20210130015512900.png)]

7)其余内容可以根据实际使用要求修改或者保持默认设置

4. 测试配置结果

User mapping中的Debug LDAP synchronization events可以来测试配置同步的结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NL6scSu9-1625991911497)(H:\Typeora\笔记\java\cas\image-20210130015653986.png)]

  • 其中前三项测试选项是测试从LDAP到Drupal的同步,此时要求在Testing Drupal Username的文本框中输入一个LDAP中存在但是Drupal中不存在的用户名来进行测试,可以Manager>People中查看是否新增对应的用户账户,也可以查看Devel的结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZZAWeDyu-1625991911500)(H:\Typeora\笔记\java\cas\image-20210130015721006.png)]

  • 后三项测试选项是测试从Drupal到LDAP的同步,此时要求在Testing Drupal Username的文本框中输入一个Drupal中存在但是LDAP中不存在的用户名来进行测试,可以去LDAP的目录树中查看是否新增对应的用户账户,也可以查看Devel的结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KIEpLj30-1625991911501)(H:\Typeora\笔记\java\cas\image-20210130015750145.png)]

外链图片转存中…(img-x536hCVY-1625991911495)]

6)Logon Options设置登录选项,Allowable Authentications选择Mixed code, Authentication LDAP Server Configurations启用之前添加的Server:

[外链图片转存中…(img-FoSfmedj-1625991911496)]

7)其余内容可以根据实际使用要求修改或者保持默认设置

4. 测试配置结果

User mapping中的Debug LDAP synchronization events可以来测试配置同步的结果

[外链图片转存中…(img-NL6scSu9-1625991911497)]

  • 其中前三项测试选项是测试从LDAP到Drupal的同步,此时要求在Testing Drupal Username的文本框中输入一个LDAP中存在但是Drupal中不存在的用户名来进行测试,可以Manager>People中查看是否新增对应的用户账户,也可以查看Devel的结果

    [外链图片转存中…(img-ZZAWeDyu-1625991911500)]

  • 后三项测试选项是测试从Drupal到LDAP的同步,此时要求在Testing Drupal Username的文本框中输入一个Drupal中存在但是LDAP中不存在的用户名来进行测试,可以去LDAP的目录树中查看是否新增对应的用户账户,也可以查看Devel的结果

    [外链图片转存中…(img-KIEpLj30-1625991911501)]

  • 注:使用Debug LDAP synchronization events要求安装Delv模块(下载地址:https://www.drupal.org/project/devel)


版权声明:本文为weixin_40101369原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。