RUOYI-Cloud-3.4.0-cas

Ruoyi-Cloud集成CAS单点登录

ruoyi-cloud框架集成cas及权限管理

背景:

        单位要求借着新开发系统的机会,整合单点登录,新系统是基于ruoyi-cloud的,需在ruoyi-cloud中集成cas,于是冲浪了一段时间,发现有一些gitee和github有一些现成的,如gitee上唐雁的项目 唐雁 / ruoyi-cloud-cas,果断拉下来,但拉下来之后发现有一定问题,由于他的项目是采用ruoyi-cloud-2.5.0的项目,调通之后发现有一定问题(如:无法完成跳转,登录之后admin没有权限),主要原因有nacos版本不匹配,gateway无法从nacos拿到白名单,可能他改过权限,也有可能是2.4.0的原因(没有使用过以前的版本),admin登录无权限,于时参考唐雁老师的项目,以及博客ruoyi-cloud开源框架集成cas,集成了cas,但是博客中也有一些问题,以及描述不够详细,下文的很多方法,来自于该博客及项目。

仓库地址: https://gitee.com/yong-liu/ruoyi-cloud-cas

我的环境

nacos   2.0.4

tomcat  9.0.38

jdk    1.8.0_161

vue 3

ruoyi-cloud  3.4.0

整体逻辑及认证步骤,上文提到的博客秒速的非常详细,这里整体引用一下

整体逻辑

CAS为对通过认证的用户分配ticket,通过发放ticket对用户进行管理,而ruoyi-cloud的认证及权限的管理则是依靠ticket完成的。所有解决问的核心逻辑:

1、cas对访问ruoyi-cloud但不持有ticket的用户进行拦截,用户需在cas进行认证。

2、用户在cas完成认证后,在ruoyi-cloud后端自动为用户生产token,全过程对用户无感知。

3、完成1、2两步之后,用户即持有老系统的ticket,又持有ruoyi-cloud的token。

具体cas集成认证步骤

如下图所示

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。图1 是 CAS 最基本的协议过程:

 1、cas配置

第一步:生成秘钥库

我们采用JDK自带的keytool工具生成秘钥库

别名 java1234 存储路径 D:\cas\keystore

keytool -genkey -v -alias java1234 -keyalg RSA -keystore D:\cas\keystore\java1234.keystore

这里需要填写一些信息,注意填写要域名;

秘钥库密码我们用 666666

执行完,会生成一个秘钥库文件;

 

第二步:从秘钥库里导出证书

keytool -export -trustcacerts  -alias java1234 -file D:/cas/keystore/java1234.cer  -keystore D:/cas/keystore/java1234.keystore

输入第一步的秘钥库密码 666

 即可生成证书;

证书文件;

第三步:将证书导入到JDK证书库

keytool -import -trustcacerts -alias java1234 -file D:/cas/keystore/java1234.cer -keystore "E:/jdk1.8/jre/lib/security/cacerts"

 

密码: changeit

 

第四步:tomcat配置https支持

这里我们采用tomcat9

找到tomcat->conf->server.xml 打开文件

加下如下配置即可;

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"

               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" 

                keystoreFile="D:\cas\keystore\java1234.keystore"

                keystorePass="666666" />

启动bin下的startup.bat

(默认有中文乱码,可以我们来到tomcat目录的conf子目录中,找到一个名为 "logging.properties" 的文件,打开这个文本文件,找到如下配置项:

java.util.logging.ConsoleHandler.encoding = UTF-8

将 UTF-8 修改为 GBK,修改后的效果为:

java.util.logging.ConsoleHandler.encoding = GBK

保存后,重启tomcat!) 

 第五步:测试

访问 https://localhost:8443

把war包放tomcat下,启动tomcat会自动解压,我们把名称改成cas,方便访问;

注意点:日志修改

 

访问:https://localhost:8443/cas

cas  8443端口

配置hosts: C:\Windows\System32\drivers\etc

127.0.0.1   java1234.com

通过域名访问:

https://java1234.com:8443/cas

用户名:casuser

密码:Mellon

修改cas账号密码为admin,admin123否则后文整合ruoyi-cloud的时候,auth模块无法从,数据库拿到权限信息及角色信息。

修改写死的认证用户,cas的application.properties中

cas.authn.accept.users=admin::admin123

此外发现在application.properties中配置了如下配置,忘了干嘛的了,如果不行可以加上去试试

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

此文不论证连接数据库做sso,连接数据库查询,只需要在本文的基础上,cas配置数据库,并修改若依修改密码,添加用户的密码加密方式即可(MD5),若依不做密码验证。

此外为了支持客户端http访问到cas,修改cas目录下的\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json文件,在serviceId中加入http 

 就此cas配置完成(未配置数据库及密码加密方式)

2、后端修改

        拉取RUOYI-Cloud-3.4.0,运行nacos,项目正常启动后,继续下面的步骤

        注意,项目的jdk必须选中为上面cas配置的jdk,否则会报错(控制台auth模块报错证书验证不通过),可以在项目结构中修改 

nacos中ruoyi-gateway-dev.yml,配置白名单

  ignore:
    whites:
      - /auth/logout
      - /auth/login
      - /auth/register
      - /*/v2/api-docs
      - /csrf
      - /auth/casLogin
      - /auth/TokenLogout

核心代码

auth模块添加pom依赖

         <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-cas</artifactId>
            <version>5.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
  
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值