2022-03-10 CAS认证流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-03-10 CAS认证流程相关的知识,希望对你有一定的参考价值。

参考技术A CAS认证流程图:

(1) 用户通过浏览器访问指定页面;

(2) 页面对应的后台进行安全校验:检查service-ticket和access token是否存在,若不存在,则 重定向 到CAS服务器 /cas/login/;

(3) CAS服务器要求用户提供SSO登录凭证;

(4) 用户提供用户名和密码给CAS服务器;

(5) CAS服务器将service ticket和 service URL返回给后台;

(6) 后台发送验证请求给CAS服务器检验service ticket和service URL是否匹配;

(7) 若后台得到service ticket和service URL匹配,返回前台浏览器,TGC一并存储到浏览器中;

(8) 浏览器访问指定页面;

CAS统一登录认证:与ldap连接

     cas认证与数据库已经连接了,可以认证,但有一个cas客户端需要ldap认证,就开始研究ldap,搞了四天,头大,ldap很快就安装配置好了,也可以在ldap命令验证,cas也是上周就配置好了,关键在于cas和ldap的连接,我的是cas5.3.2,网上的cas和ldap的连接从cas3.2一直参考到cas5.2的版本的配置,尝试了无数配置方案,都没成功,网上也没有见cas5.3.2和ldap连接成功的配置案例,只有无法配置成功的文章,以为是软件本身还有bug,打算放弃。

   但今天一觉醒来,心有不甘,花了三天时间没日没夜,无疾而终,不是我的风格,经过了多少迎难而上,还是再试试吧,今天不再看网友的文章了,看cas官网原文,慢慢啃英文单词,一个个属性配置推敲,终于调试通过。对于刚接触cas2周和ldap4天的我来说,值得庆贺一下,写本文以为自己和看客参考。

1. cas安装见前文

https://blog.csdn.net/oLinBSoft/article/details/81910775

2.ldap安装,特简单 我的是ubuntu16.04

sudo apt-get install slapd ldap-utils

一条命令就安装好了

sudo dpkg-reconfigure slapd

再用一条命令配置, 设置ldap根域名,admin密码即可

管理客户端可以下载windows版的LdapAdmin.exe  只有一个文件,无需安装直接运行

 

也可以安装 phpldapadmin 通过web界面管理ldap账号 

apt-get  install  phpldapadmin

这个是安装命令,安装完后按网络文章简单配置即可

增加几个测试部门组织和用户,设置用户密码(设置时可选加密方式)

ldap的介绍,使用在此按下不表,来日深入。

3. cas和ldap的连接配置,参考cas官网说明文档:

https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html

4.安装配置步骤

(1)重新编译cas以支持LDAP认证,命令序列

cd /usr/local/cas-overlay-template-5.3 

mvn clean    //清除原来的编译

nano  pom.xml  // 修改编译配置文件 

增加以下内容:

        <dependency>
             <groupId>org.apereo.cas</groupId>
             <artifactId>cas-server-support-ldap</artifactId>
             <version>$cas.version</version>
        </dependency>

保存后重新编译生成cas.war

mvn install   //生成cas.war

删除原来的tomcat发布的cas.war

rm /usr/local/apache-tomcat-8.5.32/webapps/cas.war

cp  /usr/local/cas-overlay-template-5.3/target/cas.war  /usr/local/apache-tomcat-8.5.32/webapps/

检测cas是否提供服务

在浏览器 https://author.linbsoft.com:8443    测试ok

(2) 修改配置文件

nano  /usr/local/apache-tomcat-8.5.32/webapps/cas/WEB-INF/classes/application.properties

注释掉默认测试方式和账号,增加ldap认证方式属性

##
# CAS Authentication Credentials
#
#cas.authn.accept.users=casuser::Mellon

