1

Я пытаюсь создать приложение 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 Весенний предварительный контроллер в моем приложении.

+0

_ «так интересно, как загрузить HTML/Java Script для загрузки Facebook Java Script SDK-библиотеки до этого процесса пинает« _ - вы не можете этого сделать до этого. Но вы можете продолжать проверять серверную сторону signed_request - и если он не содержит зарегистрированного пользователя, то вы выводите код HTLM/JS для запуска клиентской части входа. (И вы никогда не должны делать это «автоматически», это просто плохой UX - предложите пользователю ссылку/кнопку, которую они могут нажать, чтобы войти в систему.) – CBroe

+0

Спасибо за полезный совет. –

ответ

1

Я решил эту проблему путем отключения/подавляя быть заголовки безопасности для ответа POST с моего сервера,

X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode = block Cache-Control: no-cache, no-store, max-age = 0, must-revalidate 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: Происхождение, X-Requested-With, Content-Type, Accept, Х-

ключ исключить X-Frame-Options & Strict-Transport-Security в заголовках, что решен проблема для меня сейчас.