【问题标题】:Accessing Rails API using a single access token via RubyCAS通过 RubyCAS 使用单个访问令牌访问 Rails API
【发布时间】:2012-05-17 23:09:16
【问题描述】:

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

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

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

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

提前致谢

【问题讨论】:

  • 我还发现设计和设计 cas 身份验证在 rails 5 中不起作用。

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


【解决方案1】:

我相信您正在寻找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

此解决方案不使用设计。

【讨论】:

    猜你喜欢
    • 2019-02-08
    • 2023-02-02
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2014-07-02
    • 2021-05-15
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多