【问题标题】:Validate token ST Apereo CAS in REST service (Stateless)在 REST 服务中验证令牌 ST Apereo CAS(无状态)
【发布时间】:2023-04-09 09:35:01
【问题描述】:
我很抱歉我的英语不好。
我有工具 Apereo CAS 用作登录 SSO。当我与应用程序状态一起使用时,这非常有效。但我想为特定场景调用 API REST(无状态)并验证登录的用户(并使用您在服务上的信息)。我的后端 API 是使用 Spring Boot 开发的。有人需要类似的情况吗?
Ps:此 API 将由前端和没有前端的服务访问,因此我将无法使用 cookie。
序列图来举例说明我的想法:
enter image description here
谢谢。
【问题讨论】:
标签:
java
spring-boot
single-sign-on
cas
【解决方案1】:
您的前端应用程序需要向 CAS 服务器请求代理身份验证。
代理身份验证的更常见用例之一是能够为同样受 CAS 保护的后端 [基于 REST] 服务获取票证。场景通常是:
- 用户面临受 CAS 保护的应用程序 A。
- 后端的应用程序 A 需要联系服务 S 以生成数据。
- 服务 S 本身受 CAS 自身保护。
由于前端通过不涉及浏览器的服务器到服务方法在后端联系服务,因此后端将无法识别 SSO 会话已经存在。在这些情况下,前端需要执行代理才能为后端获取代理票证。代理票证被传递到后端的相关端点,因此它可以通过 CAS 检索和验证它,并最终产生响应。
跟踪路径可能如下所示:
- 浏览器导航到前端。
- 前端重定向到 CAS。
- CAS 使用 ST 进行身份验证并重定向回前端。
- 前端尝试验证 ST,并请求 PGT。
- CAS 确认 ST 验证,并颁发代理授权票证 PGT。
- 前端要求 CAS 为后端 API 生成一个 PT,在其请求中提供 PGT。
- CAS 为后端 API 生成 PT。
- 前端联系服务 S 端点,在请求中传递 PT。
- 后端 API 尝试通过 CAS 验证 PT。
- CAS 验证 PT 并产生成功的响应。
- 后端 API 接收响应,并为前端生成数据。
- A 接收数据并在浏览器中显示。
See this了解详情。