Доступ к фотографиям на стороне клиента с помощью access_token, используя граф Facebook

У меня есть приложение, которое включает отображение некоторых фотографий из учетной записи пользователя Facebook. В настоящее время я использую гем fb_graph для этого (это проект Ruby).

Я могу получить URL-адреса без проблем, но я не могу понять, смогут ли пользователи видеть эти фотографии, отображаемые на моей странице, если они вышли из своей учетной записи Facebook. URL-адреса выглядят так: http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/<id>.jpg.

Однако есть очевидный обходной путь. Я мог бы добавить токен доступа, который у меня есть для пользователя, к URL-адресам, чтобы у них были те же разрешения на просмотр фотографий, что и у меня: ``http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/.jpg?access_token=`.

Такие вопросы, как этот http://developers.facebook.com/docs/authentication/client-side/ предполагает, что в крайнем случае следует использовать access_token на стороне клиента, но я думаю, что должен (поскольку не все фотографии будут общедоступными).

И этот вопрос Токен доступа Facebook: на стороне сервера и на стороне клиента streams говорит, что, поскольку я получаю токен на стороне сервера, он продлится 60 дней. Поэтому я хочу быть осторожным с тем, как я его использую.

Тогда два вопроса: будет ли это работать для просмотра фотографий, и есть ли лучший способ, чтобы не открывать access_token?


person hcarver    schedule 02.12.2012    source источник
comment
Также любопытно узнать, правильно ли я понял, и что на самом деле мне вообще не нужен access_token, но я могу просто отображать изображения без него, и мои пользователи смогут их видеть. У меня это работает локально, но я хочу понять, будет ли это работать в продакшене.   -  person hcarver    schedule 04.12.2012


Ответы (3)


Ни при каких обстоятельствах не помещайте токен доступа в какие-либо URL-адреса контента на вашей странице, иначе любые ресурсы, которые вы загружаете со сторонних сайтов, будут раскрывать токены доступа пользователей в заголовках реферера.

URL-адрес, который вы получаете для фотографии из API, должен быть доступен напрямую без токена доступа.

person Igy    schedule 04.12.2012

Можете ли вы получить доступ к https://sphotos-a.xx.fbcdn.net/hphotos-ash3/168119_10150146071831729_5116892_n.jpg ? Я думаю, что вы можете, потому что это на facebook cdn. Вы не случайно получили эту ссылку. Чтобы перейти к этому шагу, вам необходимо получить доступ к альбому и фотографиям пользователя с токеном доступа и разрешением «user_photos» (что вы, похоже, уже делаете).

Технически говоря, вы должны быть в порядке в производстве (если только facebook не изменит свой URL-адрес cdn, что кажется маловероятным).

EDIT
Забыл упомянуть. Разоблачение токена доступа пользователя не является хорошей практикой (как упоминал Иги). Хакеру по-прежнему потребуется ваш идентификатор приложения и секрет клиента, чтобы совершать вредоносные действия с токеном доступа, но вы не хотите брать на себя ненужный риск. Прочтите этот вопрос для получения более подробной информации.

person Karan Ashar    schedule 07.12.2012
comment
Я могу получить доступ к этой ссылке — можете ли вы объяснить, что это доказывает? Вы говорите, что этот URL-адрес является временным, сгенерированным вашим access_token? Также возможно, что фотография является общедоступной, если вы не можете расширить свое объяснение. Спасибо. - person hcarver; 07.12.2012
comment
1) Это доказывает, что вы можете получить доступ к URL-адресу fb cdn без токена. 2) URL-адрес не является временным (пока fb не изменит местоположение cdn) и не изменится на основе токена доступа 3) Рассмотрим идентификатор альбома 451318416382 (это мой личный личный альбом). Вы не можете получить к нему доступ напрямую без моего токена доступа. Теперь рассмотрим фото из того же альбома здесь. Вы можете получить к нему доступ, верно? Это доказывает, что вам не нужен токен доступа для доступа к URL-адресу в fb cdn, если у вас есть ссылка на него. - person Karan Ashar; 07.12.2012
comment
Злоумышленнику не нужно ничего, кроме токена доступа, чтобы нанести ущерб; не ни при каких обстоятельствах не иметь токена доступа в источнике документа - person Igy; 07.12.2012
comment
Да, я исправляюсь. Игги прав. См. это вопрос. Я обновлю свой ответ. - person Karan Ashar; 07.12.2012

Я еще не понял вопрос должным образом еще.

Для таких ресурсов, как: http://sphotos-d.ak.fbcdn.net/hphotos-ak-prn1/blah, это статические URL-адреса, которые время от времени не меняются, и им не нужен токен доступа, чтобы их могли видеть другие. Вам понадобится access_token, чтобы получить URL-адрес.

Сгенерированные на стороне клиента токены действительны в течение 60 дней или называются токенами с расширенным сроком действия, и вы, очевидно, must not рискуете безопасностью своих пользователей, раскрывая токен.

Я пропустил какую-то часть вашего вопроса?

person Kishor    schedule 11.12.2012