在我们公司,我们部署了多个使用 CAS 服务器通过 SSO 保护的 Web 应用程序。用户请求应用程序的 url,如果尚未通过身份验证,则会被重定向到 CAS 服务器登录页面。如果身份验证成功,用户将被重定向回最初请求的 url。共同的工作流程和完美的工作。
但是,我们还想使用 CAS 服务器保护我们的 REST API。我们的首选流程如下:
- 用户为应用程序 REST Api 创建令牌
- 使用此令牌,用户可以请求临时访问令牌(如 CAS 令牌)
- 在对 REST Api 的每个请求中,用户将临时访问令牌作为 HTTP 标头或请求参数包含在内
- REST Api 应用程序根据 CAS 服务器检查提供的临时令牌的有效性
听起来像 CAS 服务器确实支持的 OAuth,除了在任何时候都不会要求用户提供凭据,但我们还想为服务提供身份验证,即其他应用程序调用我们的 API:
- 开发人员要求提供 REST Api 令牌(与 CAS 用户相关联)
- 应用程序使用 Api 令牌请求临时访问令牌
- 对 Api 的进一步请求包括临时访问令牌作为 HTTP 标头或请求参数
- REST Api 应用程序根据 CAS 服务器检查临时访问令牌的有效性
我们希望我们的 REST Api 应用程序对用户凭据一无所知,他们甚至无法访问用户数据库,这对于使用应用程序的人来说工作得很好(重定向到 CAS 登录页面)。
我不知道我们如何实现这个流程,而不必大量定制 CAS 服务器并自己实现这个行为。
Google 使用 JWT for OAuth 2.0 for Server to Server Applications,这似乎是要走的路。
如果有人可以提供一些提示或替代方案(对 CAS 服务器),我将不胜感激。也许有人已经使用 CAS 服务器实现了这种模式,并且可以提供一些关于这个问题的信息。
最好的问候, 马可