环境信息
JDK:1.8
CAS:5.3.8 overlay
tomcat:8.5
cas部署
下载cas overlay 代码 编译部署
添加如下依赖
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-oauth-webflow</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
第一个依赖支持oauth2 第二个依赖支持数据库验证登录
部署后修改/apache-tomcat-8.5.38/webapps/cas/WEB-INF/classes下面的application.properties
屏蔽 #cas.authn.accept.users=casuser::Mellon
停用静态用户登录
改用数据库密码登录
在Linux /etc/cas/config 下面添加cas.properties 如下:
//此处改正你的地址 test.com是在系统hosts文件里面配置的
cas.server.name: https://test.com:8443
cas.server.prefix: https://test.com:8443/cas
cas.adminPagesSecurity.ip=127.0.0.1
logging.config: file:/etc/cas/config/log4j2.xml
cas.tgc.secure=false //去掉HTTPS验证
#cas.tgc.httpOnly=true
cas.warningCookie.secure=false //去掉HTTPS验证
#cas.warningCookie.httpOnly=true
cas.serviceRegistry.initFromJson=true //这个一定要改应该是告诉系统从json文件加载服务
#cas.authn.jdbc.query[0].credentialCriteria=
#cas.authn.jdbc.query[0].name=
#cas.authn.jdbc.query[0].order=0
cas.authn.jdbc.query[0].sql=SELECT * FROM users WHERE username=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].fieldExpired=
cas.authn.jdbc.query[0].fieldDisabled=
cas.authn.jdbc.query[0].principalAttributeList=sn,cn:commonName,givenName
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=ww103088
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
cas.authn.jdbc.query[0].url=jdbc:mysql://192.168.2.129:3306/test?useSSL=false&serverTimezone=UTC
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
cas.authn.jdbc.query[0].failFastTimeout=1
#cas.authn.jdbc.query[0].isolationLevelName=ISOLATION_READ_COMMITTED
cas.authn.jdbc.query[0].healthQuery=select 1
#cas.authn.jdbc.query[0].isolateInternalQueries=false
#cas.authn.jdbc.query[0].leakThreshold=10
#cas.authn.jdbc.query[0].propagationBehaviorName=PROPAGATION_REQUIRED
#cas.authn.jdbc.query[0].batchSize=1
#cas.authn.jdbc.query[0].defaultCatalog=
#cas.authn.jdbc.query[0].defaultSchema=
#cas.authn.jdbc.query[0].ddlAuto=create-drop
#cas.authn.jdbc.query[0].physicalNamingStrategyClassName=org.apereo.cas.jpa.CasHibernatePhysicalNamingStrategy
cas.authn.jdbc.query[0].autocommit=false
cas.authn.jdbc.query[0].idleTimeout=1000
cas.authn.jdbc.query[0].properties.propertyName=propertyValue
cas.authn.jdbc.query[0].pool.suspension=false
cas.authn.jdbc.query[0].pool.minSize=6
cas.authn.jdbc.query[0].pool.maxSize=18
cas.authn.jdbc.query[0].pool.maxWait=9000
cas.authn.jdbc.query[0].pool.timeoutMillis=1000
as.authn.oauth.refreshToken.timeToKillInSeconds=25999
cas.authn.oauth.code.timeToKillInSeconds=300
cas.authn.oauth.code.numberOfUses=1
cas.authn.oauth.accessToken.releaseProtocolAttributes=true
cas.authn.oauth.accessToken.timeToKillInSeconds=7200
cas.authn.oauth.accessToken.maxTimeToLiveInSeconds=2880
cas.authn.oauth.grants.resourceOwner.requireServiceHeader=true
cas.authn.oauth.userProfileViewType=NESTED
修改 apache-tomcat-8.5.38/webapps/cas/WEB-INF/classes/services 下面的 HTTPSandIMAPS-10000001.json 文件,添加http支持 也就是不用HTTPS访问 在serviceid里面添加http:
{
“@class” : “org.apereo.cas.services.RegexRegisteredService”,
“serviceId” : “^(https|imaps|http)?/.*”,
“name” : “HTTPS and IMAPS”,
“id” : 10000001,
“description” : “This service definition authorizes all application urls that support HTTPS and IMAPS protocols.”,
“evaluationOrder” : 10000
}
在apache-tomcat-8.5.38/webapps/cas/WEB-INF/classes/services
下面添加 OAuthService-1000001.json文件
{
“@class” : “org.apereo.cas.support.oauth.services.OAuthRegisteredService”,
“clientId”: “100001”,
“clientSecret”: “100001abcdeft”,
“serviceId” : “^(https|http|imaps)?/.*”,
“name” : “OAuthService”,
“id” : 1000001
}
采用authorization_code方式授权,首先获取code
https://test.com:8443/cas/oauth2.0/authorize?response_type=code&client_id=100001&redirect_uri=http://www.baidu.com
这一个步骤如果报空指针异常,看一下代码是不是registerserver是不是空的,如果是这样,那就是你上面配置的json service 没有生效,如果生效
你能在tomcat启动日志里面看到加载service的信息
还要确认下你的clientid是不是跟配置的一致,否则也会报错。
成功后会跳转到百度,在url后面会带code参数
这个URL应该是Post获取的,可以用浏览器直接访问,如果浏览器返回401让你登录,那一定是你的client_id 或者client_secret有问题,我就是client_secret弄错了 浪费了我一下午的时间,这个参数就是在上面的json文件里面配置的.
获取到token以后就可以获取user_profile了。
有问题请留言。