Juju развернул apache + gunicorn + приложение django через SSL, openid завершился неудачей с No Mode

Сообщение в блоге

Просто FYI Я написал сообщение в блоге, объясняющее все, что я сделал, чтобы встать и уйти: http://www.astokes.org/post/2013-07-14-juju- gunicorn-apache-django

У меня эти службы развернуты, и все доступно через https. Однако, когда я пытаюсь выполнить аутентификацию через launchpad.net openid, все происходит.

Сначала обратный вызов http://www.astokes.org/post/2013-07-14-juju -gunicorn-apache-django , когда он должен быть https://10.xxx, а во-вторых, приложение терпит неудачу с сообщением в блоге , когда оно наконец вернется к хосту https. [ ! d5]

zef-sample-apache2-0: ~ $ cat /etc/apache2/sites-enabled/10.0.3.206_https

# Managed by juju

    ServerName      10.0.3.206
    Redirect permanent / https://10.0.3.206/



    ServerName      10.0.3.206
    ServerAdmin     cts@canonical.com

    CustomLog       /var/log/cts-custom.log combined
    ErrorLog        /var/log/cts-error.log


    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/ssl-cert-cts.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-cts.key
    RequestHeader set X-FORWARDED-SSL "on"
    RequestHeader set X-FORWARDED_PROTO "https"

    ProxyRequests off
    ProxyPreserveHost on
    
        Order Allow,Deny
        Allow from All
    

    ProxyPass / http://10.0.3.113:8080/
    ProxyPassReverse / http://10.0.3.113:8080/

    #RewriteEngine on

    #RewriteRule ^/(.*)$ http://10.0.3.113:8080/$1 [P,L]

#    Alias           /favicon.ico    /srv/seg-dashboard/segdash/static/favicon.ico
#    Alias           /robots.txt     /srv/seg-dashboard/segdash/static/robots.txt
#    Alias           /static/admin    /var/www/static/admin
#    Alias           /static/        /srv/seg-dashboard/segdash/static/

Я заставляю все по ssl, поэтому в этот момент im не уверен, что проблема с приложением моего приложения django с момента запуска локального сервера https и проверка подлинности через SSL работает нормально.

Любые идеи?

Вот мой статус статуса juju [!d13 ]

machines:
  0:
    agent-state: running
    dns-name: localhost
    instance-id: local
    instance-state: running
services:
  apache2:
    charm: cs:precise/apache2-11
    exposed: true
    relations:
      reverseproxy:
      - seg-dashboard
    units:
      apache2/0:
        agent-state: started
        machine: 0
        open-ports:
        - 80/tcp
        - 443/tcp
        public-address: 10.0.3.206
  gunicorn:
    charm: cs:precise/gunicorn-7
    relations:
      wsgi-file:
      - seg-dashboard
    subordinate: true
    subordinate-to:
    - seg-dashboard
  postgresql:
    charm: cs:precise/postgresql-30
    exposed: false
    relations:
      db:
      - seg-dashboard
      replication:
      - postgresql
    units:
      postgresql/0:
        agent-state: started
        machine: 0
        public-address: 10.0.3.37
  rabbitmq-server:
    charm: cs:precise/rabbitmq-server-12
    exposed: false
    relations:
      amqp:
      - seg-dashboard
      cluster:
      - rabbitmq-server
    units:
      rabbitmq-server/0:
        agent-state: started
        machine: 0
        public-address: 10.0.3.144
  seg-dashboard:
    charm: local:precise/seg-dashboard-1
    relations:
      amqp:
      - rabbitmq-server
      db:
      - postgresql
      website:
      - apache2
      wsgi:
      - gunicorn
    units:
      seg-dashboard/0:
        agent-state: started
        machine: 0
        public-address: 10.0.3.113
        subordinates:
          gunicorn/0:
            agent-state: started

И вот соответствующая часть установки Launchpad Openid (django settings.py)

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

ALLOWED_EXTERNAL_OPENID_REDIRECT_DOMAINS = ['lvh.me', 'localhost', 'canonical.com']

# Add support for django-openid-auth
AUTHENTICATION_BACKENDS = (
    'django_openid_auth.auth.OpenIDBackend',
    'django.contrib.auth.backends.ModelBackend',
)

OPENID_CREATE_USERS = True
OPENID_UPDATE_DETAILS_FROM_SREG = True
OPENID_SSO_SERVER_URL = 'https://login.launchpad.net/'
OPENID_USE_AS_ADMIN_LOGIN = True
OPENID_LAUNCHPAD_TEAMS_REQUIRED = [
    'canonical',
]
OPENID_LAUNCHPAD_STAFF_TEAMS = (
    'cool-guys',
)
OPENID_STRICT_USERNAMES = True
OPENID_USE_EMAIL_FOR_USERNAME = True

LOGIN_URL = '/openid/login/'
LOGIN_REDIRECT_URL = '/'

# Login is required for all these patterns
LOGIN_REQUIRED_URLS = (
    r'/(.*)$',
)
# We much except the openid URLs otherwise we go in loops.
LOGIN_REQUIRED_URLS_EXCEPTIONS = (
    r'/openid/(.*)$',
)

Дополнительно:

Я считаю, что проблема связана с эстафету от Apache (SSL) до gunicorn (nonSSL), а затем, когда он попадает на launchpad.net, обратным вызовом является сервер Apache (nonSSL). Я попытался использовать что-то вроде django-sslify для принудительного SSL на стороне приложения, но похоже, что ProxyPreserveHost не заботится / не проверяет, идет ли хост от https или http, а просто по умолчанию - http.

Подробнее :

Вот заголовки запросов, отправленные на launchpad.net

User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0
Referer:https://10.0.3.218/openid/login/?next=/
Host:login.launchpad.net
DNT:1
Connection:keep-alive

. Вот как выглядят данные формы:

openid_referer:"https://10.0.3.218/openid/login/?next=/"
openid.return_to:http://10.0.3.218/openid/complete/?next=%2F&janrain_nonce=2013-07-13T03%3A35%3A28ZSrfuV5
openid.realm:http://10.0.3.218/

Это используя библиотеку django-openid-auth, и сейчас я просматриваю код, чтобы понять, почему потребитель непосредственно устанавливает return_to http, когда референт показывает https?

1
задан 15 July 2013 в 07:17

0 ответов

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

Похожие вопросы: