RESTful Web服务的CAS身份验证

时间:2012-11-27 10:35:29

标签: rest authentication service web cas

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

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

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

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

2 个答案:

答案 0 :(得分:6)

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

  1. CAS为应用程序配置的身份验证筛选器检查用户对象是否在会话中。如果是,则允许用户通过
  2. 如果没有,CAS身份验证过滤器会将浏览器重定向到CAS登录页面。在单点登录方案中,CAS服务器识别其自己的cookie,检查应用程序是否已注册并参与单点登录 - 如果是,则将浏览器重定向回带有服务票证的应用程序。
  3. 在应用程序上配置的CAS验证过滤器标识服务票证并联系CAS Server以验证票证和创建断言对象
  4. 要使整个流程正常工作,您需要使用Cookie和会话处理。

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

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

答案 1 :(得分:2)

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

标题(“授权”,“基本”)

还尝试使用Mozilla上的REST Client访问REST API以进行调试。这将真正帮助您理解各种标题等。