2

我目前正在设计一个 Web 应用程序的架构并对其进行原型设计,该应用程序由三个部分组成,一个由 Rails 应用程序提供的 Restful API(JSON,XML)接口,一个由第二个 Rails 应用程序支持的 Backbone.js 应用程序,以及一个 Android通过 API 访问数据的应用程序。

虽然验证用户的通常过程(重定向到登录页面)适用于 Backbone.js 应用程序,但我想使用来自 Android 应用程序的单个访问令牌来验证用户。我可以看到第一次使用 Android 应用程序时需要用户名和密码,从 CAS 服务器传回包含预先生成的单一访问令牌的附加信息。我无法解决的是如何将单个访问令牌与来自客户端的请求一起传递,并在不重定向到登录页面等的情况下针对 CAS 进行身份验证。

我需要知道的是,这是否可以通过 CAS 实现,或者是否有一种更像“CAS 方式”的方法可以用来实现相同的结果?

我已经对 Devise 和 CAS 插件 devise_cas_authenticable 进行了试验,但这似乎被最新版本的 Devise 破坏了。理想情况下,我想在我自己的单一访问令牌生成实现中使用巫术,所有这些都与 CAS 挂钩。我对 CAS 非常陌生,它可以做什么,所以我试图先找出可能的方法,然后如果需要任何我能够编码的新开发,我将回馈 ruby​​cas-client 和魔法.

提前致谢

4

1 回答 1

1

我相信您正在寻找代理授予令牌(第 3.3 节)。这允许一个应用程序将有效的身份验证代理给另一个应用程序。RubyCAS 客户端通过以下方式支持这一点:

class ApplicationController < ActionController::Base
  before_filter :authenticate!

protected

  def authenticate!
    # This triggers RubyCAS client to request a proxy granting ticket
    CASClient::Frameworks::Rails::Filter.client.proxy_callback_url = "myservice.com" 
    CASClient::Frameworks::Rails::Filter.filter(self)

    if session[:cas_pgt]
      # You will want to pass this as a URL param to your remote service
      # whenever you call it. We store it on our base ActiveResource model
      # and automatically append to the url params of all requests.
    end


    # Username is available in session[:cas_user]
  end
end

此解决方案不使用设计。

于 2012-07-10T17:57:13.170 回答