目录
0.搭建前准备
1.cas服务器搭建
(1).创建CAS安装目录,如D:\casserver,右键Git Bash Here 执行:
(2).打包cas.war
(3).部署并启动war包
(4).访问测试
2.搭建HTTPS的SSO SERVER
(1).设置域名
(2).生成SSL证书。正式对外的网站,需要购买SSL证书,自己用可以本地生成。
3.连接数据库,以数据库账号密码做登录
4.在CAS Server上增加OAuth2.0协议
(1)工程导入idea(本人使用idea)
(2)修改配置文件。pom.xml中增加
(3)修改application.properties
(4)增加接入servcie的注册文件:OAuthService-1001.json
(5)打包测试,执行clear-install-package。
(6)访问测试
jdk1.8+,tomcat8.5+,git,maven3.6.1,谷歌Chrome浏览器,idea或eclipse,配置好jdk环境变量
本文以tomcat8.5.31为例。
本文默认所有安装路径均在D:\casserver下。
git clone -b 5.3 https://github.com/apereo/cas-overlay-template.git
根据官方站点CAS - OAuth Authentication描述,5.3版本最佳也最好配置,网上教程也基本为该版本。
也可以github.com上,搜cas-overlay-template找5.3+版本,注意6+以上版本均为jdk11,别搞错。
cd cas-overlay-template
build package
build success之后,D:\casserver\cas-overlay-template\tarage目录下cas.war包存在。
1)将D:\casserver\cas-overlay-template\tarage\cas.war复制到tomcat8.5.31\webapps目录下
2)启动apache-tomcat-8.5.31\bin\startup.bat
打开谷歌,访问链接: http://127.0.0.1:8080/cas/login
casuser/Mellon 进行登录。
如上即成功。
CAS原理和实现流程自己看,CAS必须配置支持HTTPS协议。
如上登录中,右侧有两个提示红叉,第一个提示配置https,第二个提示配置数据库。此处配置https。
hosts文件配置域名解析(以官网所示域名为例)
C:\Windows\System32\drivers\etc\hosts 添加
127.0.0.1 cas.example.org
注意此处不设置好很容易有如下报错。
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching casserver found
①.使用java自带keytool创建本地密钥库
在环境变量所配置的jdk的bin目录下(以下路径为我本地),cmd
keytool -genkey -alias testkey -keyalg RSA -keystore "C:\Program Files\jdk\Testkey"
创建本地密钥库命令为:
-alias : 后跟别名,这里的testkey是别名,根据个人自定义
-keystore :这里是声明生成key的位置(后面会用)
提示设置密码,最好设置为和原证书库一致,为changeit。
输入完成后,跳入下图所示,注意:红框这里一定要输入你的域名,此处为cas.example.org
剩余填写不影响,照着上面填就ok,最后面需要输入的口令为原证书库口令changeit。别输错。
②.把密钥库导出成证书文件,输入命令:
keytool -export -file "C:\Program Files\jdk\testkey.crt" -alias testkey -keystore "C:\Program Files\jdk\Testkey"
-file:定义输出文件的路径和名称
-alias:后跟证书的别名(之前定义的)
-keystore:密钥库的存储路径
③.将创建的证书导入到JAVA证书库
把上面.crt证书导入到客户端JDK密钥库中(JDK证书密钥库默认密码:changeit)
位置在C:\Program Files\jdk\jre\lib\security\cacerts
keytool -import -keystore "C:\Program Files\jdk\jre\lib\security\cacerts" -file "C:\Program Files\jdk\testkey.crt" -alias testkey
执行完成后,
此时证书生成成功。
④.修改tomcat配置
在tomcat安装路径conf目录下,修改server.xml配置文件中,添加如下配置(注意路径的/):
certificateKeystoreFile:刚刚创建的密钥库路径
certificateKeystorePassword:密钥库口令
⑤.启动tomcat,访问测试
执行D:\casserver\apache-tomcat-8.5.31\bin\startup.bat
https://cas.example.org:8443/cas访问如下提示
casuser/Mellon 登录,
显示登录成功。
此处不做详细介绍,亲测没难度,文章最后放链接。
将D:\casserver\cas-overlay-template,idea打开
①正确配置好工程的maven。
然后如图,先clear,再install,再package。直接package也可。
②新建src\main\resources目录(注意文件类型)。将打包后出现的overlays目录下的classes中所有文件,拷贝到resources下。
org.apereo.cas
cas-server-support-oauth-webflow
${cas.version}
注意直接放在单独的
在\src\main\resources\application.properties中增加:
cas.server.name=https://cas.example.org:8443
cas.server.prefix=https://cas.example.org:8443/cas
cas.tgc.secure=false
#开启json识别默认false
cas.serviceRegistry.initFromJson=true
#
cas.serviceRegistry.json.location=classpath:/services
cas.authn.oauth.refreshToken.timeToKillInSeconds=2592000
cas.authn.oauth.code.timeToKillInSeconds=30
cas.authn.oauth.code.numberOfUses=1
cas.authn.oauth.accessToken.releaseProtocolAttributes=true
cas.authn.oauth.accessToken.timeToKillInSeconds=7200
cas.authn.oauth.accessToken.maxTimeToLiveInSeconds=28800
cas.authn.oauth.grants.resourceOwner.requireServiceHeader=true
cas.authn.oauth.userProfileViewType=NESTED
以上为本人亲测无数次结论,不写好很容易报错的喔!!!
内容为:
{
"@class" : "org.apereo.cas.support.oauth.services.OAuthRegisteredService",
"clientId": "20210903",
"clientSecret": "cas123456",
"serviceId" : "^(https|http|imaps)://.*",
"name" : "OAuthService",
"id" : 1001
}
文件名称切记别写错,{name}-{id}.json
项目路径target\cas.war复制到tomcat\webapps中。记得删除原有war包及cas文件,执行
D:\casserver\apache-tomcat-8.5.31\bin\startup.bat
①. 访问如下地址
https://cas.example.org:8443/cas/oauth2.0/authorize?response_type=code&client_id=20210903&redirect_uri=http://www.baidu.com
参数说明:
response_type=code,这个是按照code的方式接入,有多种接入方式
client_id=20210903,这个参数的值是servcie注册的定义的,每个接入系统都分配一个值
redirect_uri=http://www.baidu.com:这个是认证通过后跳转的地址。我这个是示例,认证成功后,就跳转到百度。您需要修改成您的接入系统;
输入casuser/Mellon后登录;
点击允许后跳转至百度页面。
大功告成。
通过code获取accessToken,
接入程序需要调用如下地址,
目前我们是浏览器直接访问这个地址,
https://cas.example.org:8443/cas/oauth2.0/accessToken?grant_type=authorization_code&client_id=20210903&client_secret=cas123456&code=OC-4-1JEaLLL2lqxbSZPFOdLLLwBQMWoUQM-I&redirect_uri=http://www.baidu.com
会返回,
access_token=AT-1-53AfGdKA2mL5IbI1iP29n6HlXcWL3Q5b&expires_in=28800
通过accessToken获取当前登录用户信息
https://cas.example.org:8443/cas/oauth2.0/profile?access_token=dwfD4DW4AD4W5A4D5ADAD
返回:
{
"service" : "http://www.baidu.com",
"attributes" : {
"credentialType" : "UsernamePasswordCredential"
},
"id" : "admin",
"client_id" : "100001"
}
此时大功告成,貌似谷歌浏览器2021年后禁止取用token登入,获取token部分出现提示也正常。
注意:
易出现问题,如下:
1.访问服务的时候,自动跳转到https://cas.example.org:8443服务器
解决方案:在application.properties中添加如下配置:
#需要配置 server name的信息,不然就会跑到 https://cas.example.org:8443
cas.server.name=https://server.cas.com:${server.port}/cas
cas.server.prefix=${cas.server.name}
写在最后:关于3cas连接数据库,可参考轻松搭建CAS 5.x系列(3)-连接数据库,使用数据库表中的帐号做登录 - 自助土豆 - 博客园或拉取
cas-overlay-template: 基于cas,自定义内容 自行配置研究。很简单的。
文章部分图片取自网上,一样的内容没必要截,感谢广大写CAS登录的博主们。