Использование 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
Ответы
Ответ 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
Ответ 2
Я использую для этого обычную "стратегию": https://gist.github.com/4492569
Ответ 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