Как вставить заголовки http_authorization с помощью omniauth и oauth2 у потребителя, поэтому аутентификация происходит у провайдера?

Я создаю ecomm-сервис, используя Spree, который использует Devise, он содержит все данные наших пользователей, но мы используем его только как сервис через API, поэтому у нас есть приложение ation (rails 3.1), клиент / потребитель, использующий OmniAuth, имеет настраиваемую стратегию, которая через Oauth2 перенаправляет запросы поставщику, показывает знак страницы, а затем позволяет запросу пройти через метод авторизации, а затем весь процесс oauth2 работает безупречно, пока не будет выполнен обратный вызов, а затем пользователь войдет в систему нашего потребителя.

До этой части все работает правильно, это мой класс стратегии:

module OmniAuth
  module Strategies
    class MyStrategy < OAuth2
      def initialize(app, api_key = nil, secret_key = nil, options = {}, &block)
        client_options = {
          :site =>  CUSTOM_PROVIDER_URL,
          :authorize_url => "#{CUSTOM_PROVIDER_URL}/auth/my_provider/authorize",
          :token_url => "#{CUSTOM_PROVIDER_URL}/auth/my_provider/access_token"
        }
        super(app, :onyx_oauth, api_key, secret_key, client_options, &block)
      end

      protected

      def user_data
        response = @access_token.get("/auth/my_provider/user.json");
        if response.status.to_i == 200
          @data ||= MultiJson.decode(response.body);
        else 
          raise 'Service error'
        end
      end

      def request_phase
        options[:scope] ||= "read"
        super
      end

      def user_hash
        user_data
      end

      def auth_hash
        OmniAuth::Utils.deep_merge(super, {
          'uid' => user_data["uid"],
          'user_info' => user_data['user_info'],
          'extra' => user_data['extra']
        })
      end
    end
  end
end

Я пытаюсь создать форму входа в клиентском приложении, а затем, используя свою собственную стратегию, отправить эти учетные данные ( электронная почта / пароль) провайдеру (я думаю через заголовки HTTP_AUTHORIZATION), чтобы зарегистрировать пользователя в провайдере, пропуская форму входа в провайдере, поэтому после того, как разработка аутентифицирует пользователя, он проходит через метод авторизации и позволяет всему Процесс Oauth2 продолжается.

Я пробовал несколько вещей, включая определение вызова метода (env) в стратегии и установку env ['HTTP_AUTHORIZATION'] с такими учетными данными, как «email: пароль» перед вызовом super. Я также включил в метод request_phase ключ HTTP_AUTHORIZATION в хэш опций, даже внутри ключа: headers. Моя последняя попытка заключалась в том, чтобы включить его в хэш заголовков в объект подключения Фарадея в клиентском объекте (экземпляр OAuth2 :: Client) класса.

После отладки почти всего процесса и попытки включить его повсюду, мой провайдер продолжает не получать этот конкретный ключ в заголовках, даже отлаживает провайдера, когда Devise тестирует каждую стратегию ... но в конце концов не повезло.

Я очень признателен, если кто-нибудь скажет мне, что я делаю неправильно, или если то, что я пытаюсь сделать, невозможно сделать так, как я это делаю, или если есть более простой способ сделать это ..

Заранее спасибо, извините за очень длинный пост / вопрос, и еще раз спасибо за ваше время!

5
задан Roberto Cataneo 1 November 2011 в 07:32
поделиться