大家好,欢迎来到IT知识分享网。
如有疑问,请看视频:CAS单点登录(第7版)_在线视频教程-CSDN程序员研修院

1. SSO & SLO
1.1. 安装IDEA
https://www.jetbrains.com.cn/idea/download/?section=windows
1.2. 安装Maven
https://maven.apache.org/download.cgi
MAVEN_HOME=D:\apache-maven-3.9.9
%MAVEN_HOME%\bin
mvn -v
1.3. 安装VS Code
https://code.visualstudio.com/
1.4. Java Apereo CAS 客户端
https://github.com/apereo/java-cas-client
1.4.1. 简介
这是Java Apereo CAS客户端的官方主页。该客户端由一组Servlet过滤器组成,适用于大多数基于Java的Web应用程序。它还作为一个API平台,以编程方式与CAS服务器交互,以发出身份验证请求、验证票证和使用主体属性。
所有客户端工件都发布到Maven Central。根据功能,应用程序需要在其配置中包含一个或多个列出的依赖项。
1.4.2. 建立
git clone :apereo/java-cas-client.git
cd java-cas-client
mvn clean package
1.4.3. 组件
核心功能,包括CAS身份验证/验证过滤器。
org.apereo.cas.client
cas-client-core
${java.cas.client.version}
此依赖项提供对SAML功能的支持:
org.apereo.cas.client
cas-client-support-saml
${java.cas.client.version}
此依赖项提供了使用Ehcache的分布式代理票证缓存:
org.apereo.cas.client
cas-client-support-distributed-ehcache
${java.cas.client.version}
此依赖项提供了使用Memcached的分布式代理票证缓存:
org.apereo.cas.client
cas-client-support-distributed-memcached
${java.cas.client.version}
Spring Boot AutoConfiguration由此依赖项提供:
org.apereo.cas.client
cas-client-support-springboot
${java.cas.client.version}
1.4.4. 配置
1.4.4.1. 策略
客户端为部署者提供多种策略以提供客户端设置。支持以下策略:
JNDI(JNDI)
属性文件(PROPERTY_FILE)。配置通过外部属性文件提供。路径可以在Web上下文中指定,如下所示:
如果未指定位置,则默认使用
/etc/java-cas-client.properties。
系统属性(SYSTEM_PROPERTIES)
Web上下文(WEB_XML)
默认值(DEFAULT)
为了指示客户端选择策略,必须在Web应用程序的上下文中指定策略名称:
如果没有定义configurationStrategy,则使用DEFAULT,它是WEB_XML和JNDI的组合。
1.4.4.2. 使用web.xml进行客户端配置
可以通过一系列context-params和filterinit-params在web.xml中配置客户端。客户端的每个过滤器都有一组必需的(也是可选的)属性。过滤器旨在通过以下方式查找这些属性:
检查过滤器的本地init-param是否有与所需属性名称匹配的参数。
检查context-param是否有与所需属性名称匹配的参数。
如果在init-params和context-params中找到两个名称相同的属性,则init-param优先。
注意:如果您使用serverName属性,您应该注意并非所有浏览器都将片段URI(#之后的内容)发送到服务器,因此CAS客户端无法将其捕获为URL的一部分。
此处提供了受客户端保护的示例应用程序。
org.apereo.cas.client.authentication.AuthenticationFilter
AuthenticationFilter用于检测用户是否需要进行身份验证。如果用户需要进行身份验证,它会将用户重定向到CAS服务器。
CAS Authentication Filter
org.apereo.cas.client.authentication.AuthenticationFilter
CAS Authentication Filter
/*
物业
描述
必填
casServerUrlPrefix
CAS服务器URL的开始,即
https://localhost:8443/cas
是(除非设置了casServerLoginUrl)
casServerLoginUrl
定义CAS服务器登录URL的位置,即
https://localhost:8443/cas/login。如果设置了,这会覆盖casServerUrlPrefix。
是(除非设置了casServerUrlPrefix)
serverName
托管此应用程序的服务器的名称。服务URL将使用它动态构建,即https://localhost:8443(您必须包含协议,但如果端口是标准端口,则端口是可选的)。
是的
service
发送到CAS服务器的服务URL,即
https://localhost:8443/yourwebapp/index.html
不
renew
指定是否应将renew=true发送到CAS服务器。有效值为true/false(或根本没有值)。请注意,renew不能指定为本地init-param设置。
不
gateway
指定是否应将gateway=true发送到CAS服务器。有效值为true/false(或根本没有值)
不
artifactParameterName
指定在何处找到工件的请求参数的名称(即ticket)。
不
serviceParameterName
指定在哪里找到服务的请求参数的名称(即service)
不
encodeServiceUrl
客户端是否应该自动编码服务url。默认为true
不
ignorePattern
定义在拦截身份验证请求时要忽略的url模式。
不
ignoreUrlPatternType
定义指定模式的类型。默认为REGEX。其他类型是CONTAINS、EXACT、FULL_REGEX。也可以接受实现UrlPatternMatcherStrategy的完全限定类名。
不
gatewayStorageClass
用于记录网关请求的储存类别
不
authenticationRedirectStrategyClass
组件的类名,以决定如何处理对CAS的Authn重定向
不
method
CAS服务器用于将用户发送回应用程序的方法。默认为null
不
1.4.4.3. 忽略模式
支持以下类型:
类型
描述
REGEX
使用Matcher#find()匹配ignorePattern的URL。它匹配与正则表达式匹配的子字符串中的下一个匹配项。
CONTAINS
使用String#contains()操作来确定url是否包含指定的模式。行为区分大小写。
EXACT
使用String#equals()操作来确定url是否完全等于指定的模式。行为区分大小写。
FULL_REGEX
使用Matcher#matches()匹配的URL。它将表达式与整个字符串匹配,因为它在模式的开头隐式添加^,在模式的末尾隐式添加$,因此它不会匹配子字符串或字符串的一部分。^和$是元字符,分别表示字符串的开始和结束。
org.apereo.cas.client.authentication.Saml11AuthenticationFilter
SAML 1.1AuthenticationFilter用于检测用户是否需要进行身份验证。如果用户需要进行身份验证,它会将用户重定向到CAS服务器。
CAS Authentication Filter
org.apereo.cas.client.authentication.Saml11AuthenticationFilter
CAS Authentication Filter
/*
物业
描述
必填
casServerUrlPrefix
CAS服务器URL的开始,即
https://localhost:8443/cas
是(除非设置了casServerLoginUrl)
casServerLoginUrl
定义CAS服务器登录URL的位置,即
https://localhost:8443/cas/login。如果设置了,这会覆盖casServerUrlPrefix。
是(除非设置了casServerUrlPrefix)
serverName
托管此应用程序的服务器的名称。服务URL将使用它动态构建,即https://localhost:8443(您必须包含协议,但如果端口是标准端口,则端口是可选的)。
是的
service
发送到CAS服务器的服务URL,即
https://localhost:8443/yourwebapp/index.html
不
renew
指定是否应将renew=true发送到CAS服务器。有效值为true/false(或根本没有值)。请注意,renew不能指定为本地init-param设置。
不
gateway
指定是否应将gateway=true发送到CAS服务器。有效值为true/false(或根本没有值)
不
artifactParameterName
指定在何处查找工件的请求参数的名称(即SAMLart)。
不
serviceParameterName
指定在哪里找到服务的请求参数的名称(即TARGET)
不
encodeServiceUrl
客户端是否应该自动编码服务url。默认为true
不
method
CAS服务器用于将用户发送回应用程序的方法。默认为null
不
org.apereo.cas.client.validation.Cas10TicketValidationFilter
使用CAS 1.0协议验证票证。
CAS Validation Filter
org.apereo.cas.client.validation.Cas10TicketValidationFilter
CAS Validation Filter
/*
物业
描述
必填
casServerUrlPrefix
CAS服务器URL的开始,即
https://localhost:8443/cas
是的
serverName
托管此应用程序的服务器的名称。服务URL将使用它动态构建,即https://localhost:8443(您必须包含协议,但如果端口是标准端口,则端口是可选的)。
是的
renew
指定是否应将renew=true发送到CAS服务器。有效值为true/false(或根本没有值)。请注意,renew不能指定为本地init-param设置。
不
redirectAfterValidation
是否在票证验证后重定向到同一个URL,但参数中没有票证。默认为true。
不
useSession
是否将断言存储在会话中。如果不使用会话,则每个请求都需要票证。默认为true。
不
exceptionOnValidationFailure
是否在票证验证失败时抛出异常。默认为true。
不
sslConfigFile
对包含客户端SSL配置的SSL设置的属性文件的引用,在反向通道调用期间使用。该配置包括protocol的密钥,默认为SSL、keyStoreType、keyStorePath、keyStorePass、keyManagerType,默认为SunX509和certificatePassword。
不包括在内。
encoding
指定客户端应使用的编码字符集
不
hostnameVerifier
主机名验证者类名,在进行反向通道调用时使用
不
org.apereo.cas.client.validation.Saml11TicketValidationFilter
使用SAML 1.1协议验证票证。
CAS Validation Filter
org.apereo.cas.client.validation.Saml11TicketValidationFilter
CAS Validation Filter
/*
物业
描述
必填
casServerUrlPrefix
CAS服务器URL的开始,即
https://localhost:8443/cas
是的
serverName
托管此应用程序的服务器的名称。服务URL将使用它动态构建,即https://localhost:8443(您必须包含协议,但如果端口是标准端口,则端口是可选的)。
是的
renew
指定是否应将renew=true发送到CAS服务器。有效值为true/false(或根本没有值)。请注意,renew不能指定为本地init-param设置。
不
redirectAfterValidation
是否在票证验证后重定向到同一个URL,但参数中没有票证。默认为true。
不
useSession
是否将断言存储在会话中。如果不使用会话,则每个请求都需要票证。默认为true。
不
exceptionOnValidationFailure
是否在票证验证失败时抛出异常。默认为true
不
tolerance
验证SAML票证时对漂移时钟的容忍度。请注意,对于大多数具有NTP时间同步的环境,10秒应该足够了。默认为1000 msec
不
sslConfigFile
对包含客户端SSL配置的SSL设置的属性文件的引用,在反向通道调用期间使用。该配置包括protocol的密钥,默认为SSL、keyStoreType、keyStorePath、keyStorePass、keyManagerType,默认为SunX509和certificatePassword。
不包括在内。
encoding
指定客户端应使用的编码字符集
不
hostnameVerifier
主机名验证者类名,在进行反向通道调用时使用
不
org.apereo.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
使用CAS 2.0协议验证票证。如果您提供acceptAnyProxy或allowedProxyChains参数,将构造一个Cas20ProxyTicketValidator。否则将构造一个不接受代理票证的通用
Cas20ServiceTicketValidator。
注意:如果您使用的是代理验证,您应该将验证过滤器的filter-mapping放在身份验证过滤器之前。
CAS Validation Filter
org.apereo.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
CAS Validation Filter
/*
物业
描述
必填
casServerUrlPrefix
CAS服务器URL的开始,即
https://localhost:8443/cas
是的
serverName
托管此应用程序的服务器的名称。服务URL将使用它动态构建,即https://localhost:8443(您必须包含协议,但如果端口是标准端口,则端口是可选的)。
是的
renew
指定是否应将renew=true发送到CAS服务器。有效值为true/false(或根本没有值)。请注意,renew不能指定为本地init-param设置。
不
redirectAfterValidation
是否在票证验证后重定向到同一个URL,但参数中没有票证。默认为true。
不
useSession
是否将断言存储在会话中。如果不使用会话,则每个请求都需要票证。默认为true。
不
exceptionOnValidationFailure
是否在票证验证失败时抛出异常。默认为true
不
proxyReceptorUrl
要监视来自CAS服务器的PGTIOU/PGT响应的URL。应从上下文的根目录定义。例如,如果您的应用程序部署在/cas-client-app中,并且您希望代理受体URL为
/cas-client-app/my/receptor,则需要将proxyReceptorUrl配置为/my/receptor。
不
acceptAnyProxy
指定是否有任何代理正常。默认为false。
不
allowedProxyChains
指定代理链。每个可接受的代理链都应该包含一个以空格分隔的URL列表(用于精确匹配)或URL的正则表达式(以^字符开头)。每个可接受的代理链都应该出现在自己的行上。
不
proxyCallbackUrl
为CAS服务器提供接受代理授予票证的回调URL。
不
proxyGrantingTicketStorageClass
指定具有无参数构造函数的
ProxyGrantingTicketStorage类的实现。
不
sslConfigFile
对包含客户端SSL配置的SSL设置的属性文件的引用,在反向通道调用期间使用。该配置包括protocol的密钥,默认为SSL、keyStoreType、keyStorePath、keyStorePass、keyManagerType,默认为SunX509和certificatePassword。
不包括在内。
encoding
指定客户端应使用的编码字符集
不
secretKey
proxyGrantingTicketStorageClass,如果它支持加密。
不
cipherAlgorithm
proxyGrantingTicketStorageClass,如果它支持加密。默认为DESede
不
millisBetweenCleanUps
清理任务的启动延迟以从存储中删除过期的票证。默认为60000 msec
不
ticketValidatorClass
要使用/创建的工单验证器类
不
hostnameVerifier
主机名验证者类名,在进行反向通道调用时使用
不
privateKeyPath
解密PGTs的私钥路径直接作为属性加密发送
不
privateKeyAlgorithm
私钥的算法。默认为RSA
不
org.apereo.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter
使用CAS 3.0协议验证票证。如果您提供acceptAnyProxy或allowedProxyChains参数,将构造一个Cas30ProxyTicketValidator。否则将构造一个不接受代理票证的通用
Cas30ServiceTicketValidator。支持所有可用于
Cas20ProxyReceivingTicketValidationFilter的配置。
org.apereo.cas.client.validation.Cas30JsonProxyReceivingTicketValidationFilter
与
Cas30ProxyReceivingTicketValidationFilter相同,但过滤器能够接受来自CAS的验证响应,这些响应根据CAS协议规定的指南格式化为JSON。有关详细信息,请参阅协议留档。
org.apereo.cas.client.validation.CasJWTTicketValidationFilter
验证由CAS服务器作为JWT发布的服务票证。
支持的JWT有:
JWT必须按该顺序签名和加密,否则…
JWT必须按该顺序加密和签名,否则…
JWT必须加密。
CAS Validation Filter
org.apereo.cas.client.validation.CasJWTTicketValidationFilter
CAS Validation Filter
/*
物业
描述
必填
signingKey
签名密钥。仅支持AES密钥。
是的
encryptionKey
加密密钥。仅支持AES密钥。
是的
expectedIssuer
iss声明值,用于匹配JWT中的内容。
是的
expectedAudience
aud声明值,用于匹配JWT中的内容。
是的
encryptionKeyAlgorithm
默认值为AES。
不
encryptionKeyAlgorithm
默认值为AES。
不
requiredClaims
默认值为sub,aud,iat,jti,exp,iss。
不
base64EncryptionKey
如果加密密钥应首先进行base64解码。默认为true。
不
base64SigningKey
如果加密密钥应首先进行base64解码。默认为false。
不
maxClockSkew
验证到期日期时可接受的最大时钟偏差。默认值为60秒。
不
1.4.4.4. 代理身份验证与分布式缓存
客户端支持在负载均衡器后面的应用程序节点之间集群和分配TGT状态。为此,需要为过滤器定义参数。
Ehcache
配置客户端:
该设置为使用EhCache的代理存储提供了一个实现,以利用其复制功能,从而在节点之间成功复制和共享PGT,而不管选择哪个节点作为负载均衡器重新路由的结果。
仅配置此参数是不够的。EhCache配置需要通过其建议的方式之一启用复制机制。可以在此处找到基于RMI复制的配置示例。请注意,虽然示例是为分布式票证注册表实现完成的,但基本思想和配置应该很容易转移。
从web.xml加载时,Apereo CAS Client依赖于一系列默认值,其中之一是缓存必须配置在默认位置(即classpath:ehcache.xml)。
<cacheManagerPeerProviderFactory class=”net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory”
properties=”peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446″/>
<cache
name=”org.apereo.cas.client.EhcacheBackedProxyGrantingTicketStorageImpl.cache”
maxElementsInMemory=”100″
eternal=”false”
timeToIdleSeconds=”100″
timeToLiveSeconds=”100″
overflowToDisk=”false”>
Memcached
基于Memcached的类似实现也可用。
配置客户端:
从web.xml加载时,客户端依赖于一系列默认值,其中之一是memcached服务器列表必须在
/cas/casclient_memcached_hosts.txt的类路径上定义)。该文件是单独行上的
:
org.apereo.cas.client.HttpServletRequestWrapperFilter
包装一个HttpServletRequest,以便getRemoteUser和getPrincipal返回CAS相关条目。
CAS HttpServletRequest Wrapper Filter
org.apereo.cas.client.HttpServletRequestWrapperFilter
CAS HttpServletRequest Wrapper Filter
/*
物业
描述
必填
roleAttribute
用于确定主要角色。
不
ignoreCase
角色检查是否应忽略大小写。默认为false
不
org.apereo.cas.client.AssertionThreadLocalFilter
将Assertion放在ThreadLocal中,用于需要访问它的应用程序部分。当此过滤器“正面”的Web应用程序需要获取主体名称,但它无法访问HttpServletRequest时,这很有用,因此无法调用getRemoteUser()。
CAS Assertion Thread Local Filter
org.apereo.cas.client.AssertionThreadLocalFilter
CAS Assertion Thread Local Filter
/*
org.apereo.cas.client.ErrorRedirectFilter
基于异常重定向到提供的url的过滤器。异常和url通过init过滤器名称/参数值配置。
物业
描述
必填
defaultErrorRedirectPage
要重定向到的默认url,以防未找到错误匹配项。
是的
java.lang.Exception
完全限定的异常名称。它的值必须是重定向url
不
CAS Error Redirect Filter
org.apereo.cas.client.ErrorRedirectFilter
CAS Error Redirect Filter
/*
1.4.4.5. 使用Spring进行客户端配置
通过Spring IoC的配置将严重依赖于DelegatingFilterProxy类。对于将通过Spring为CAS配置的每个过滤器,web. xml中需要相应的DelegatingFilterProxy。
由于
HttpServletRequestWrapperFilter和
AssertionThreadLocalFilter没有配置选项,我们建议您只在web.xml中配置它们
CAS Authentication Filter
org.springframework.web.filter.DelegatingFilterProxy
CAS Authentication Filter
/*
1.4.4.6. Bean配置
AuthenticationFilter
<bean
name=”authenticationFilter”
class=”org.apereo.cas.client.authentication.AuthenticationFilter”
p:casServerLoginUrl=”https://localhost:8443/cas/login”
p:renew=”false”
p:gateway=”false”
p:service=”https://my.local.service.com/cas-client” />
Cas10TicketValidationFilter
<bean
name=”ticketValidationFilter”
class=”org.apereo.cas.client.validation.Cas10TicketValidationFilter”
p:service=”https://my.local.service.com/cas-client”>
Saml11TicketValidationFilter
<bean
name=”ticketValidationFilter”
class=”org.apereo.cas.client.validation.Saml11TicketValidationFilter”
p:service=”https://my.local.service.com/cas-client”>
Cas20ProxyReceivingTicketValidationFilter
验证工单的配置:
<bean
name=”ticketValidationFilter”
class=”org.apereo.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter”
p:service=”https://my.local.service.com/cas-client”>
接受代理授予票证的配置:
<bean
name=”ticketValidationFilter”
class=”org.apereo.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter”
p:service=”https://my.local.service.com/cas-client”
p:proxyReceptorUrl=”/proxy/receptor”>
<bean
class=”org.apereo.cas.client.validation.Cas20ServiceTicketValidator”
p:proxyCallbackUrl=”/proxy/receptor”>
接受任何代理票证(和代理授予票证)的配置:
<bean
name=”ticketValidationFilter”
class=”org.apereo.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter”
p:service=”https://my.local.service.com/cas-client”
p:proxyReceptorUrl=”/proxy/receptor”>
<bean class=”org.apereo.cas.client.validation.Cas20ProxyTicketValidator”
p:acceptAnyProxy=”true”
p:proxyCallbackUrl=”/proxy/receptor”>
接受来自链的代理票证(和代理授予票证)的配置:
<bean
name=”ticketValidationFilter”
class=”org.apereo.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter”
p:service=”https://my.local.service.com/cas-client”
p:proxyReceptorUrl=”/proxy/receptor”>
<bean class=”org.apereo.cas.client.validation.Cas20ProxyTicketValidator”
p:proxyCallbackUrl=”/proxy/receptor”>
http://proxy1 http://proxy2
可以通过以下方式配置特定的过滤器。有关特定的必需和可选属性,请参阅发行版中包含的JavaDocs:
1.4.5. Spring Boot自动配置
1.4.5.1. 用法
定义依赖项:
Maven:
org.apereo.cas.client
cas-client-support-springboot
${java.cas.client.version}
Gradle:
dependencies {
…
implementation ‘org.apereo.cas.client:cas-client-support-springboot:${java.cas.client.version}’
…
}
在Spring Boot的application.properties或application.yml中添加以下必需属性:
cas.server-url-prefix=https://cashost.com/cas
cas.server-login-url=https://cashost.com/cas/login
cas.client-host-url=https://casclient.com
使用@EnableCasClient注释Spring Boot应用程序(或任何@Configuration类)
@SpringBootApplication
@Controller
@EnableCasClient
public class MyApplication { .. }
对于CAS3协议(身份验证和验证过滤器)-如果未指定任何内容,则默认为
cas.validation-type=CAS3
对于CAS2协议(身份验证和验证过滤器)
cas.validation-type=CAS
对于SAML协议(身份验证和验证过滤器)
cas.validation-type=SAML
1.4.5.2. 可用的可选属性
cas.single-logout.enabled
cas.authentication-url-patterns
cas.validation-url-patterns
cas.request-wrapper-url-patterns
cas.assertion-thread-local-url-patterns
cas.gateway
cas.use-session
cas.attribute-authorities
cas.redirect-after-validation
cas.allowed-proxy-chains
cas.proxy-callback-url
cas.proxy-receptor-url
cas.accept-any-proxy
server.context-parameters.renew
1.4.5.3. Spring安全集成
通过Spring Security处理安全问题的应用程序可以利用此模块自动使用角色和权限填充Spring Security身份验证上下文,这些角色和权限是从CAS断言中获取的属性。
为此,必须在配置中指定CAS断言中应转换为Spring安全权限的属性名称(即membership):
cas.attribute-authorities=membership
然后,应用程序可以通过以下方式强制执行基于角色的安全性:
@SpringBootApplication
@EnableCasClient
public class MyConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(“/”).permitAll()
.antMatchers(“/protected-endpoint”).hasAuthority(“ADMIN”)
.anyRequest().authenticated();
}
}
可以使用以下bean定义自定义CAS属性与Spring Security权限和/或角色之间的转换:
@Bean
public AuthenticationUserDetailsService
springSecurityCasUserDetailsService() {
return null;
}
1.4.5.4. 高级配置
此模块不会通过标准Spring属性源公开所有CAS客户端配置选项,而只公开最常用的选项。但是,如果需要设置任意数量的未公开的“异国情调”属性,您可以在@EnableCasClient注释类中实现CasClientConfigurer类,并覆盖有问题的CAS客户端过滤器的适当配置方法。例如:
@SpringBootApplication
@EnableCasClientclass CasProtectedApplication implements CasClientConfigurer {
@Override
void configureValidationFilter(FilterRegistrationBean validationFilter) {
validationFilter.getInitParameters().put(“millisBetweenCleanUps”, “”);
}
@Override
void configureAuthenticationFilter(FilterRegistrationBean authenticationFilter) {
authenticationFilter.getInitParameters().put(“artifactParameterName”, “casTicket”);
authenticationFilter.getInitParameters().put(“serviceParameterName”, “targetService”);
}
}
1.4.5.5. 配置单点注销
CAS中的单点注销支持包括配置一个SingleSignOutFilter和一个ContextListener。请注意,如果您已将CAS客户端配置为JavaWeb过滤器,则此过滤器必须位于所述其他过滤器之前。
SingleSignOutFilter会影响字符编码。这在与艾特莱森Confluence等应用程序结合使用时变得最明显。建议您使用显式编码显式配置VT字符编码过滤器或Spring字符编码过滤器。
配置
物业
描述
必填
artifactParameterName
票证工件参数名称。默认为ticket
不
logoutParameterName
默认为logoutRequest
不
relayStateParameterName
默认为RelayState
不
eagerlyCreateSessions
默认为true
不
artifactParameterOverPost
默认为false
不
logoutCallbackPath
预期接收来自CAS服务器的注销回调请求的路径。如果您的应用在处理表单发布时需要访问原始输入流,这是必要的。如果未配置,默认行为将检查每个表单发布的注销参数。
不
1.4.5.5.1. CAS协议
CAS Single Sign Out Filter
org.apereo.cas.client.session.SingleSignOutFilter
…
CAS Single Sign Out Filter
/*
…
1.4.5.5.2. SAML协议
CAS Single Sign Out Filter
org.apereo.cas.client.session.SingleSignOutFilter
…
CAS Single Sign Out Filter
/*
…
1.4.5.5.3. 推荐注销程序
客户端没有代码来帮助您处理注销。客户端只是将对象放置在会话中。因此,我们建议您在用户注销时执行session.invalidate()调用。但是,这完全是您的应用程序的责任。我们建议在应用程序会话结束时出现类似于以下的文本。
You have been logged out of [APPLICATION NAME GOES HERE].
To log out of all applications, click here. (provide link to CAS server’s logout)
1.4.6. JAAS
客户端支持Java身份验证和授权服务(JAAS)框架,该框架为支持CAS的JEE应用程序提供授权工具。
可以使用通用JAAS身份验证模块CasLoginModule,其特定目的是为支持CAS的JEE应用程序提供身份验证和授权服务。该模块的设计很简单:分别在NameCallback和PasswordCallback中给定服务URL和服务票证,该模块联系CAS服务器并尝试验证票证。为了与Java应用程序的CAS集成保持一致,需要一个特定于JEE容器的servlet过滤器来保护JWeb EE应用程序。JAAS支持应该可以扩展到任何JEE容器。
1.4.6.1. 配置CasLoginModule
预计对于JEE应用程序,CAS集成需要身份验证和授权服务。以下JAAS模块配置文件摘录演示了如何在CAS中利用SAML 1.1属性发布来提供身份验证之外的授权数据:
cas {
jaas.org.apereo.cas.client.CasLoginModule required
ticketValidatorClass=”org.apereo.cas.client.validation.Saml11TicketValidator”
casServerUrlPrefix=”https://cas.example.com/cas”
tolerance=”20000″
service=”https://webapp.example.com/webapp”
defaultRoles=”admin,operator”
roleAttributeNames=”memberOf,eduPersonAffiliation”
principalGroupName=”CallerPrincipal”
roleGroupName=”Roles”
cacheAssertions=”true”
cacheTimeout=”480″;
}
物业
描述
必填
ticketValidatorClass
CAS票证验证器类的完全限定类名。
是的
casServerUrlPrefix
CAS Web应用程序上下文的根的URL。
是的
service
可以被回调处理程序覆盖的CAS服务参数。注意:服务必须由至少一个组件指定,以便它在服务票证验证时可用。
不
defaultRoles
应用于所有经过身份验证的主体的静态角色的逗号分隔列表。
不
roleAttributeNames
以逗号分隔的属性名称列表,这些属性名称描述了应应用于当前经过身份验证的主体的服务票证验证响应中传递给CAS的角色数据。
不
principalGroupName
包含当前JAAS主题的主要主体名称的组主体的名称。默认值为CallerPrincipal。
不
roleGroupName
包含所有角色数据的组主体的名称。默认值为Roles。
不
cacheAssertions
启用断言缓存的标志。这对于尝试定期重新身份验证以更新主体的JAAS提供程序可能是必需的。由于CAS票证是一次性使用的,因此必须在重新身份验证时提供缓存的断言。
不
cacheTimeout
断言缓存超时(以分钟为单位)。
不
tolerance
验证SAML票证时对漂移时钟的容差。
不
1.4.6.2. 使用Servlet 3进行编程式JAAS登录
jaas.org.apereo.cas.client.Servlet3AuthenticationFilterservlet过滤器,它使用Servlet 3.0HttpServletRequest#login()工具执行编程式JAAS登录。该组件应与支持Servlet 3.0/JEE6规范的任何servlet容器兼容。
过滤器在收到CAS票证时执行,并期望CasLoginModuleJAAS模块执行CAS票证验证,以生成AssertionPrincipal,从中获取CAS断言并将其插入会话以启用SSO。
如果为此过滤器指定了serviceinit-参数,它将取代为CasLoginModule定义的服务。
1.5. 示例 CAS Java Web 应用程序
https://github.com/apereo/cas-sample-java-webapp
这是通过 Java CAS 客户端执行 CAS 协议功能的示例 java Web 应用程序。
1.5.1. 配置
调整 web.xml 文件中 CAS 服务器和应用服务器的 url 地址。
修改
src/main/webapp/WEB-INF/web.xml文件,将mmoayyed.unicon.net
改为 casserver.houwang.edu。
1.5.2. 构建
在
/etc/cas/jetty/thekeystore 中创建一个 Java 密钥库,密码changeit。
修改etc/jetty/jetty-ssl.xml文件,将
/etc/cas/jetty/thekeystore改为 thekeystore。
在此密钥库中导入您的服务器证书。
mvn clean package jetty:run-forked
该应用程序将在以下平台上提供:
http://localhost:9080/sample
和
https://localhost:9443/sample
1.5.3. HTTP ERROR 500
运行报错:
解决办法:
注释src\main\webapp\WEB-INF\web.xml文件,以下代码:
刷新报错:
解决办法:
重新访问
https://localhost:9443/sample即可。
1.5.4. 测试高可用性
假设您已在两个节点上部署了 CAS,则可以使用示例应用程序来确保所有节点都正确共享票证状态。为此,请在 web.xml 文件中确保:
CAS Authentication Filter的 casServerLoginUrl 指向 CAS 节点 1(即
https://cas1.sso.edu:8443/cas/login)。
CAS Validation Filter的 casServerUrlPrefix 指向 CAS 节点 2(即
https://cas2.sso.edu:8443/cas)
对于上述两个筛选器,serverName 应始终指向此示例应用程序的部署位置。
部署应用程序并进行测试。你可能还想把上述配置中 CASnodes 1 和 2 的顺序颠倒过来,重新部署并再次测试。
或者,可以使用这个小型命令行实用程序测试分布式 CAS 节点,而无需设置任何客户端应用程序
1.6. 支持 CAS 的 Bootiful Web 应用程序
https://github.com/apereo/bootiful-cas-client
这是最简单的 CASyfied Spring Boot 应用程序。
它可以用作模板来构建更复杂的支持 CAS 的 Spring Boot 应用程序,或者简单地用作各种 CAS 服务器安装的快速测试器。
1.6.1. 开始
确保您(至少)安装了 Java 11(它不适用于低于 8 的 Java 版本)
克隆此存储库
更改
src/main/resources/application.yml 中指向所需 CAS 服务器和客户端主机的 3 个必需的 URL 属性。例如:
cas:
#Required properties
server-url-prefix: https://casserver.houwang.edu:8143/cas
server-login-url: https://casserver.houwang.edu:8143/cas/login
client-host-url: https://casserver.houwang.edu:8443
更改
src/main/resources/application.yml 中的 SSL 设置,使其指向您的本地密钥库和信任库。例如:
server:
port: 8443
ssl:
enabled: true
key-store: keystore
key-store-password: changeit
注意:您可能还需要在 JVM 的信任存储中生成自证书/导入 dance ,以便此 CAS 客户端/服务器 SSL 握手正常工作。
从命令行运行:./gradlew clean bootRun
在选择的 Web 浏览器中访问 https://localhost:8444 并享受 CASyfied Spring Boot 应用程序!
1.6.2. 创建 Docker 镜像
./gradlew bootBuildImage
docker push apereo/bootiful-cas-client
要运行:
docker run –rm -p 8444:8444 –name “bootiful” \
–mount type=bind,source=/etc/cas/thekeystore,target=/etc/cas/thekeystore,readonly \
apereo/bootiful-cas-client
1.7. bootiful-cas-客户端
https://github.com/apereo/springsecurity-bootiful-cas-client
示例 Spring Boot 应用程序,它公开了与 CAS 集成进行身份验证的角色所利用的 API
查看
src/main/resources/application.properties 了解相关配置
修改
src/main/resources/application.properties文件,将casserver.herokuapp.com
改为
casserver.houwang.edu:8443,将端口号8080改为8181。
mvn clean package
java -jar target/sample.war
应用程序将在 http://localhost:8181/ 下运行。
1.8. 基于JeecgBoot的CAS客户端
https://help.jeecg.com/java/cas/login.html
1.8.1. 单点登录流程图
1.8.2. 单点登录配置说明(vue3)
Jeecg Boot前端3.0.0以后只默认集成SSO所有要的代码,只需需修改环境配置文件即可开启SSO
点击查看视频教程
1.8.2.1. Jeecgboot 前端vue项目对接CAS
打开.env文件 修改“单点服务端地址”和“是否开启单点登录”
#单点服务端地址
VITE_GLOBE_APP_CAS_BASE_URL=https://casserver.houwang.edu:8443/cas
# 是否开启单点登录 默认为false 改为true即可开启单点登录
VITE_GLOB_APP_OPEN_SSO = false
VITE_GLOB_APP_OPEN_SSO = true 即代表开启SSO登录
1.8.2.2. Jeecgboot 后端boot修改yml配置
后端boot修改yml配置
cas:
# 配置CAS服务地址,cas为工程目录,部署到ROOT目录下即可
prefixUrl: https://casserver.houwang.edu:8443/cas
1.8.2.3. 单点服务端配置说明
源码下载
1.cas-db: 是一个springboot项目,只要修改数据库配置,诸如server.port、context-path如无必要可不修改
2.overlay:可以打包成war通过tomcat发布,端口和地址修改tomcat配置即可(和8443/cas保持一致),需要注意的是如果1中cas-db项目的端口、访问地址修改了,需要修改overlay配置src\main\resources\application.properties如下图
如在本地测试 上述地址 casserver.houwang.edu可修改host文件
1.8.3. CAS服务端项目说明文档
1.8.3.1. 当前版本
V1.0.0
1.8.3.2. 源码下载
JeecgBoot CAS服务端项目源码
https://github.com/jeecgboot/jeecgboot-cas-server
Jeecgboot-cas 单点登录服务端快速部署请参考本篇文档。
1.8.3.3. 版本说明
jdk 1.8
mysql 5.7
cas 5.2.3
maven 3.5.3
tomcat 8.5(官方推荐Tomcat至少要8版本以上)
1.8.3.4. 版本通道
Github: https://github.com/apereo/cas
下载链接:
https://github.com/apereo/cas/tags
开发文档:
https://apereo.github.io/cas/5.2.x/index.html
官网:
https://www.apereo.org/projects/cas
1.8.3.5. 脚本说明
jeecgboot-cas-db可单独部署数据库,用户见表数据库如下;也可与jeecg-boot项目共用数据库,其用户表sys_user表结构一致
jeecgboot_cas.sql cas用户表
1.8.3.6. 数据库配置说明
/jeecgboot-cas-db/src/main/resources/application.yml配置用户数据库地址
datasource:
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
username: root
password: root
1.8.3.7. CAS模块说明
jeecgboot-cas-server
├── jeecgboot-cas-db — jeecgboot cas REST认证中心[8448] (
http://localhost:8448/cas-db/)
├──
jeecgboot-cas-server-overlay — jeecgboot cas 单点登录服务中心[8443] (
https://casserver.houwang.edu/cas/ 本地部署域名需要配置hosts)
1.8.3.8. 证书配置
拷贝证书到
/jeecgboot-cas-server-overlay/src/main/resources/目录下,Tomcat使用.jks证书,
例如注册证书:域名casserver.houwang.edu注册证书casserver.houwang.edu.jks
/jeecgboot-cas-server-overlay/src/main/resources/application.properties配置证书
server.ssl.key-store=classpath:casserver.houwang.edu.jks
server.ssl.key-store-password=changeit
server.ssl.key-password=changeit
1.8.3.9. 不使用证书,使用HTTP协议访问配置
/jeecgboot-cas-server-overlay/src/main/resources/application.properties 进行如下配置
server.ssl.enabled=false
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
/jeecgboot-cas-server-overlay/src/main/resources/services/HTTPSandIMAPS-.json
serviceId 增加 http协议的配置
{
“@class” : “org.apereo.cas.services.RegexRegisteredService”,
“serviceId” : “^(https|http|imaps)://.*”,
“name” : “HTTPS and IMAPS”,
“id” : ,
“description” : “This service definition authorizes all application urls that support HTTPS and IMAPS protocols.”,
“evaluationOrder” : 10000
}
1.8.3.10. REST认证服务配置
/jeecgboot-cas-server-overlay/src/main/resources/application.properties中配置RESR认证请求地址
即jeecgboot-cas-db项目中的请求
# REST 认证开始, 请求远程调用接口(NONE不进行加密)
#
cas.authn.rest.uri=http://localhost:8448/cas-db/cas/user/login
cas.authn.rest.passwordEncoder.type=NONE
cas.authn.rest.passwordEncoder.characterEncoding=UTF-8
cas.authn.rest.passwordEncoder.encodingAlgorithm=MD5
11. 启动顺序
1. /jeecgboot-cas-db/src/main/java/org/jeecg/JeecgBootCasDbApplication.java
2. jeecgboot-cas-server-overlay
(1)项目打包后执行 java -jar cas.war启动;
(2)也可cas.war解压部署到tomcat中,官方推荐Tomcat至少要8版本以上
(3)本地运行,DOS进入项目目录,执行build.cmd run
启动地址:
统一认证中心:
https://casserver.houwang.edu:8443/cas/login
使用http协议:
http://casserver.houwang.edu:8443/cas/login
本地部署域名需要配置hosts
127.0.0.1 casserver.houwang.edu
1.8.4. CAS单点登录服务端准备
搭建CAS服务端,如果已经部署服务端,此步骤可以省略!!
1.8.4.1. 单点登录的介绍
1.8.4.2. CAS服务端搭建
此处不做详细搭建部署介绍,可以网络查询资料部署, 官网地址
https://github.com/apereo/cas-overlay-template
当前我对接的CAS版本是5.2X,也可以使用 5.3X
注意!注意!注意! 重要的事情说三遍!
CAS服务端必须要开启rest支持
添加如下依赖即可:
org.apereo.cas
cas-server-support-rest
${cas.version}
服务端部署完成后能正常使用系统用户进行登录登出即可
1.8.5. 解决VS Code禁止运行脚本问题
VS Code执行pnpm dev时报错:
pnpm : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.c
om/fwlink/?LinkID= 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ pnpm dev
+ ~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
解决办法:
打开Windows PowerShell
执行Set-ExecutionPolicy RemoteSigned
1.9. SSO会话
1.9.1. 概述
1.9.1.1. SSO Sessions
SSO Cookie,也称为Ticket-Granting Cookie(TGC,票证授予Cookie),是 CAS 在建立单点登录Session时设置的 HTTP Cookie。要了解有关此 cookie 的更多信息,请访问本指南。
CAS 配置目录中提供了以下设置和属性:
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Optional(可选)。This标志表示在最终用户 CAS 配置中不需要立即存在该设置,因为分配了默认值,或者该功能的激活不受设置值有条件地控制。换句话说,仅当需要修改默认值或需要打开由设置控制的功能时,才应在配置中包含此字段。
Show entries
搜索:
· cas.sso.create-sso-cookie-on-renew-authn=true
指示是否在重新续订的身份验证事件上创建 SSO 会话的标志。
org.apereo.cas.configuration.model.core.sso.SingleSignOnProperties.
如何配置此属性?
· cas.sso.proxy-authn-enabled=true
指示此服务器实现是否支持 CAS 代理身份验证/票证。
org.apereo.cas.configuration.model.core.sso.SingleSignOnProperties.
如何配置此属性?
· cas.sso.renew-authn-enabled=true
指示此服务器实现是否应全局支持标记为“renew=true”的 CAS 协议身份验证请求。
org.apereo.cas.configuration.model.core.sso.SingleSignOnProperties.
如何配置此属性?
· cas.sso.services.allow-missing-service-parameter=true
默认情况下,如果初始身份验证请求未识别目标应用程序,CAS 将显示通用成功页面。在某些情况下,无需登录特定服务即可登录 CAS 的能力可能被视为功能不当,因为在实践中,很少有用户和机构准备理解、品牌和支持充其量只是为了在不登录任何 CAS 依赖的服务的情况下建立 SSO 会话而登录 CAS 的边缘用例。
org.apereo.cas.configuration.model.core.sso.SingleSignOnServicesProperties.
如何配置此属性?
· cas.sso.services.required-service-pattern=
一种正则表达式模式,表示一个应用程序,该应用程序必须先与 CAS 建立会话,然后 CAS 才能允许访问其他应用程序。这是初始的强制性/必需应用程序,用户在访问其他任何位置之前必须开始使用该应用程序。与 CAS 建立会话的服务通常通过从 CAS 接收服务票证来实现此目的。
此设置支持正则表达式模式。[?].
org.apereo.cas.configuration.model.core.sso.SingleSignOnServicesProperties.
如何配置此属性?
显示 1 到 5 的 6 个条目
上一页12下一页
请记住,SSO 会话的创建是完全独立的,与用于建立所述会话的身份验证协议无关。无论客户端应用程序和 CAS 服务器之间的类型交换如何,都将在与 CAS 集成的所有应用程序类型之间创建、使用、维护和共享 SSO 会话,无论其类型或请求的协议如何。
……
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/172811.html