cas.authn.ldap[0].principalAttributeList=displayName,givenName
cas.authn.ldap[0].principalAttributePassword=userPassword
cas.authn.ldap[0].collectDnAttribute=false
cas.authn.ldap[0].principalDnAttributeName=principalLdapDn
cas.authn.ldap[0].allowMultiplePrincipalAttributeValues=true
cas.authn.ldap[0].allowMissingPrincipalAttributeValue=true
cas.authn.ldap[0].credentialCriteria=
cas.authn.attributeRepository.ldap[0].attributes.uid=uid
cas.authn.attributeRepository.ldap[0].attributes.displayName=displayName
#cas.authn.attributeRepository.ldap[0].attributes.cn=commonName
#cas.authn.attributeRepository.ldap[0].attributes.affiliation=groupMembership
cas.authn.ldap[0].ldapUrl=ldap://author.linbsoft.com
cas.authn.ldap[0].bindDn=cn=admin,dc=linbsoft,dc=com
cas.authn.ldap[0].bindCredential=123
cas.authn.ldap[0].poolPassivator=BIND
cas.authn.ldap[0].connectionStrategy=
cas.authn.ldap[0].providerClass=org.ldaptive.provider.unboundid.UnboundIDProvider
cas.authn.ldap[0].connectTimeout=5000
cas.authn.ldap[0].trustCertificates=
cas.authn.ldap[0].keystore=
cas.authn.ldap[0].keystorePassword=
cas.authn.ldap[0].keystoreType=PKCS12
cas.authn.ldap[0].minPoolSize=3
cas.authn.ldap[0].maxPoolSize=10
cas.authn.ldap[0].validateOnCheckout=true
cas.authn.ldap[0].validatePeriodically=true
cas.authn.ldap[0].validatePeriod=500
cas.authn.ldap[0].validateTimeout=5000
cas.authn.ldap[0].failFast=true
cas.authn.ldap[0].idleTime=500
cas.authn.ldap[0].prunePeriod=24
cas.authn.ldap[0].blockWaitTime=5000
cas.authn.ldap[0].useSsl=false
cas.authn.ldap[0].useStartTls=false
cas.authn.ldap[0].responseTimeout=8000
cas.authn.ldap[0].allowMultipleDns=false
cas.authn.ldap[0].name=
cas.authn.ldap[0].type=AUTHENTICATED
cas.authn.ldap[0].searchFilter=uid=user
cas.authn.ldap[0].enhanceWithEntryResolver=true
cas.authn.ldap[0].derefAliases=NEVER
cas.authn.ldap[0].dnFormat=uid=%s,ou=teacher,dc=linbsoft,dc=com
cas.authn.ldap[0].baseDn=dc=linbsoft,dc=com

(3) 重启tomcat 到tomcat的logs目录查看catalina.out 文件,排查错误,比如,我调试过程出现:

2018-08-28 02:22:29,467 ERROR [org.apereo.cas.authentication.PolicyBasedAuthenticationManager] - <[LdapAuthenticationHandler]: [Unexpected LDAP error / LDAPException(resultCode=17 (undefined attribute type), errorMessage='undefined attribute type', ldapSDKVersion=4.0.5, revision=27420)]>

 这里虽然显示错误,但内心已狂喜,因为说明cas和ldap建立联系了,是ldap验证过程中的错误,经过排查某个属性值没提供,或提供的属性值与环境不匹配。

(4)调试通过后,可以用ldap中的注册用户正常验证

>
2018-08-28 02:59:35,745 INFO [org.apereo.cas.authentication.PolicyBasedAuthenticationManager] - <Authenticated principal [linbin] with $
2018-08-28 02:59:35,756 INFO [org.apereo.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN
=============================================================
WHO: linbin
WHAT: Supplied credentials: [UsernamePasswordCredential(username=linbin)]
ACTION: AUTHENTICATION_SUCCESS
APPLICATION: CAS
WHEN: Tue Aug 28 02:59:35 PDT 2018
CLIENT IP ADDRESS: 192.168.0.130
SERVER IP ADDRESS: 192.168.0.107
=============================================================

(5) 上图,放鞭炮

LDAP认证登录成功!

以上是关于2022-03-10 CAS认证流程的主要内容,如果未能解决你的问题,请参考以下文章

从http验证流程解析CAS单点登录

cas客户端流程详解(源码解析)--单点登录

CAS 单点登录流程

CAS详细登录流程(转)

cas restful API使用流程

CAS客户端整合 Zabbix