CAS在windows AD下实现企业微信自动扫码登陆的总结

本文详细介绍了如何在Windows AD环境中利用CAS实现企业微信扫码自动登录的功能。涉及CAS、SSO概念、CAS相关知识、LDAP与Windows AD的基础、实现步骤、使用模板和工具等,包括CAS服务器和客户端的配置、企业微信API的运用、自定义认证流程等。
摘要由CSDN通过智能技术生成

基础名词

  • CAS(Central Authentication Service),可以看作中心授权服务器
  • SSO(Single Sign On),单点登录

SSO相关知识

  • 同域SSO(blog.212490197.xyz和www.212490197.xyz)
  • 同域SSO(blog.212490197.xyz和www.212490197.xyz)
  • SSO单点登录主要用于一套ID,密码登陆一套或多套系统。就像登陆支付宝之后,在登陆淘宝可以自动登陆,不需要再进行账号密码的输入。
  • 下边的图显示了SSO登陆流程与注销流程
  • 用户与SSO认证中心建立的会话叫做全局会话。
  • 用户与各个子系统建立的会话叫做局部会话。创建局部会话之后,用户与子系统之间交流受保护数据将不再需要使用认证中心认证。
  • 局部会话与全局会话之间的关系
    • 局部会话存在,全局会话存在(因为局部会话依赖于全局会话的认证)
    • 全局会话存在,局部会话不一定存在(如果用户只是登陆了,但是没有使用任何一个子系统,则不存在局部会话)
    • 全局会话销毁,局部会话必须销毁(总认证失效,局部认证不能存在)
  • 在一个子系统中进行了注销,相当于在认证中心注销,会同时让所有的子系统进行注销。所以其他子系统在之后进行数据请求的时候发现已经注销,将不会再传输数据,直接跳到登陆界面。所有子系统都使用同一个令牌。

CAS相关知识

  • CAS结构主要分为CAS Server和CAS Client
  • CAS可以看作是一个票据协议。
  • TGC(Ticket-Granting cookie) 授权的票据证明。由CAS Server通过SSL发送给终端用户。当作Key值
  • TGT(Ticket-Granting Ticket)  用户的登陆票据(CAS签发),存储在TGCcookie中的代表用户的SSO会话。可用来判断用户是否在CAS登陆过。
  • ST(Service Ticket)                  访问某一服务的票据,作为参数以GET方式放到URL中
  • PGT(Proxy Granting Ticket)   代理凭据,
  • PGTIOU(Proxy Granting Ticket I Owe You)  附加票据
  • PT(Proxy Ticket)                                            用于C/S结构,没有cookie的情况下。
  • ST是TGT签发的
  • PGT是ST签发的
  • PT是PGT签发的
  • KDC(Key Distribution Center) 密钥发放中心
  • Authentication Service(AS)     认证服务,索取Crendential,发放TGT
  • Ticket-Granting Service(TGS)  票据授权服务,索取TGT,发放ST
  • 具体名词的实现过程可以参考该链接
  • 图片引用出处,可以在这里查看一下具体的流程解释。

LDAP与Windows AD常识

LDAPwindows AD

具体过程

  1. 进入CAS客户端,判断用户是否登陆。
  2. 登陆的话直接显示客户端相关内容,没有登陆则进行CAS客户端跳转到CAS服务端
  3. CAS服务端已经编写好相关登陆界面,同时拥有企业微信二维码。
  4. 企业微信扫码,获取权限。经过OAuth2授权后获得用户信息,可以读取到用户唯一ID
  5. 根据用户唯一ID,自动登陆后台,获取TGC。
  6. 获取相应的TGT,通过TGT获取ST,将ST返回CAS客户端。
  7. CAS客户端拿ST去CAS服务端判断是否正确。正确则进行登陆

使用模板

CAS-Overlay-template6.2

CAS-sample-java-webapp

企业微信相关API

使用工具

JDK11

  • JDK配置PATH的时候,环境变量要放到最开始,以免被Oracle的默认JDK顶掉

Tomcat9

  • HTTPS的配置
  • 运行加入了JDBC的cas.war出现了ACTION: AUTHENTICATION_FAILED
    1. 参考这个博客。mysql需要开启远程登录。
    2. 可能JDBC连接出了问题,我这里是因为war包运行出问题,注释了jdbc的依赖包的代码。也有可能是JDBC的jar包没有下载好,按照这个方式下载好mysql的JDBC的jar包即可。

MySQL5.7

Gradle

  • windows和linux可以用同一个下载包
  •  下载好之后,环境变量中
    • GRADLE_HOME放gradle的根目录
    • GRADLE_USER_HOME放gradle的根目录的.gradle。这样就不会将东西下载到C盘了
  • 代理配置
    • 修改项目的gradle.properties文件(参考博客)

方法一

org.gradle.jvmargs=-Xmx1536m -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080

方法二

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080

Maven

  • maven在idea的配置
  • 下载好之后,环境变量中
    • M2_HOME放maven的根目录
    • 根目录的conf/settings.xml修改默认仓库路径如下
<localRepository>D:\\software\\Maven\\repository</localRepository>
  • 代理配置
    • 在settings.xml进行如下配置(参考该博客)
      1. proxies中可以配置多个proxy,但是默认第一个proxy生效。
      2. active中的TRUE表示该代理目前生效状态
      3. http协议、主机地址、端口不在赘述。
      4. 用户名密码按需配置即可。
      5. nonProxyHost表示不需要代理访问的地址。中间的竖线分隔多个地址,此处可以使用星号作为通配符号。
