RESTful web服务的CAS身份验证

RESTful web服务的CAS身份验证,rest,authentication,service,web,cas,Rest,Authentication,Service,Web,Cas,我的应用程序需要访问在不同服务器上运行的RESTful web服务。此web服务使用CAS身份验证,当通过浏览器使用它时,如果用户尚未通过身份验证,它将重定向到CAS登录。没有通过CAS实际登录的方法。我的应用程序还使用CAS,因此用户将通过身份验证 我希望通过JQuery/Ajax访问它,但是服务器似乎没有为JSONP配置,我知道这是必要的,因为跨域问题 现在,我可以通过我的服务器发出Ajax请求,这就引出了我的问题:如果没有CAS登录方法供我的服务器调用,我如何“告诉”web服务用户已通过身

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

我希望通过JQuery/Ajax访问它,但是服务器似乎没有为JSONP配置,我知道这是必要的,因为跨域问题

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


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

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

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

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

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

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

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


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

    当您说“…通过我的服务器发出Ajax请求…”时,您的意思是通过HTTP请求向web服务发出请求吗?了解您的服务器应用程序是用哪种语言编写的可能也很有用。您好,Paul-是的,我指的是HTTP请求,服务器是Java。所以现在看来CAS框架支持某种应用程序范围身份验证,我认为这意味着我应该能够让我的servlet生成HttpRequests并对其进行身份验证。但这不起作用,我想我需要对org.jasig.cas.client做点什么,但我不太明白这应该是什么。任何建议仍然感谢!