Я пытаюсь создать приложение Facebook Canvas с использованием библиотеки Java/Spring Social Facebook.Переадресация верхнего уровня на стороне клиента Facebook Canvas/X-Frame-Options Deny
Когда пользователь впервые получает доступ к странице холста (apps.facebook.com/mycanvasapp), facebook делает HTTP POST с «signed_request» в теле на мой URL-адрес приложения.
Как пользователь впервые обращается к приложению, facebook отправляет пустое сообщение «oauth_token» в тело POST; поэтому мое приложение возвращает код HTTP 200 с ниже кодом Java Script, чтобы предоставить пользователю диалоговое окно авторизации.
top.location.href = '? HTTPS: //www.facebook.com/v2.5/dialog/oauth client_id = 12345 & redirect_uri = HTTPS: //myapp.com/canvas/';
Это перенаправление верхнего уровня на стороне клиента/браузера, поскольку перенаправление HTTP-сервера не разрешено в iframe.
Однако в браузере/журналах Chrome я не вижу ошибки и не предоставляет пользователю окно авторизации.
Отказался, чтобы отобразить 'https://myapp.com/canvas/' в кадре, потому что набор 'X-Frame-Options' на 'DENY'.
Подобный вопрос задает в другом посте - Web App in Facebook Canvas/X-Frame-Options Deny Case , где она предложила сделать браузер на сторону верхнего уровня перенаправления вместо HTTP сервер перенаправления.
Я использую браузер верхнего уровня для перенаправления только с использованием «top.location.href» в Java Script, но все еще испытывает такую же проблему.
Когда я воспроизвожу запрос в curl/командной строке, вот ответ, который возвращается моему приложению, похоже, для меня это нормально.
HTTP/1.1 200 OK
Connection: keep-alive
Server: Apache-Coyote/1.1
X-Content-Type-Options: nosniff
X-Xss-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token
Content-Language: en-US
Transfer-Encoding: chunked
Date: Sat, 09 Jul 2016 04:40:17 GMT
Via: 1.1 vegur
<script>top.location.href='https://www.facebook.com/v2.5/dialog/oauth?client_id=12345&redirect_uri=https://myapp.com/canvas/';</script>
Тонкая настройка поля заголовка «X-Frame-Options», похоже, не очень помогает.
Что мне не хватает? Может ли кто-нибудь предложить подходящее решение?
Есть несколько предложений по использованию библиотеки Java Script Script SDK. Но поскольку мое приложение содержит страницу Facebook Canvas, при доступе к странице Canvas Facebook делает HTTP-сообщение на моем сервере, поэтому задается вопросом, как загрузить HTML/Java Script для загрузки библиотеки Java Script Script SDK до этого процесса.
PS : Я использую org.springframework.social.facebook.web.CanvasSignInController Весенний предварительный контроллер в моем приложении.
_ «так интересно, как загрузить HTML/Java Script для загрузки Facebook Java Script SDK-библиотеки до этого процесса пинает« _ - вы не можете этого сделать до этого. Но вы можете продолжать проверять серверную сторону signed_request - и если он не содержит зарегистрированного пользователя, то вы выводите код HTLM/JS для запуска клиентской части входа. (И вы никогда не должны делать это «автоматически», это просто плохой UX - предложите пользователю ссылку/кнопку, которую они могут нажать, чтобы войти в систему.) – CBroe
Спасибо за полезный совет. –