Доступ к Rails API с использованием одного токена доступа через RubyCAS

В настоящее время я разрабатываю и создаю прототип архитектуры для веб-приложения, состоящего из трех частей: интерфейса Restful API (JSON, XML), предоставляемого из приложения Rails, приложения Backbone.js, поддерживаемого вторым приложением Rails, и Android приложение, которое получает доступ к данным через API.

Принимая во внимание, что обычный процесс аутентификации пользователя (перенаправление на страницу входа в систему) будет работать для приложения Backbone.js, я хочу использовать один токен доступа из приложения Android для аутентификации пользователя. Я вижу, как при первом использовании приложения Android потребовалось бы ввести имя пользователя и пароль, передавая обратно с сервера CAS дополнительную информацию, которая содержала бы предварительно сгенерированный токен единого доступа. Что я не могу понять, так это то, как я передал бы один токен доступа вместе с запросом от клиента и прошел проверку подлинности в CAS без перенаправления на страницу входа и т. Д.

Что мне нужно знать, так это то, возможно ли это с помощью CAS, или есть метод, который больше похож на "путь CAS", который я могу использовать для достижения того же результата?

Я экспериментировал с Devise и плагином CAS devise_cas_authenticatable, но, похоже, он не работает с последней версией Devise. В идеале я хочу использовать волшебство с моей собственной реализацией генерации токенов единого доступа, все подключенные к CAS. Я очень новичок в CAS и что он может делать, поэтому я сначала пытаюсь выяснить, что возможно, а затем я внесу свой вклад в rubycas-client и в колдовство, если потребуется какая-то новая разработка, чтобы я мог написать код,

заранее спасибо

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

Это решение не использует устройство.

Другие вопросы по тегам