7

我的应用程序需要访问在不同服务器上运行的 RESTful Web 服务。此 Web 服务使用 CAS 身份验证,当通过浏览器使用它时,如果用户尚未通过身份验证,它将重定向到 CAS 登录。没有通过 CAS 实际登录的方法。我的应用程序也使用 CAS,因此用户将通过身份验证

我想通过 JQuery/Ajax 访问它,但似乎没有为 JSONP 配置服务器,我理解这是必不可少的,因为跨域问题。

现在,我可以改为通过我的服务器发出 Ajax 请求,这导致了我的问题:没有可供我的服务器调用的 CAS 登录方法,我如何“告诉”Web 服务用户已通过身份验证?

所以我想首先我想弄清楚浏览器、CAS 和 RESTful 服务之间发生了什么,以及如何在没有任何显式传递凭据的情况下处理授权。其次,我想看看在从我的服务器调用服务时如何/是否可以复制它 - 它与来自浏览器的请求不同,因此没有 CAS 授权令牌,但我没有看看如何获​​得或提供它。

4

2 回答 2

7

对于关于身份验证/单点登录如何工作的问题 1:
当您登录 CAS 服务器(例如 security.example.com)时,会在您的浏览器中为域 security.example.com 设置一个 cookie。当您使用标准 CAS 身份验证和验证过滤器通过应用程序上的浏览器访问受保护文件时,典型流程如下所示:

  1. 为应用程序配置的 CAS 身份验证过滤器检查用户对象是否在会话中。如果是,则允许用户通过
  2. 如果没有,CAS 身份验证过滤器会将浏览器重定向到 CAS 登录页面。在单点登录场景中,CAS 服务器识别自己的 cookie,检查应用程序是否已注册并参与单点登录 - 如果是,则使用服务票证将浏览器重定向回应用程序。
  3. 应用程序上配置的 CAS 验证过滤器识别服务票证并联系 CAS 服务器以验证票证并创建断言对象

要使整个流程正常工作,您需要使用 cookie 和会话处理。

对于关于如何在服务器端处理身份验证的问题 2:
我们在应用程序中遇到了类似的问题,并使用了 2 种不同的方法来解决它:

  1. 使用内部系统用户并使用基本身份验证标头通过此用户的凭据进行服务器到服务器访问。当然,您需要配置适当的过滤器来处理使用基本身份验证令牌的非交互式登录。这很容易实现,但是有明显的缺点,比如有这个特殊的系统用户,你的应用程序看到用户密码等。
  2. 使用代理身份验证。在这种方法中,当您的用户针对 application1 进行身份验证时,它还会生成一个代理票证以供 application2 使用(服务器到服务器调用)。此代理票证可以在服务器到服务器通信中传递,以便 application1 代表用户访问 application2
于 2013-07-16T08:04:16.993 回答
2

我在我的一个项目中使用了这样的设置。一些 CAS 实现通过 rest 调用启用授权。尝试添加基本授权标头(用户名和密码的 Base 64 编码)。它看起来像这样

Header("授权","基本")

也尝试使用 Mozilla 上的 REST 客户端访问 REST API 以进行调试。它将真正帮助您理解各种标题等。

于 2015-01-22T20:42:25.730 回答