Omniauth и open_id с Google не работают при работе за nginx в режиме SSL.

Rails 3.0.12, новейший omniauth, я могу подключиться к Google и просто получить адрес электронной почты пользователя. хорошо. Но затем я запускаю то же самое приложение rails за nginx в режиме SSL, и оно не работает со страницей Google:

"The page you requested is invalid."

Это моя конфигурация nginx? Мои настройки omniauth?

Я знаю X-Forwarded- Proto: https— это особый соус, есть ли что-нибудь еще, что мне нужно сделать, чтобы openid был счастлив за веб-сервером SSL?

Вот полный пример кода: вы можете клонировать этот репозиторий, установка пакета и запустите rails s, чтобы убедиться, что он работает нормально, затем запустите rake server, чтобы увидеть, что он не работает. https://github.com/jjulian/open_id_ssl

nginx.conf:

worker_processes  2;
pid        tmp/nginx.pid;
error_log  log/error.log;
daemon     off;

events {
}

http {
  client_body_temp_path tmp/body;
  proxy_temp_path       tmp/proxy;
  fastcgi_temp_path     tmp/fastcgi;
  uwsgi_temp_path       tmp/uwsgi;
  scgi_temp_path        tmp/scgi;

  server {
    listen 3000 ssl;
    ssl_certificate      development.crt;
    ssl_certificate_key  development.key;
    ssl_verify_depth     6;

    access_log log/access.log;
    proxy_buffering off;
    location / {
      proxy_pass        http://127.0.0.1:3300;
      proxy_set_header  X-Real-IP        $remote_addr;
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header  Host             $http_host;
      proxy_redirect    off;
      proxy_set_header  X-Forwarded-Proto https;
    }
  }
}

инициализатор omniauth.rb:

require 'openid/store/filesystem'

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :open_id, :identifier => 'https://www.google.com/accounts/o8/id'
end

route.rb:

OpenIdSsl::Application.routes.draw do
  match '/auth/open_id/callback' => 'accounts#update'
  match '/auth/failure' => 'accounts#failure'
  root :to => 'accounts#show'
end

ОБНОВЛЕНИЕ: В этом примере использовался Rails 3.1. 12 и OmniAuth 1.0.3. Обновление до Rails 3.1.4 и OmniAuth 1.1.0 устраняет проблему.

6
задан Jonathan Julian 17 April 2012 в 19:01
поделиться