2016-05-11 6 views
0

У нас есть прокси-сервер, обслуживающий HTTPS-страницы в Интернете. Поэтому он перенаправляет запросы в нашу DMZ, где страницы обслуживаются как страницы HTTP.WireCloud и Horizon за прокси HTTPS

Мы создали WireCloud для работы в субдомене: wirecloud.example.com. Horizon работает на horizon.example.com.

В Horizon URL-адрес обратного вызова установлен на: http://wirecloud.example.com/complete/fiware/ и в settings.py для Wirecloud установлен FIWARE_IDM_SERVER = 'http://horizon.example.com'.

Теперь, когда вызывается wirecloud.example.com/login, он перенаправляется на https нашим прокси-сервером и затем перенаправляется на горизонт путем переадресации, а затем перенаправляется нашим прокси до https://horizon.example.com/oauth2/authorize/?state=STATE_KEY&redirect_uri=http://wirecloud.example.com/complete/fiware/&response_type=code&client_id=CLIENT_ID. Если пользователь не вошел в систему и теперь делает это, redirect_uri преобразуется в это: http%253A%252F%252Fwirecloud.example.com%252Fcomplete%252Ffiware%252F Что приводит к этой ошибке: {"state": "STATE_KEY", "error": "invalid_redirect_uri"} (HTTP 400). Если пользователь уже вошел в систему и пытается разрешить приложение (WireCloud) ошибка 405 брошено:

Environment: 


Request Method: GET 
Request URL: http://wirecloud.example.com/complete/fiware/?state=STATE_KEY&code=CODE 

Django Version: 1.9.6 
Python Version: 2.7.9 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'wirecloud.commons', 
'compressor', 
'wirecloud.catalogue', 
'wirecloud.platform', 
'wirecloud.oauth2provider', 
'wirecloud.fiware', 
'social.apps.django_app.default') 
Installed Middleware: 
('wirecloud.commons.middleware.URLMiddleware',) 



Traceback: 

File "/opt/wc/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "/opt/wc/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    57.   response = view_func(request, *args, **kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    58.   return view_func(*args, **kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/social/apps/django_app/utils.py" in wrapper 
    51.    return func(request, backend, *args, **kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/social/apps/django_app/views.py" in complete 
    28.      redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/social/actions.py" in do_complete 
    43.   user = backend.complete(user=user, *args, **kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/social/backends/base.py" in complete 
    41.   return self.auth_complete(*args, **kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/social/utils.py" in wrapper 
    229.    return func(*args, **kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/social/backends/oauth.py" in auth_complete 
    383.    method=self.ACCESS_TOKEN_METHOD 

File "/opt/wc/venv/lib/python2.7/site-packages/social/backends/oauth.py" in request_access_token 
    361.   return self.get_json(*args, **kwargs) 

File "/opt/wc/venv/lib/python2.7/site-packages/social/backends/base.py" in get_json 
    229.   return self.request(url, *args, **kwargs).json() 

File "/opt/wc/venv/lib/python2.7/site-packages/social/backends/base.py" in request 
    225.   response.raise_for_status() 

File "/opt/wc/venv/lib/python2.7/site-packages/requests/models.py" in raise_for_status 
    844.    raise HTTPError(http_error_msg, response=self) 

Exception Type: HTTPError at /complete/fiware/ 
Exception Value: 405 Client Error: METHOD NOT ALLOWED for url: https://horizon.example.com/oauth2/token 

Так как же нам нужно настроить WireCloud и/или Horizon и/или наш прокси, чтобы получить эту Работа?

ответ

1

Редактировать файл и settings.py добавить следующие строки для выгонки WireCloud использовать протокол HTTPS для внутреннего URLs:

FORCE_PROTO = 'https' 
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True 

Это должно сделать WireCloud использовать https://wirecloud.example.com/complete/fiware/ как redirect_uri. Дополнительную информацию см. В разделе FORCE_PROTO.

Что касается, это исключение:

Exception Type: HTTPError at /complete/fiware/ 
Exception Value: 405 Client Error: METHOD NOT ALLOWED for url: https://horizon.example.com/oauth2/token 

Мне нужно больше информации за то, что 100% уверен, но, кажется, проблема в отношении видимости сети. Я думаю, что машина WireCloud запрашивает URL-адрес https://horizon.example.com/oauth2/token, но этот запрос не проходит через ваш сервер proxy/frontend. Вы можете подтвердить этот случай, если у вас есть действующий токен, выполнив следующую строку с машины WireCloud и с внешней машины:

curl -v https://horizon.example.com/oauth2/token?access_token=***** 
+0

Благодарим за ответы! Вместе с предложенными вами изменениями в http://stackoverflow.com/questions/37135806/wirecloud-redirect-url-with-proxy/37167337#37167337 он работает намного лучше. Ошибка 405 ошибки не допускается. – Newbird

+0

Однако: когда пользователю необходимо войти в систему, после входа в URL-адрес все еще преобразуется и затем выдает неверную ошибку uric redicrect. Возможно, у вас есть решение? – Newbird

+0

Пожалуйста, предоставьте мне полный URL-адрес с недопустимым параметром redirect_uri, чтобы обнаружить шаг, на котором URL-адрес поврежден. Также проверьте, что поле «Обратный вызов» в вашей службе KeyRock содержит URL-адрес, доступный из браузера пользователя: например. 'https: // wirecloud.example.com/complete/fiware /' (с использованием http ** s **) –

 Смежные вопросы

  • Нет связанных вопросов^_^