CAS+OAuth2的SSO认证授权单点登录

目录

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)访问测试


0.搭建前环境准备

        jdk1.8+,tomcat8.5+,git,maven3.6.1,谷歌Chrome浏览器,idea或eclipse,配置好jdk环境变量

本文以tomcat8.5.31为例。

本文默认所有安装路径均在D:\casserver下。

1.cas服务器搭建

 (1).创建CAS安装目录,如D:\casserver,右键Git Bash Here 执行:

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,别搞错。

(2).打包cas.war

cd cas-overlay-template 

build package

 
  

 build success之后,D:\casserver\cas-overlay-template\tarage目录下cas.war包存在。

(3).部署并启动war包

        1)将D:\casserver\cas-overlay-template\tarage\cas.war复制到tomcat8.5.31\webapps目录下

        2)启动apache-tomcat-8.5.31\bin\startup.bat 

(4).访问测试

打开谷歌,访问链接: http://127.0.0.1:8080/cas/login 

CAS+OAuth2的SSO认证授权单点登录_第1张图片

casuser/Mellon 进行登录。

CAS+OAuth2的SSO认证授权单点登录_第2张图片

如上即成功。 

2.搭建HTTPS的SSO SERVER

        CAS原理和实现流程自己看,CAS必须配置支持HTTPS协议。

CAS+OAuth2的SSO认证授权单点登录_第3张图片

         如上登录中,右侧有两个提示红叉,第一个提示配置https,第二个提示配置数据库。此处配置https。

(1).设置域名

 hosts文件配置域名解析(以官网所示域名为例)

C:\Windows\System32\drivers\etc\hosts 添加

127.0.0.1    cas.example.org

(2).生成SSL证书。正式对外的网站,需要购买SSL证书,自己用可以本地生成。

注意此处不设置好很容易有如下报错

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访问如下提示

CAS+OAuth2的SSO认证授权单点登录_第4张图片

casuser/Mellon 登录,

显示登录成功

3.连接数据库,以数据库账号密码做登录

此处不做详细介绍,亲测没难度,文章最后放链接。

4.在CAS Server上增加OAuth2.0协议

(1)工程导入idea(本人使用idea)

将D:\casserver\cas-overlay-template,idea打开

①正确配置好工程的maven。

然后如图,先clear,再install,再package。直接package也可。

CAS+OAuth2的SSO认证授权单点登录_第5张图片

②新建src\main\resources目录(注意文件类型)。将打包后出现的overlays目录下的classes中所有文件,拷贝到resources下。 

CAS+OAuth2的SSO认证授权单点登录_第6张图片

(2)修改配置文件。pom.xml中增加


        
          org.apereo.cas
          cas-server-support-oauth-webflow
          ${cas.version}
        
 

注意直接放在单独的中,不要放在如等的标签下的里。

(3)修改application.properties

在\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

以上为本人亲测无数次结论,不写好很容易报错的喔!!!

(4)增加接入servcie的注册文件:OAuthService-1001.json

内容为:

{
  "@class" : "org.apereo.cas.support.oauth.services.OAuthRegisteredService",
  "clientId": "20210903",
  "clientSecret": "cas123456",
  "serviceId" : "^(https|http|imaps)://.*",
  "name" : "OAuthService",
  "id" : 1001
}

文件名称切记别写错,{name}-{id}.json

(5)打包测试,执行clear-install-package。

项目路径target\cas.war复制到tomcat\webapps中。记得删除原有war包及cas文件,执行

D:\casserver\apache-tomcat-8.5.31\bin\startup.bat

(6)访问测试

①. 访问如下地址

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:这个是认证通过后跳转的地址。我这个是示例,认证成功后,就跳转到百度。您需要修改成您的接入系统;

CAS+OAuth2的SSO认证授权单点登录_第7张图片

输入casuser/Mellon后登录;

CAS+OAuth2的SSO认证授权单点登录_第8张图片

点击允许后跳转至百度页面。

大功告成。

②跳转成功后参数带有codeCAS+OAuth2的SSO认证授权单点登录_第9张图片

通过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

  1. cas.server.name=https://server.cas.com:${server.port}/cas

  2. cas.server.prefix=${cas.server.name}

     

写在最后:关于3cas连接数据库,可参考轻松搭建CAS 5.x系列(3)-连接数据库,使用数据库表中的帐号做登录 - 自助土豆 - 博客园或拉取

cas-overlay-template: 基于cas,自定义内容 自行配置研究。很简单的。


文章部分图片取自网上,一样的内容没必要截,感谢广大写CAS登录的博主们。

你可能感兴趣的:(CAS,OAuth2,java,oauth2,网络安全,sso)