如何使用 spring 安全性读取 CAS 票据验证 XML?

How to read CAS ticket validation XML using spring security?

我有一个 Spring 引导应用程序并使用 Java Apereo CAS Client (version 3.6.2) to use an CAS server 进行身份验证。换句话说,我想把我的应用程序变成一个CAS客户端,我没有自己设置CAS服务器。

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

第一次调用 CAS 服务器,但我没有看到第二次调用服务器进行票证验证(即调用 https://cas-server-address/cas/serviceValidate URL)return 具有 userauthtype 属性的 XML 文档,我想将其提取并存储在数据库中。

我有两个问题:

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

Why there is no second call for the CAS server for ticket validation?

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

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

Is it hidden?

对浏览器隐藏,因为它是 back-channel 调用。有关发生的情况和原因的更多详细信息,请研究 CAS protocol.

How do I extract user and authtype attributes from the XML document and store them in the database?

Java CAS client library 通常会提取用户 ID 和其他属性。然后,user-id 将在 REMOTE-USER header 下可用,可以通过 http 请求 object 获取。如果您有权访问 http session,您还可以从 session 中获取包含 CAS 有效负载的最终断言:

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

更实际的例子,see this