ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CAS学习(一) 编译支持REST认证的cas6.2服务端并配置部署测试

2021-07-03 11:34:21  阅读:523  来源: 互联网

标签:jdbc CAS REST server cas authn query 服务端


CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
【1】开源的企业级单点登录解决方案。
【2】CAS Server 为需要独立部署的 Web 应用。这个CAS框架已经提供
【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图是 CAS 最基本的协议过程:

在这里插入图片描述
下面开始部署cas服务并做简单测试:

1、 下载CAS

git clone -b 6.3 https://github.com/apereo/cas-overlay-template.git

2、 构建项目
解压文件
进入cas-overlay-template目录
配置好gradle,需要版本6.8.1,
配置好jdk,需要11
通过命令行执行

gradlew clean build
gradlew explodeWar

打包的包在build/libs下

PS:如果打docker镜像,gradlew build jibDockerBuild

3、 添加配置文件
将bulid目录下cas-resources 文件夹,拷贝到src/main下面,把拷贝过来的cas-resources文件改名为resources
把\etc\cas\thekeystore文件拷贝到resources目录下
还需要把resources下application.properties 配置文进行修改。
修改如下配置:

server.ssl.key-store=file:/etc/cas/thekeystore

改为

server.ssl.key-store=classpath:thekeystore

再次执行构建

gradlew build
gradlew explodeWar

4、 将用户管理配置到Mysql数据库
在build.gradle中添加数据库以及mysql依赖

compile "org.apereo.cas:cas-server-support-jdbc:${casServerVersion}"
compile "org.apereo.cas:cas-server-support-jdbc-drivers:${casServerVersion}"
compile "mysql:mysql-connector-java:8.0.15" //注意自己的mysql版本

修改src/main/resources下的application.properties文件
将默认用户名密码注释并取消静态配置

	cas.authn.accept.enabled=true
#cas.authn.accept.users=casuser::Mellon
#cas.authn.accept.name=Static Credentials

添加mysql相关配置
#以下为本地的数据库配置信息

cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?serverTimezone=UTC&allowMultiQueries=true
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=root
cas.authn.jdbc.query[0].sql=select password from user where username= ?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

在mysql创建一个库cas,创建表user并插入一条记录
在这里插入图片描述
因为使用了MD5加密,将密码123456通过在线加密网站https://md5jiami.bmcx.com/
加密并将加密后的密码存入password列,如下:
在这里插入图片描述
再次执行构建

gradlew build
gradlew explodeWar

5、 支持HTTP
暂时使用HTTP,第3步的sslkey也可以不拷贝
修改 tomcat中cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json,将"serviceId"修改为"^(https|http|imaps)://.*",修改后的内容如下:

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|http|imaps)://.*",
  "name" : "HTTPS and IMAPS",
  "id" : 10000001,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000
}

修改 cas\WEB-INF\classes\application.properties,新增cas.tgc.secure和cas.serviceRegistry.initFromJson配置

cas.serviceRegistry.json.location=classpath:/services
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

注释ssl配置

#server.ssl.key-store=classpath:thekeystore
#server.ssl.key-store-password=changeit
#server.ssl.key-password=changeit
#server.ssl.enabled=true

6、 运行
build/lib/cas.war放到tomcat的webapps中就好了
开启Tomcat

7、访问CAS
在这里插入图片描述

使用用户名:zhangsan 默认密码:123456

8、使用客户端测试
将客户端测试例子cas-client-sample.war拷贝至tomcat,访问http://localhost:8080/cas-client-sample
PS:例子生成方式:https://github.com/cas-projects/cas-sample-java-webapp处下载,执行mvn clean package
修改web.xml中IP端口的配置为对应Cas和客户端服务的IP端口
将mfa-duo多因素验证注释掉,如下:

   <!--<init-param>
            <param-name>authn_method</param-name>
            <param-value>mfa-duo</param-value>
        </init-param>-->

在cas服务的cas\WEB-INF\classes\services下添加Test-10000003.json文件
将例子服务注册到CAS中
文件内容如下:

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(http)://localhost:8080.*",
  "name" : "TEST",
  "id" : 10000003,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000
}

访问http://localhost:8080/cas-client-sample
在这里插入图片描述
使用zhangsan/123456登录
在这里插入图片描述
9、cas服务开启Rest认证
cas-overlay-template源码的build.gradle中添加rest的依赖

compile "org.apereo.cas:cas-server-support-rest:${casServerVersion}"
重新编译
gradlew build
PS(重新生成的war中有些配置还原了,别忘了替换一下)
将cas.war解压,把之前的配置好的配置文件替换一下
将cas放在tomcat/webapps下,重新开启tomcat

10、使用rest方式登录
(1)发送POST请求一,获取TGT,请求地址/cas/v1/tickets,请求响应头中的Location即包含CAS服务器返回的TGT
POSTMAN的方式:
在这里插入图片描述

curl方式:

curl -i -X POST \
  http://cas.gfstack.geo:8080/cas/v1/tickets \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'username=zhangsan&password=123456'

(2)发送POST请求二,获取ST,直接使用请求一中返回的Location作为请求地址,service参数为客户端地址
注意下面的service参数的值都要以/结尾
PostMan方式:
在这里插入图片描述

curl方式:
	curl -X POST \
  http://localhost:8080/cas/v1/tickets/TGT-3-j5wYpHjLJVuGXUX3erUcOpRFu5LrYtp3AiTwFNN2AmOyaQnO4Pt2yzyKVNv5cl4FfYQ-DESKTOP-RL4PLVE \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'service=http%3A%2F%2Flocalhost%3A8080%2Fcas-client-sample%2F'

(3)校验ST,访问http://localhost:8080/cas-client-sample?ticket={ST}完成登录
{ST}是上一步返回的
在这里插入图片描述

标签:jdbc,CAS,REST,server,cas,authn,query,服务端
来源: https://blog.csdn.net/u011943534/article/details/118437235

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有