CAS单点登录(第7版)11.SSO & SLO

CAS单点登录(第7版)11.SSO & SLO如有疑问 请看视频 CAS 单点登录 第 7 版 在线视频教程 CSDN 程序员研修院 1 SSO amp SLO1 1 安装 IDEAhttps www jetbrains com cn idea download section w

大家好,欢迎来到IT知识分享网。

如有疑问,请看视频:CAS单点登录(第7版)_在线视频教程-CSDN程序员研修院

CAS单点登录(第7版)11.SSO & SLO

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上下文中指定,如下所示:

configFileLocation

/etc/cas/file.properties

如果未指定位置,则默认使用
/etc/java-cas-client.properties。

系统属性(SYSTEM_PROPERTIES)

Web上下文(WEB_XML)

默认值(DEFAULT)

为了指示客户端选择策略,必须在Web应用程序的上下文中指定策略名称:

configurationStrategy

DEFAULT

如果没有定义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

casServerUrlPrefix

https://battags.ad.ess.rutgers.edu:8443/cas

serverName

http://www.acme-client.com


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

casServerLoginUrl

https://somewhere.cas.edu:8443/cas/login

serverName

http://www.the-client.com


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

casServerUrlPrefix

https://somewhere.cas.edu:8443/cas

serverName

http://www.the-client.com


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

casServerUrlPrefix

https://battags.ad.ess.rutgers.edu:8443/cas

serverName

http://www.acme-client.com


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

casServerUrlPrefix

https://battags.ad.ess.rutgers.edu:8443/cas

serverName

http://www.acme-client.com


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

signingKey

encryptionKey


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

配置客户端:

proxyGrantingTicketStorageClass

org.apereo.cas.client.EhcacheBackedProxyGrantingTicketStorageImpl

该设置为使用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的类似实现也可用。

配置客户端:

proxyGrantingTicketStorageClass

org.apereo.cas.client.proxy.MemcachedBackedProxyGrantingTicketStorageImpl

从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

java.lang.Exception

/error.jsp

defaultErrorRedirectPage

/defaulterror.jsp


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

targetBeanName

authenticationFilter


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


/*

org.apereo.cas.client.session.SingleSignOutHttpSessionListener

1.4.5.5.2. SAML协议


CAS Single Sign Out Filter


org.apereo.cas.client.session.SingleSignOutFilter

artifactParameterName

SAMLart


CAS Single Sign Out Filter


/*

org.apereo.cas.client.session.SingleSignOutHttpSessionListener

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

(0)
上一篇 2025-03-08 11:00
下一篇 2025-03-08 11:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信