У нас есть прокси-сервер, обслуживающий 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 и/или наш прокси, чтобы получить эту Работа?
Благодарим за ответы! Вместе с предложенными вами изменениями в http://stackoverflow.com/questions/37135806/wirecloud-redirect-url-with-proxy/37167337#37167337 он работает намного лучше. Ошибка 405 ошибки не допускается. – Newbird
Однако: когда пользователю необходимо войти в систему, после входа в URL-адрес все еще преобразуется и затем выдает неверную ошибку uric redicrect. Возможно, у вас есть решение? – Newbird
Пожалуйста, предоставьте мне полный URL-адрес с недопустимым параметром redirect_uri, чтобы обнаружить шаг, на котором URL-адрес поврежден. Также проверьте, что поле «Обратный вызов» в вашей службе KeyRock содержит URL-адрес, доступный из браузера пользователя: например. 'https: // wirecloud.example.com/complete/fiware /' (с использованием http ** s **) –