Недавно я получил контракт на работу с приложением, которое требует Facebook-Connect в качестве одного из механизмов аутентификации.
Работая над своим решением Facebook-Connect, я понимаю, что оно реализует схему аутентификации с использованием единого входа, при которой, если вы входите на один веб-сайт, вы входите на все из них. Лично я не люблю этот подход и нахожу, что с ним трудно (не невозможно) работать при попытке направить все системы аутентификации через один процесс, над которым вы (разработчик) имеете некоторый контроль. Я также думаю, что это вносит ненужные проблемы безопасности (см. Риски развертывания Интернета) только для того, чтобы немного улучшить пользовательский опыт.
Исследуя стратегии работы с технологией, я заметил, что в блогосфере есть только помазанный Facebook-Connect, как священный грааль аутентификации, повторяющий мнение друг друга и настойчиво заявляющий, что «OpenID слишком сложен». В то же время я не видел, чтобы многие выдающиеся разработчики и эксперты по безопасности поднимали флаги или высказывали свое мнение по этому вопросу. Мой единственный опыт работы с OpenID связан со StackOverflow и соответствующими сайтами. Мне тоже было трудно понять, что это было на первых порах, но как только я понял, что могу войти в систему со своими учетными данными Google, опыт оказался действительно гладким.
Я параноик или скучаю по тому, что у всех есть? Является ли Facebook-Connect действительно лучшей альтернативой OpenID, или все пьют чью-то помощь Kool?
EDIT:
Поработав над этим, я подтверждаю, что схема входа в Facebook-connect не идеальна. Вся вещь iframe / js / cookie / reload ужасна и может легко стать проблематичной. Интеграция fb login в существующую систему аутентификации сама по себе является упражнением. Вам придется пойти на некоторые компромиссы. Мне нужно написать еще одну статью, чтобы объяснить, как я это сделал.
Мне кажется, что Facebook немного помешан на единой регистрации. Большинство людей не знают, что у Facebook есть OpenID для их собственного сайта, но даже способ, которым они это реализовали, состоит в том, чтобы эмулировать SSO и делает его немного бессмысленным. Я думал, что OpenID должен работать: вы переходите на новый веб-сайт, если у вас есть учетная запись OpenId, вы вводите URL-адрес, входите в систему своего провайдера и вы в нем. Затем вы можете перейти к дополнительной информации.
Fb не предлагает вам вход в OpenID заранее. Вместо этого сначала необходимо зарегистрироваться и войти в систему, затем перейти к настройкам учетной записи и в разделе «Связанные учетные записи» выбрать поставщика OpenID. Однако, в отличие от StackOverflow, который понимает суть, Facebook позволяет вам войти в систему только с вашим OpenID, если вы попросите своего провайдера запомнить этот параметр. Зачем? Это делает его более похожим на SSO. Если вы не установите флажок Google, который просит запомнить, OpenID не работает на Facebook.
Логин в стороне, facebook-connect в целом работает, но есть еще много углов для раунда. Несколько вещей, которые заставили меня дернуть себя за волосы и проклясть в этом API:
- документация на Facebook разбросана и неправильно оптимизирована. В течение первого часа его открытия в браузере откроется не менее 10 вкладок. Если / когда вы натолкнетесь на интересные темы, которые, по вашему мнению, могут быть полезны в будущем, убедитесь, что правильно добавили их в закладки, не полагайтесь на навигацию, чтобы найти их снова, потому что иногда ключевые статьи зарыты глубоко. Я знаю, что вики-подход к документированию API в последнее время сделал много проектов ленивыми, но обычно это Facebook. Они должны иметь возможность нанять команду для предоставления надлежащих руководств пользователя. Итак, не забудьте иметь хорошую папку закладок на Facebook, прежде чем начать.
- В API есть много методов, удачи в поиске примера их использования, вы должны полагаться на инстинкт.
- много раз, когда что-то не работает, как вы хотите, никто не знает почему. При посещении страниц форума объяснения даются в виде гипотез и слухов. например Почему при входе в систему у некоторых приложений появляются всплывающие окна входа, а у других - модальный диалог js? Можно ли контролировать это поведение? никто не уверен. Ходят слухи, что Facebook проводит какое-то тестирование, не сообщая никому.
- не все работает как рекламируется. Т.е. вы можете столкнуться с тем, что вас поощряют использовать функцию, тратить драгоценное время на ее изучение, реализацию, отладку, а затем обнаруживать, что она не работает с facebook-connect, когда вы помещаете ее в обработчик исключений try / catch. например feed.publishUserAction .
- Facebook слишком старается быть удобным для пользователя. Они тратят впустую ценные ресурсы, толкая автоматические API, которые работают только половину времени (xfbml), вместо того, чтобы поощрять разработчиков использовать свои с трудом заработанные знания, используя более простые вещи, которые, как доказали, работают большую часть времени (псевдо sql + html). например Я потратил время, пытаясь использовать комбинацию ajax / xfbml / js, чтобы вытащить фотографии друзей со своего сервера. Это будет работать на пару запросов, а затем вообще перестанет работать. Затем я решил вытащить данные непосредственно из их базы данных, используя их язык запросов facebook (fql), и создать собственную разметку в html. работал на 100%. Мой совет, если вы настоящий разработчик, не покупайте мантру «все просто», которую Facebook пытается накормить всем, это не так. В дополнение к ознакомлению с API-интерфейсом клиента вашей программной платформы для Facebook (PHP, Python, Java и т. Д.), Вложите средства в изучение того, что вы можете извлечь из их сервера напрямую, используя fql , и что вы можете делать в браузере с помощью JS Client API (не путать с fbjs). Вы можете обнаружить, что более поздние 2 - это все, что вам нужно для большинства вещей.
Я уверен, что список на этом не заканчивается, но от макушки головы вот он.