通过RubyCAS使用单个访问令牌访问Rails API

时间:2012-05-17 23:09:17

标签: android ruby-on-rails cas rubycas sorcery

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

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

我需要知道的是CAS是否可能这样做,或者是否有一种方法可以用来获得相同结果的“CAS方式”?

我已经尝试过Devise和CAS插件devise_cas_authenticatable,但这似乎打破了最新版本的Devise。理想情况下,我希望将巫术与我自己的单一访问令牌生成实现一起使用,所有这些都与CAS相连。我对CAS很新,它能做什么,所以我想先发现可能的东西然后我会回馈rubycas-client和sorcery如果需要任何新的开发我能够编码

提前致谢

1 个答案:

答案 0 :(得分:0)

我相信你正在寻找Proxy Granting Tokens(第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

此解决方案不使用设计。