2015-05-31 3 views
1

У меня есть приложение в facebook разработчике. Это приложение настроено с «Valid UA redirect URIs» -значением с URL-адресом с http s. Но когда я нажимаю на кнопку «Войти с Facebook» на моей странице, она перенаправляет меня на http-версию URI. Это похоже на ошибку facebook в модуле OAuth?Приложение MVC 5 - приложение facebook перенаправляет неправильный URI - redirect_uri = http вместо redirect_uri = https

+0

Возможно, но маловероятно, что это ошибка, иначе переадресация https у всех будет неудачной - какой код вы используете для создания этого поведения? [Даже их примеры показывают, что redirect_url устанавливается в https: // values] (https://developers.facebook.com/docs/sharing/reference/share-dialog) – Luke

+0

Я использую стандартное приложение MVC 5 с аутентификацией Facebook, используя шаблоны MVC по умолчанию для последнего обновления VS2013. – PussInBoots

+3

Очевидно, это может быть связано с сайтом, сидящим за балансирами нагрузки в веб-хостинговой компании. – PussInBoots

ответ

0

У меня была именно эта проблема, когда я развернулся в среде AWS Elastic Beanstalk с SSL, завершенным на балансировщике нагрузки. В этом случае запрос, полученный от балансировщика нагрузки сервером, выглядит так, как клиент подключается к HTTP, а поставщики OWIN неправильно указывают, что URL-адрес Facebook/Twitter/Google должен быть подключен к вашему сайту, должен использовать HTTP вместо HTTPS на публичной стороне балансировщика нагрузки.

Я не мог найти простого решения для этого, не было никаких параметров для переопределения протокола URI, который хранится в свойстве IOwinRequest.Scheme. В конце концов, я схватил исходный код проекта Katana и исходный код проекта ASP.NET Identity, и я взломал его вокруг немного, так что я имел местные проекты в своих решениях для:

  • Microsoft.AspNet .Identity.Core
  • Microsoft.AspNet.Identity.EntityFramework
  • Microsoft.AspNet.Identity.Owin
  • Microsoft.Owin.Security.Cookies
  • Microsoft.Owin.Security.Facebook
  • Microsoft.Owin.Security.Google
  • Microsoft.Owin.Security.OAuth
  • Microsoft.Owin.Security.Twitter

Был 50 или около других проектов в рамках Katana, что я ушел из - я сделал все эти другие зависимости Nuget ссылаются на официальные версии.

Затем я нашел все ссылки на IOwinRequest.Scheme, и я заменил его фрагментом кода, который также искал заголовок X-Forwarded-Proto, который вводится балансировщиком нагрузки при использовании разгрузки SSL.

Что-то вроде этого:

var scheme = Request.Scheme; 

if (string.Equals(Request.Headers["X-Forwarded-Proto"], "https", StringComparison.InvariantCultureIgnoreCase)) 
{ 
    scheme = "https"; 
} 

// Use the scheme in the construction of a URI... 

Если балансировки нагрузки или прокси-сервер не предоставляет X-Forwarded-Proto заголовок, то ваши варианты довольно ограничены. Вы можете повторно зашифровать трафик и отправить его на свой сервер, используя тот же протокол, в котором он был включен.

+1

Я переключил хостинг на лазурь и там вам не нужны хаки, чтобы ваше приложение работало. Я бы предложил подумать о переходе хостинг-провайдера. – PussInBoots

+1

Azure должен использовать SSL до конца.Вы можете сделать это и на AWS, но приятно, если вы можете разгрузить его на балансировщик нагрузки по соображениям производительности. В AWS, если вы отключите SSL, вы также можете использовать службу управления сертификатами AWS, чтобы получить бесплатный сертификат подстановки, выпущенный Amazon. Это спасло меня почти 500 долларов в год - и AWS позаботится об обновлении автоматически в будущем. Определенно думаю, что OWIN должен поддерживать это лучше - возможно, это так, и я просто недостаточно понимаю базу кода ;-) – sheikhjabootie

+0

На самом деле я беру обратно то, что я только что сказал, так как я не включил функцию балансировки нагрузки в своей подписке Azure , Я предположил, что он включен по умолчанию с моим текущим планом подписки, но я думаю, вам нужно вручную обновить подписку, чтобы продвинуться по этой функции. Поэтому, если я это сделаю, мое приложение перестанет работать. Просто чтобы быть ясным: у того же приложения были проблемы с SSL/load balancer (который был включен по умолчанию) на моем старом хостинг-провайдере, но в Azure он работал сразу со стандартной подпиской Azure. Придется углубиться в это. – PussInBoots

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