Подтвердить что ты не робот

Использование auth_token из заголовков запроса вместо параметров POST/PUT с помощью Rails 3/devise

Мне нужно использовать аутентификацию на основе токенов в API Rails 3.1 в сочетании с самой последней версией программы. Пока нет проблем.

Теперь я не хочу добавлять my: auth_token к параметрам POST/PUT на стороне клиента, но отправлять этот токен как заголовок запроса, например HTTP_X_MYAPP_AUTH_TOKEN ".

Могу ли я убедить разработчиков использовать это, а не токен из параметров? Можно ли реализовать оба варианта, чтобы мои пользователи API могли отправлять токен через заголовок запроса или параметр POST/PUT?

С уважением. Felix

4b9b3361

Ответ 1

У меня была такая же потребность и придумал это решение:

class YourController < ApplicationController
  prepend_before_filter :get_api_key
  before_filter :authenticate_user!

  private
  def get_api_key
    if api_key = params[:api_key].blank? && request.headers["X-API-KEY"]
      params[:api_key] = api_key
    end
  end
end

Примечание. У меня установлено мое приложение Devise.token_authentication_key на api_key.

config.token_authentication_key = :api_key

Ответ 3

В Devise можно передать стандартный токен аутентификации через строку запроса или заголовок для базовой проверки подлинности HTTP, см. здесь. Код Ruby из спецификаций для передачи токена в заголовке HTTP_Authorization

header = "Basic #{Base64.encode64("#{VALID_AUTHENTICATION_TOKEN}:X")}"
get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => header

Тестирование из командной строки с помощью curl будет выглядеть следующим образом:

echo  "HUGP59gXsd7773a75Dvc:X" | base64
=> SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo=
curl --header "Authorization: Basic SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo=" \ 
     http://localhost/users.xml

Ответ 4

Используя devise и devess-token_authenticatable, мне пришлось установить это в моей config/initializers/devise.rb, чтобы передать токен через HTTP-заголовки:

config.http_authenticatable = true