<proxies>
    <proxy>
        <id>ss</id>
        <active>true</active>
        <protocol>http</protocol>
        <!-- <protocol>socks</protocol> -->
        <!-- <username>代理账号</username> -->
        <!-- <password>代理密码</password> -->
        <host>127.0.0.1</host>
        <port>1087</port>
        <!-- <nonProxyHosts>local.net|some.host.com</nonProxyHosts> -->
    </proxy>
</proxies>

虚拟机相关设置

 

我在笔记本上装了虚拟机来部署linux服务器。版本使用的是CentOS-7-x86_64-Minimal-2003.iso,由于网易的其他单独的版本都被删掉了,readme上写着得去官网下载。所以我就直接下载了这个。参考地址是这里

虚拟机里边的linux装好之后,进行xshell的连接,这里主要参考了这篇文章。我在配置CAS的时候,测试了CAS5.x和CAS6.x的版本,用了两个不同的虚拟机,我原来想使用同样的IP来进行访问。但是发现当两个机器都被挂起的时候,好像这样就不能用了,所以一台的子网IP配置了192.168.241.3,另一台配置了192.168.241.4.(只要最后的数字不同即可)

# ip配置
子网IP 192.168.241.3 # 或者改成192.168.241.4
子网掩码 255.255.255.0
网关IP 192.168.241.2

可以使用xshell之后,虚拟机就没什么用了。开启之后放在那里就行。接下来进行CentOS下载源的配置,这里使用阿里的下载源。配置方法参考这里。因为安装的minimal中没有wget这个包,所以我直接将链接内容下载下来,用notepad++打开后,粘贴到xshell中的。保存后,进行yum makecache即可进行其他软件的下载。我就是因为子网IP配置成同样的了,这里老是yum makecache不成功。所以记得不同机器IP配置为不同即可

IP相同,有一个最大的问题就是ping www.baidu.com会提示找不到。

另外,会有情况是虚拟机设置好了静态IP,xshell仍旧无法连接,可以参考这个文章。勾选其中的一个东西就可以了。

设置好之后,用yum来安装一些软件

yum install -y wget lrzsz net-tools # 使用-y会自动选择安装的包,可以参考这里 https://blog.csdn.net/aiynmimi/article/details/76819961

运行的时候需要开启一些端口,这里可以参考这篇文章

这里列出一些会用到的命令

firewall-cmd --zone=public --add-port=80/tcp --permanent # 开端口命令
firewall-cmd --zone=public --remove-port=80/tcp --permanent # 关端口命令
systemctl restart firewalld.service # 重启防火墙
firewall-cmd --list-ports # 查看开启的所有端口

主要流程

  • 1 下载CAS-Overlay-template。因为CAS6.x已经使用Gradle来进行构建了,所以下边的操作需要Gradle的支持
  • 2 下载好之后,可以在项目的根目录打开build.gradle文件进行配置(Gradle的配置文件,下载源,相关依赖包都在这里配置)。
    • 如果不熟悉Gradle脚本可以先在这里进行相关的了解学习。
    • 以下进行注释的地方都是修改过的地方。其他地方均使用原脚本内容。
buildscript {
    repositories {
        // 从本地maven仓库进行依赖的查找
        mavenLocal()
        gradlePluginPortal()
        // 配置阿里源的仓库,这样对于依赖的下载会更加快
        maven {
            url 'http://maven.aliyun.com/nexus/content/groups/public/'
        }
        maven {
            url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
        }
        mavenCentral()
        jcenter()
        maven { 
            url "https://repo.spring.io/libs-milestone" 
            mavenContent { releasesOnly() }
        }
        maven { 
            url "https://repo.spring.io/libs-snapshot" 
            mavenContent { snapshotsOnly() }
        }
        maven { 
            url "https://plugins.gradle.org/m2/" 
            mavenContent { releasesOnly() }
        }
    }
    dependencies {
        classpath "de.undercouch:gradle-download-task:${project.gradleDownloadTaskVersion}"
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${project.springBootVersion}"
        classpath "gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:${project.jibVersion}"
        classpath "io.freefair.gradle:maven-plugin:${project.gradleMavenPluginVersion}"
        classpath "io.freefair.gradle:lombok-plugin:${project.gradleLombokPluginVersion}"
    }
}

// 为所有的项目添加阿里源
allprojects {
    repositories {
        maven {
            url 'http://maven.aliyun.com/nexus/content/groups/public/'
        }
        maven {
            url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
        }
    }
}

// 添加相关依赖项
dependencies {
    // Other CAS dependencies/modules may be listed here...
    //Service配置
    implementation "org.apereo.cas:cas-server-support-json-service-registry:${casServerVersion}"
    // 使CAS服务端支持LDAP模式的查询。后边需要在application.properties中进行相关配置
    implementation "org.apereo.cas:cas-server-support-ldap:${project.'cas.version'}"
    // 用于获取TGT和ST。引入之后就可以通过v1/tickets获取这两个参数了,不需要其他配置。
    compile "org.apereo.cas:cas-server-support-rest:${project.'cas.version'}"
    // 自定义认证需要引入的两个依赖包
    implementation "org.apereo.cas:cas-server-core-authentication-api:${project.'cas.version'}"
    implementation "org.apereo.cas:cas-server-core-configuration-api:${project.'cas.version'}"
    // 阿里的JSON处理依赖包。用于返回给前台JSON数据时进行数据组装
    compile group: 'com.alibaba', name: 'fastjson', version: '1.2.47'
    // HTTPClient相关依赖包,用来进行后边HTTPS相关请求的处理
    compile group: 'org.apache.commons'
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值