首页 > 解决方案 > 如何使用 Spring Security 读取 CAS 票证验证 XML?

问题描述

我有一个 Spring Boot 应用程序并使用Java Apereo CAS 客户端(版本 3.6.2)来使用CAS 服务器进行身份验证。换句话说,我想把我的应用程序变成一个 CAS 客户端,我没有自己设置 CAS 服务器。

我检查了对 CAS 服务器的调用列表:

在此处输入图像描述

对 CAS 服务器进行了第一次调用,但我没有看到对服务器的第二次调用以进行票证验证(即对https://cas-server-address/cas/serviceValidateURL 的调用),它将返回一个 XML 文档,其中包含我想要提取并存储在user其中的属性authtype数据库。

我有两个问题:

  1. 为什么没有第二次调用 CAS 服务器进行票证验证?它是隐藏的吗?
  2. 如何从 XML 文档中提取userauthtype属性并将它们存储在数据库中?

标签: springspring-bootspring-securitycas

解决方案


为什么没有第二次调用 CAS 服务器进行票证验证?

有。第二个调用是从应用服务器到 CAS 服务器的反向通道调用。根据定义,这不是您在浏览器中看到的内容。此调用转到幕后的 CAS 服务器,以验证在第一段(即ST-xyz)中收到的服务票证。Java CAS 客户端库应该会自动为您执行此操作,您可以在日志中验证这一点。

如果您没有看到这种情况发生,则说明您的配置设置不正确或在此过程中出现错误。

它是隐藏的吗?

隐藏在浏览器中,因为它是一个反向通道调用。有关发生情况和原因的更多详细信息,请研究CAS 协议

如何从 XML 文档中提取 user 和 authtype 属性并将它们存储在数据库中?

Java CAS 客户端库通常提取用户标识和其他属性。然后,用户 ID 将在 REMOTE-USER 标头下可用,该标头可以通过 http 请求对象获取。如果您有权访问 http 会话,您还可以从包含 CAS 有效负载的会话中获取最终断言:

var assertion = (Assertion) session.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);

有关更实际的示例,请参阅this


推荐阅读