精华内容
下载资源
问答
  • CAS5.3 服务器集成MySQL8数据库
    2021-10-26 10:54:43

    MySQL 相关准备

    1、安装MySQL8 并安装相关数据库实例

    省略一千字***

    2、新建ucas_auth_user表,并增加相关用户条记录

    
    DROP TABLE IF EXISTS `ucas_auth_user`;
    CREATE TABLE `ucas_auth_user`  (
      `sid` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
      `user_pin` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录名',
      `user_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
      `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
      `gender` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别(1:男,2:女)',
      `tel` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '常用电话',
      `phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '其他联系电话',
      `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电子邮件',
      `state` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '2' COMMENT '状态(1:禁用,2:启用)',
      `created_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
      `created_dt` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
      `version` int(9) NULL DEFAULT 1 COMMENT '版本号',
      `updated_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
      `updated_dt` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
      `zone_org_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '区域机构',
      `organiztion_sid` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门sid',
      `value1` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备用字段1',
      `value2` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备用字段2',
      `value3` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备用字段3',
      `delete_flag` int(1) NULL DEFAULT 1 COMMENT '删除标识(1:未删除,2:已删除)',
      `session_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '会话Id',
      `user_category` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户类别(系统管理员\\安全保密管理员\\安全审计员\\普通用户)',
      `unique_sid` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作日志记录uuid',
      PRIMARY KEY (`sid`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
    
    
    INSERT INTO `ucas_auth_user` VALUES ('1', 'admin', '超级管理员', 'e10adc3949ba59abbe56e057f20f883e', NULL, '13726252116', NULL, '123@1.com', '2', NULL, '2019-08-13 12:09:15', 38, NULL, '2020-04-07 15:57:33', NULL, '1', NULL, NULL, NULL, 1, 'TXJMgpVJc8Vtaox6Zg9qf2oSnnrh4pdV', 'SUPER_ADMIN,SYSTEM_ADMIN', NULL);
    

    CAS5.3配置MySQL相关信息

    1、CAS5.3 之pom.xml 文件添加MySQL8 驱动

    properties节点中,新增MySQL驱动版本

    <mysql.driver.version>8.0.13</mysql.driver.version>

    cas-server-webapp${app.server}所在同级dependency节点中增加以下配置

                    <!--数据库认证相关 start -->
    				<dependency>
    					<groupId>org.apereo.cas</groupId>
    					<artifactId>cas-server-support-jdbc</artifactId>
    					<version>${cas.version}</version>
    				</dependency>
    				<dependency>
    					<groupId>org.apereo.cas</groupId>
    					<artifactId>cas-server-support-jdbc-drivers</artifactId>
    					<version>${cas.version}</version>
    				</dependency>
    				<dependency>
    					<groupId>mysql</groupId>
    					<artifactId>mysql-connector-java</artifactId>
    					<version>${mysql.driver.version}</version>
    				</dependency>
    				<!--数据库认证相关 end -->

    修改CAS5.3之application.properties配置 

    打开cas-overlay-template-5.3\src\main\resources\application.properties文件

    1)注释内存账户

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

    2)增加MySQL用户查询配置

    ##
    # CAS Authentication Credentials
    #
    #cas.authn.accept.users=casuser::Mellon
    cas.authn.jdbc.query[0].url=jdbc:mysql://123.0.0.1:3306/ucas?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true     
    cas.authn.jdbc.query[0].user=root
    cas.authn.jdbc.query[0].password=123456
    cas.authn.jdbc.query[0].sql=select * from ucas_auth_user where user_pin =?
    cas.authn.jdbc.query[0].fieldPassword=password
    cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
    cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
    
    #加密策略
    #采用MD5加密
    cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
    cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
    #MD5加密策略
    cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

    CAS5.3验证

    切换至cas5.3 源码目录,再次执行脚本构建任务

    D:\cas\cas-overlay-template-5.3>.\build.cmd run
    [INFO] Scanning for projects...
    [INFO]
    [INFO] Using the MultiThreadedBuilder implementation with a thread count of 5
    [INFO]
    [INFO] ---------------------< org.apereo.cas:cas-overlay >---------------------
    [INFO] Building cas-overlay 1.0
    [INFO] --------------------------------[ war ]---------------------------------

    浏览器访问CAS

    http://localhost:8443/cas

    输入MySQL8 表中的用户名admin,密码123456(使用MD5加密)点击登录

    至此,CAS5.3结合MySQL8搭建完成。

     

    更多相关内容
  • cas5.3.war

    2020-03-05 15:23:14
    单点登陆cas5.3.war放到tomcat直接使用!
  • 公司最近再开发一款OA产品,需要将CAS整合AD域实现免登陆。根据该文档,可以搭建初步环境。 but 最后的结果,这个方案太复杂了,公司妥协了,不需要免登陆,只需要CAS校验AD域。
  • cas5.3.zip

    2020-01-08 09:59:38
    sso单点登陆,一次登陆,在各个系统免登录运行,内容已经配置了连接数据库,具体修改数据库和表内容,查看etc/cas/cas.properties文件中有关于数据库的属性,自行查看修改即可
  • CAS 5.3服务器搭建

    2021-10-26 10:20:39
    CAS5.3 下载 下载地址 GitHub下载地址:https://github.com/apereo/cas-overlay-template 版本选择 点击下载 下载完成后解压ZIP文件,文件内容如下: CAS5.3 编译 运行构建脚本 切换至cas5.3 源码地址...

    CAS5.3 下载

    下载地址

    GitHub下载地址:https://github.com/apereo/cas-overlay-template

    版本选择

     点击下载

    下载完成后解压ZIP文件,文件内容如下: 

     CAS5.3 编译

    运行构建脚本

    切换至cas5.3 源码地址(D:\cas\cas-overlay-template-5.3),执行如下指令:.\build.cmd run

     备注说明:Windows环境运行build.cmd,Linux环境运行build.sh

    运行构建提示错误信息:Caused by: java.io.FileNotFoundException:\etc\cas\thekeystore (系统找不到指定的文件)

    错误信息:

    Caused by: java.io.FileNotFoundException: \etc\cas\thekeystore (系统找不到指定的文件。)
            at java.io.FileInputStream.open0(Native Method) ~[?:1.8.0_211]
            at java.io.FileInputStream.open(Unknown Source) ~[?:1.8.0_211]
            at java.io.FileInputStream.<init>(Unknown Source) ~[?:1.8.0_211]
            at java.io.FileInputStream.<init>(Unknown Source) ~[?:1.8.0_211]
            at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source) ~[?:1.8.0_211]
            at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source) ~[?:1.8.0_211]
            at org.apache.tomcat.util.file.ConfigFileLoader.getInputStream(ConfigFileLoader.java:89) ~[tomcat-embed-core-8.5.47.jar!/:8.5.47]
            at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:197) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:206) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:282) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:246) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:98) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:72) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:244) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1191) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591) ~[tomcat-coyote-8.5.47.jar!/:8.5.47]
            at org.apache.catalina.connector.Connector.startInternal(Connector.java:1018) ~[tomcat-catalina-8.5.47.jar!/:8.5.47]
            ... 21 more

    错误产生原因:\etc\cas\thekeystore是生成的密钥文件的,因为这里不使用加密,所以需要将cas的https协议忽略并将http协议设置为允许

    解决办法:支持http协议配置

    1)在cas-overlay-template-5.3目录下创建src文件夹

     2)在src文件夹中,依次创建main\resources目录,最终结果如下

     

    3)拷贝所需文件

    进入cas-overlay-template-5.3\target\cas\WEB-INF\classes目录将services文件夹与application.properties文件复制到上一步的cas-overlay-template-5.3\src\main\resources文件中,如下截图:

    4)修改复制后的application.properties文件 

    注释ssl 协议相关配置:

     文件最末尾加入以下2个配置项,如下图

    cas.tgc.secure=false
    cas.serviceRegistry.initFromJson=true

     修改services\HTTPSandIMAPS-10000001.json

     增加http协议配置

    再次执行构建脚本

    .\build.cmd run

    CAS验证

    浏览器访问CAS

    打开http://localhost:8443/cas

    右边的两个提示框,黄色代表cas server没有使用密钥加密,蓝色提示当前登录账户是静态验证,不影响测试

     

    测试使用默认用户名密码进行登录验证

    输入默认用户名casuser与密码Mellon,点击登录按钮

     备注说明:默认用户名与密码存储在cas-overlay-template-5.3\src\main\resources\application.properties文件,cas.authn.accept.users=casuser::Mellon

     

     至此,cas 5.3 服务端搭建成功

     

    展开全文
  • 切换到5.3分支 如果需要启用mysql 数据库存用户名和密码和oauth协议,需要在pom文件添加下面的依赖 <!-- ...Additional dependencies may be placed here... --> <dependency>.

    前言:本次部署为了测试集成CAS使用,部署使用oauth2.0协议的sso服务

    1.打包

    首先拉取工程 git clone git@github.com:apereo/cas-overlay-template.git

    切换到5.3分支

    如果需要启用mysql 数据库存用户名和密码和oauth协议,需要在pom文件添加下面的依赖

    <!--
    
    ...Additional dependencies may be placed here...
    
    -->
    
    <dependency>
    
    <groupId>org.apereo.cas</groupId>
    
    <artifactId>cas-server-support-oauth-webflow</artifactId>
    
    <version>${cas.version}</version>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.apereo.cas</groupId>
    
    <artifactId>cas-server-support-jdbc</artifactId>
    
    <version>${cas.version}</version>
    
    </dependency>
    
    <dependency>
    
    <groupId>mysql</groupId>
    
    <artifactId>mysql-connector-java</artifactId>
    
    <version>5.1.47</version>
    
    </dependency>

    添加好后,可以直接使用buil.cmd package进行打包,这时会遇到打包失败,是无法拉取xmlsectool.2.0.0.jar包,这时需要手动去提示的仓库下载jar包,然后install到本地仓库

    这时再打包就可以成功了。

    2.部署

    cas如果使用单点登录需要使用https部署,开启tomcat的https服务,这个时候就需要生成秘钥和证书,在需要部署cas的机器上使用jdk自带的keytool工具生成秘钥

    对秘钥进行加密的密码都使用changeit这个后面会在配置tomcat使用到。

    keytool -genkey -alias cas2 -keyalg RSA -keystore /opt/mycaskey

    使用该秘钥生成证书,注意生成证书时需要指定域名,我使用的默认的cas.example.org

    keytool -export -file /opt/mycas.crt -alias cas2 -keystore /opt/mycaskey 

    然后将该证书导入到jre下面的目录

    keytool -import -keystore /opt/jdk1.8.0_131/jre/lib/security/cacerts -file /etc/cas/mycas.crt -alias cas2

    tomcat开启https需要在server.xml文件中添加修改配置

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    
    maxThreads="150" SSLEnabled="true" keystoreFile="/etc/cas/mycaskey" keystorePass="changeit">
    
    </Connector>

    上面的/etc/cas/mycaskey 代表的是生成的秘钥,changeit代表生成秘钥后加密的密码

    cas部署默认会去/etc/cas/conf目录下读取配置文件,包含cas.properties文件,文件中包含的配置为

    cas.server.namehttps://cas.example.org:8443

    cas.server.prefix: https://cas.example.org:8443/cas

    cas.adminPagesSecurity.ip=127\.0\.0\.1

    logging.config: file:/etc/cas/config/log4j2.xml

    #jdbc验证配置(注意结尾不要有空格等字符)

    #查询账号密码sql,必须包含密码字段

    cas.authn.jdbc.query[0].sql=select * from sys_user where username=?

    #指定上面的sql查询字段名(必须)

    cas.authn.jdbc.query[0].fieldPassword=password

    #指定过期字段,1为过期,若过期需要修改密码

    cas.authn.jdbc.query[0].fieldExpired=expired

    #为不可用字段段,1为不可用,0为可用

    cas.authn.jdbc.query[0].fieldDisabled=disabled

    #数据库方言hibernate的知识

    cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect

    #数据库驱动

    cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

    #数据库连接

    cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=UTF-8

    #数据库用户名

    cas.authn.jdbc.query[0].user=root

    #数据库密码

    cas.authn.jdbc.query[0].password=baifendian

    #默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密

    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

    #开启oauth2.0需要添加的配置

    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

    注意tomcat下webapps下面的cas应用中也有配置,也需要修改,一个是注释掉

    #cas.authn.accept.users=casuser::Mellon这个表示使用固定的用户名causer和密码Mellon登录,我们使用mysql存储用户名和密码所以需要注释

    单点登录,肯定需要注册哪些网站可以使用这个单点登录服务,所以需要在tomcat的webapps下cas下面的service中新增一个支持的oauth2.0的服务注册的json文件,这里取名OAuth2-100001.json,文件内容包含

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

    准备好这些配置的修改后,可以启动tomcat,还有一点是关于域名host的配置,在部署cas的机器上需要添加,浏览器访问的机器上也需要添加。

    3.应用

    访问地址:https://cas.example.org:8443/cas/oauth2.0/authorize?response_type=code&client_id=100001&redirect_uri=http://www.baidu.com

    访问后会跳转,打开的页面如下:

    参数说明:

    response_type=code,这个是按照code的方式接入,有多种接入方式

    client_id=100001,这个参数的值是servcie注册的定义的,每个接入系统都分配一个值

    redirect_uri=http://www.baidu.com 这个是认证通过后跳转的地址。我这个是示例,认证成功后,就跳转到百度。您需要修改成您的接入系统

    输入mysql数据库中的用户名和密码后,会跳到一个授信页面,如下

    点击allow后会跳到百度的页面,并可以在地址栏拿到授权码,页面如下

    最后可以拿着授权码去获取access_token,访问如下

    https://cas.example.org:8443/cas/oauth2.0/accessToken?grant_type=authorization_code&client_id=100001&client_secret=100001abcdeft&code=OC-2-3M6BedCz7TLIz0rpJUm-uLzPoFBbPOO0&redirect_uri=http://www.baidu.com

    可以得到

    access_token=AT-1-53AfGdKA2mL5IbI1iP29n6HlXcWL3Q5b&expires_in=28800

    此时整个认证完成。

    根据需求通过access_token拿到用户信息或者解析access_token拿到信息

    cas这里可以调用https://cas.example.org:8443/cas/oauth2.0/profile?access_token=AT-2-Gy0WHJoMBa8JEOgkl0iW-LoYVotzXb4p

    拿到信息

    {
      "service" : "http://www.baidu.com",
      "attributes" : {
        "credentialType" : "UsernamePasswordCredential"
      },
      "id" : "admin",
      "client_id" : "100001"
    }

    展开全文
  • CAS 5.3.x 单点登录

    2021-10-12 11:17:11
    最近在网上搜索CAS 单点登录及第三方授权登录的功能,网上一搜一大堆,使用到处都是坑,那么多抄袭的,我也只能苦笑。。。 自己动手丰衣足食,所有还是把自己的正确功能记录一下,给大家做个参考 Cas server 搭建 ...

    目录

    一:Cas server 搭建

    二:证书配置

    1:生成证书

    2:导出数字证书

    3:数字证书导入到JDK中

     4:配置tomcat 

    三:添加数据库支持

    1:注释掉静态用户名和密码

     2:添加新配置

    三:客户端搭建 

     1:搭建个spring boot项目

    2:配置Security

    3:添加接口

    4:未认证授权的服务


    最近在网上搜索CAS 单点登录及第三方授权登录的功能,网上一搜一大堆,使用到处都是坑,那么多抄袭的,我也只能苦笑。。。

    自己动手丰衣足食,所有还是把自己的正确功能记录一下,给大家做个参考

    一:Cas server 搭建

    CAS提供了模板 Overlay Template,方便使用 https://github.com/apereo/cas-overlay-template,当前版本是5.3.16,JDK 1.8+

    IDEA导入下载的模板,暂时不修改任何熟悉,添加Tomcat

     启动Cas Server,打开http://localhost:8080/cas/login

    输入用户名: casuser 密码:Mellon

    静态的用户名和密码在application.properties里配置

     因为使用静态的用户和http连接,左侧有提示

    黄色内容提示我们没有使用https,本地暂时使用的是http

    蓝色内容提示我们使用了静态的用户登录,当然我们会在后面添加数据库支持

    二:证书配置

    1:生成证书

    HTTPS需要证书的支持,所有我们借用JDK提供的工具keytool生成自己使用的证书

    keytool -genkey -alias caskeystore -keypass cas123 -keyalg RSA -validity 36500 -keystore D:/Java/keys/cas.keystore

     名字与姓氏时为为具体路由地址,就是待会CAS认证服务器,sso.test.com,时间设置的比较长,36500单位是天

    2:导出数字证书

     keytool -export -file D:/Java/keys/cas.crt -alias caskeystore -keystore D:/Java/keys/cas.keystore

     

    3:数字证书导入到JDK中

    keytool -import -keystore D:/Java/jdk1.8.0_161/jre/lib/security/cacerts -file D:/Java/keys/cas.crt -alias caskeystore -storepass changeit

    因为我们没有这个域名,所有将本地的host文件修改下,添加以下

    127.0.0.1       sso.test.com

     4:配置tomcat 

    在server.xml中

        <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" >
            <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
            <SSLHostConfig>
                <Certificate certificateKeystoreFile="D:/Java/keys/cas.keystore" certificateKeystorePassword="cas123" type="RSA" />
            </SSLHostConfig>
        </Connector>

     访问 https://sso.test.com/cas/login

     

    已经可以正常访问了。 

    三:添加数据库支持

    1:注释掉静态用户名和密码

    #cas.authn.accept.users=casuser::Mellon

     2:添加新配置

    #以下为本地的数据库配置信息
    cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/user?serverTimezone=UTC&allowMultiQueries=true
    cas.authn.jdbc.query[0].user=root
    cas.authn.jdbc.query[0].password=123456
    cas.authn.jdbc.query[0].sql=select password from data_user where user_name = ?
    cas.authn.jdbc.query[0].fieldPassword=password
    cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
    cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
    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
    #指定过期字段,1为过期,若过期不可用(可选)
    #cas.authn.jdbc.query[0].fieldExpired=expired
    #为不可用字段段,1为不可用,需要修改密码(可选)
    #cas.authn.jdbc.query[0].fieldDisabled=disabled

    3:在pom.xml中添加配置

    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-support-jdbc</artifactId>
        <version>${cas.version}</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.18</version>
    </dependency>

     

    mysql版本根数据库版本一致就行 

    建表语句

    CREATE TABLE DATA_USER(
        ID VARCHAR(32)    COMMENT '编号' ,
        USER_NAME VARCHAR(60)    COMMENT '用户名' ,
        PASSWORD VARCHAR(60)    COMMENT '密码' ,
        CREATED_BY VARCHAR(32)    COMMENT '创建人' ,
        CREATED_TIME DATETIME   DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ,
        UPDATED_BY VARCHAR(32)    COMMENT '更新人' ,
        UPDATED_TIME DATETIME   DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间' 
    )  COMMENT = '用户表';
    

    三:客户端搭建 

     1:搭建个spring boot项目

     

    以下是pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.5</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>client1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>client1</name>
        <description>client1</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- 新增的引用 -->
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-cas</artifactId>
                <version>5.5.2</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <exclude>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                            </exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

     新建application.yml

    cas:
        server:
            host: https://sso.test.com/cas
            login: ${cas.server.host}/login
            logout: ${cas.server.host}/logout
    app:
        server:
            host: http://localhost:${server.port}${server.servlet.context-path}
            login: /login/cas
            logout: /logout
    
    server:
    #    address: 127.0.0.1
        port: 9998
        servlet:
            context-path: /client1
    
    # 为了方便调试可以打开
    #logging.level.org.springframework.security: debug
    #logging.level.web: debug
    
    

    2:配置Security

    添加SecurityConfig

    @Configuration
    @EnableWebSecurity //启用web权限
    @EnableGlobalMethodSecurity(prePostEnabled = true) //启用方法验证
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        private static final String CAS_AUTHENTICATION_PROVIDER_KEY = "casAuthenticationProviderKey";
    
        @Autowired
        private CasProperties casProperties;
    
        /**定义安全策略*/
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            //禁用csrf保护机制
            http.csrf().disable();
            //禁用cors保护机制
            http.cors().disable();
            //禁用form表单登录
            http.formLogin().disable();
            //增加自定义过滤器
    
            http.authorizeRequests()//配置安全策略
    //                .antMatchers("/**").permitAll()
                    .antMatchers("/common/**").hasAnyRole("USER")
    //                .anyRequest().authenticated()//其余的所有请求都需要验证
                    .and()
                    .logout()
                    .permitAll();//定义logout不需要验证
    
            http.exceptionHandling()
                    .authenticationEntryPoint(casAuthenticationEntryPoint())
                    .and()
                    .addFilter(casAuthenticationFilter())
                    .addFilterBefore(casLogoutFilter(), LogoutFilter.class)
                    .addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class);
    
        }
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            super.configure(auth);
            auth.authenticationProvider(casAuthenticationProvider());
        }
    
        /**
         * CAS认证入口点开始 =============================================================================
         */
        //即跳转至服务端的cas地址
        @Bean
        public CasAuthenticationEntryPoint casAuthenticationEntryPoint() {
            CasAuthenticationEntryPoint casAuthenticationEntryPoint = new CasAuthenticationEntryPoint();
            casAuthenticationEntryPoint.setLoginUrl(casProperties.getCasServerLogin());
            casAuthenticationEntryPoint.setServiceProperties(serviceProperties());
            return casAuthenticationEntryPoint;
        }
    
    
        // 设置客户端service的属性
        @Bean
        public ServiceProperties serviceProperties() {
            ServiceProperties serviceProperties = new ServiceProperties();
            // 设置回调的service路径,此为主页路径
            // Cas Server认证成功后的跳转地址,这里要跳转到我们的Spring Security应用,
            // service 配置自身工程的根地址+/login/cas,表示是通过自身工程跳转到cas的登录页面,/login/cas 这个是security集成cas的固定写法
            serviceProperties.setService(casProperties.getAppServerHost() + casProperties.getAppServerLogin());
            // 对所有的未拥有ticket的访问均需要验证
            serviceProperties.setAuthenticateAllArtifacts(true);
            // sendRenew默认是false,true则意味着不允许单点登录,用户需要重新输入用户名密码以验证
            // 在安全级别要求比较高的情况下可以使用
            // serviceProperties.setSendRenew(false);
            return serviceProperties;
        }
        /**
         * CAS认证入口点结束 =============================================================================
         */
    
        /**
         * CAS认证过滤器开始 =============================================================================
         */
        @Bean
        public CasAuthenticationFilter casAuthenticationFilter() throws Exception {
            CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
            casAuthenticationFilter.setAuthenticationManager(authenticationManager());
            casAuthenticationFilter.setFilterProcessesUrl(casProperties.getAppServerLogin());
            return casAuthenticationFilter;
        }
    
        /**
         * 创建CAS校验类
         * Notes:TicketValidator、AuthenticationUserDetailsService属性必须设置;
         * serviceProperties属性主要应用于ticketValidator用于去cas服务端检验ticket
         */
        @Bean
        public CasAuthenticationProvider casAuthenticationProvider() {
            CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();
            casAuthenticationProvider.setAuthenticationUserDetailsService(customUserDetailsService());
            casAuthenticationProvider.setServiceProperties(serviceProperties());
            casAuthenticationProvider.setTicketValidator(cas20ServiceTicketValidator());
            casAuthenticationProvider.setKey(CAS_AUTHENTICATION_PROVIDER_KEY);
            return casAuthenticationProvider;
        }
    
        /**
         * 用户自定义的AuthenticationUserDetailsService
         */
        @Bean
        public AuthenticationUserDetailsService<CasAssertionAuthenticationToken> customUserDetailsService() {
            return new CustomUserDetailsService();
        }
    
        /**
         * 验证ticker,向cas服务器发送验证请求
         */
        @Bean
        public Cas20ServiceTicketValidator cas20ServiceTicketValidator() {
            // 配置上服务端的校验ticket地址
            return new Cas20ServiceTicketValidator(casProperties.getCasServerHost());
        }
    
        /**
         * CAS认证过滤器结束 =============================================================================
         */
    
        /**
         * CAS登出过滤器开始 =============================================================================
         */
        /**
         * 请求单点退出过滤器
         * @return
         */
        @Bean
        public LogoutFilter casLogoutFilter() {
            LogoutFilter logoutFilter =
                    new LogoutFilter(casProperties.getCasServerLogout(), new SecurityContextLogoutHandler());
            logoutFilter.setFilterProcessesUrl(casProperties.getAppServerLogout());
            return logoutFilter;
        }
    
        @Bean
        public SingleSignOutFilter singleSignOutFilter() {
            SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
            singleSignOutFilter.setIgnoreInitConfiguration(true);
            return singleSignOutFilter;
        }
        /**
         * CAS登出过滤器结束 =============================================================================
         */
    }

    配置读取文件CasProperties

    @Component
    @Data
    public class CasProperties {
        @Value("${cas.server.host}")
        private String casServerHost;
        @Value("${cas.server.login}")
        private String casServerLogin;
        @Value("${cas.server.logout}")
        private String casServerLogout;
        @Value("${app.server.host}")
        private String appServerHost;
        @Value("${app.server.login}")
        private String appServerLogin;
        @Value("${app.server.logout}")
        private String appServerLogout;
    }

    自定义授权CustomUserDetailsService

    public class CustomUserDetailsService implements AuthenticationUserDetailsService<CasAssertionAuthenticationToken> {
        /**
         * @param token The pre-authenticated authentication token
         * @return UserDetails for the given authentication token, never null.
         * @throws UsernameNotFoundException if no user details can be found for the given
         *                                   authentication token
         */
        @Override
        public UserDetails loadUserDetails(CasAssertionAuthenticationToken token) throws UsernameNotFoundException {
            System.out.println("人员信息");
            List<GrantedAuthority> authorities = new ArrayList();
            authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
            return new User(token.getName(), "", authorities);
        }
    }

    3:添加接口

    @RestController
    @AllArgsConstructor
    @RequestMapping("/common")
    public class Common {
    
        @GetMapping( "/test")
        public String test() {
            return "客户端1";
        }
    }

    client2和client1配置基本相同,自己操作即可

    启动clien项目,分别访问http://localhost:9998/client1/common/testhttp://localhost:9999/client2/common/test

    发现以下错误

    4:未认证授权的服务

    出现以上问题是因为Cas Server未开启http协议

    在服务端的WEB-INF/classess/application.properties添加以下内容

    #设置安全为false
    cas.tgc.secure=false
    #开启识别json文件,默认false
    cas.serviceRegistry.initFromJson=true
    
    # 配置允许登出后跳转到指定页面
    cas.logout.followServiceRedirects=true
    # 跳转到指定页面需要的参数名为 service
    cas.logout.redirectParameter=service

    同样修改WEB-INF\classes\services\HTTPSandIMAPS-10000001.json,在serviceId的属性中添加http后重启服务端即可

    {
      "@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
    }
    

    现在重新打开http://localhost:9998/client1/common/test

     输入用户名和密码,登录

    访问 http://localhost:9999/client2/common/test,直接显示内容

    单点登录到这里就完成了

    展开全文
  • CAS 5.3自定义 登录

    2020-05-04 15:08:58
    我们知道CAS为我们提供了多种认证数据源,我们可以选择JDBC、File、JSON等多种方式,但是如果我想在自己的认证方式中可以根据提交的信息实现不同数据源选择,这种方式就需要我们去实现自定义认证。 自定义策略主要...
  • .passwordEncoder.characterEncoding=UTF-8 #MD5加密策略 cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5 CAS5.3验证 切换至cas5.3 源码目录,再次执行脚本构建任务 D:\cas\cas-overlay-template-...
  • cas5.3服务端环境搭建

    2020-06-23 10:30:39
    cas服务端的构建 依赖环境 jdk1.8 maven # 查看java版本号 java -version # a查看maven版本号 mvn -v 下载cas源码
  • CAS 5.3 apache-maven-3.6.0 mysql-5.6.32 二、CAS 5.3基础环境搭建与验证 需要按照《CAS 5.3服务器搭建》搭建好环境,并使用系统默认用户名密码验证通过。 三、MySQL相关准备 3.1 创建MySQL数据库 (创建过程略) ...
  • cas5.3 → 连接mysql数据库1. 添加依赖,修改pom.xml文件2. 创建用户表3. 配置数据库连接 这里为了方便,直接使用http协议测试。 具体配置见:cas5.3 使用http方式请求 1. 添加依赖,修改pom.xml文件 <!--数据库...
  • 前面我们讲解了很多关于cas认证中心的内容,今天我们说一说如何接入客户端 创建一个springboot项目,添加依赖包 <dependency> <groupId>net.unicon.cas</groupId> <artifactId>cas-client...
  • 目录 1、cas服务端配置mysql 2、cas服务端自定义密码加密方式 ...CAS版本:5.3 下载链接:git地址是:https://github.com/apereo/cas-overlay-template tomcat:8 jdk:1.8 1、先把cas服务端的源代码拷
  • springboot 使用cas5.3 sso概念 springboot 集成cas5.3 使用JDBC认证并实现自定义加密算法 springboot 集成cas5.3 实现自定义认证策略 springboot 使用cas5.3 认证中心返回多属性配置 springboot 集成cas5.3 配置及...
  • 一、Apereo CAS 5.3服务端Server环境搭建 1.1. 本地配置tomcat通过https访问 1. 下载 在这里把zip文件下载下来:我下载的版本是5.3.9) https://github.com/apereo/cas-overlay-template 2. 编译 解压zip,...
  • cas-server默认的可用信息只有用户名, 如果我还想知道他的角色类型等其它属性,这时候就需要做一些配置了。其它代码编写代码方式这里不做介绍,只做简单配置的方式介绍。 配置操作 1、cas-server项目自行根据CAS...
  • CAS5.3连接mysql数据库

    2020-05-03 15:59:39
    在注释和之间加入下面的内容 <!--数据库认证相关 start--> <dependency>...org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc</artifactId> <versi...
  • 2.然后点击cas-overlay-template看到如下界,我选择的是5.3版本,因为5.3之后不是采用的maven管理,推荐直接下载压缩包格式,速度更快。 3.下载完成后解压,使用idea打开,目录如图所有,红色方框的内容为我后期...
  • 在使用华丹CHARISMA智能WEB报表快速开发平台开发项目过程中,遇到 一个问题,需要进行SSO单点登录,公司决定使用cas5.3进行构建,下面介绍一下CAS5.3是怎么搭建的 一、 下载CAS5.3 CAS5.3 Server我们下载cas-overlay...
  • CAS5.3单点登录(一)服务器搭建

    万次阅读 热门讨论 2018-06-27 10:23:43
    cas5.3服务搭建单点登录系统真是一步一坑,资料也比较少,在此记录一下,希望后来者可以轻松一点(一)安装包和环境依赖cas server依赖jdk,
  • 可以在 application.properties 配置 # 去除https 验证 cas.tgc.secure=false
  • 1.CAS 5.3版本介绍 CAS 5.3使用Maven构建; CAS 5.3基于springboot 1.5.18.RELEASE版本构建; CAS 5.3使用log4j日志工具包,而非springboot 2.x默认的logback; 说明: 以cas-server-support-jdbc为例,pom.xml中...
  • 1.cas 5.3版本windows服务端连接数据库报下图错误![图片说明](https://img-ask.csdn.net/upload/201912/10/1575977576_276672.png) 2我写的java代码如下,可以看见我传的入参 ![图片说明]...
  • 最近公司要做一个单点登录的东西,这里记录一下步骤方便记忆 ...cas 5.3 其实5.x都行 java 8 最少8以上 如果是cas6.x官网要求jdk11,但是6.x还不完善,最好不要轻易尝试,出问题也没有博客可以解决 ...
  • cas5.3 使用http方式请求1. 项目拉取2. 新建 src/main/resources 目录3. 在application.properties中添加:4. 修改services目录下的HTTPSandIMAPS-10000001.json 如果我们的客户端要使用IP来访问服务端,怎么办? ...
  • 首先配置pom.xml文件 org.apereo.cas cas-server-webapp${app.server} ${cas.version} war runtime org.apereo.cas cas-server-core ${cas.version} org.apereo.cas cas-server-core-util ${cas.version} org.apereo...
  • OAuth2.0+Cas5.3

    2019-10-17 10:54:12
    OAuth2.0+Cas5.3 OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 2.0(即完全废止了OAuth1.0)。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,...
  • CAS有几种方式对接业务系统可实现单点登录,自定义JDBC直接查询是一种方式,但是领导说尽量避免CASE直接去访问数据库,那我通过REST认证的方式也实现了单点登录功能,但是现在有个问题,如果登录时加入验证码,通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,126
精华内容 2,050
关键字:

cas5.3