Недавно я был заключен контракт на работу с приложением, которое требует Facebook-Connect как один из его механизмов аутентификации.
Работая над своим решением для Facebook-Connect, я понимаю, что он реализует схему аутентификации Single Sign In, где, если вы входите на один веб-сайт, вы входите в систему ко всем из них. Лично я не люблю этот подход и считаю, что с ним трудно (не невозможно) работать, пытаясь вогнать все системы аутентификации через один процесс, который вы (разработчик) контролируете. Я также думаю, что он вводит ненужные проблемы безопасности (см. Риски развертывания в Интернете), чтобы немного улучшить пользовательский интерфейс.
Во время исследования стратегий для работы с технологией я заметил, что в блогосфере все, кроме помазанного Facebook-Connect, как священный грааль аутентификации, вторит мнениям друг друга и требует высокой и сильной степени, что "OpenID слишком сложный". В то же время я не видел, чтобы многие известные разработчики и эксперты по безопасности поднимали флагов или высказывали свое мнение по этому вопросу. Мой единственный опыт работы с OpenID - это StackOverflow и связанные с ним сайты. Мне тоже было трудно понять, что это было на первом месте, но как только я понял, что могу войти в систему с моими учетными данными google, опыт оказался действительно плавным.
Я, будучи параноиком или пропущенным, что-то, что получили все? Является ли Facebook-Connect действительно лучшей альтернативой OpenID, или все пьют кого-то Kool Aid?
EDIT:
После этого я подтверждаю, что схема входа в facebook-connect не идеальна. Вся информация iframe/js/cookie/reload является уродливой и может легко стать проблематичной. Интеграция входа fb в существующую систему аутентификации - это упражнение само по себе. Вам придется пойти на компромиссы. Мне нужно написать целую статью, чтобы объяснить, как я это сделал.
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, чтобы вытащить картинки друзей со своего сервера. Это будет работать для нескольких запросов, а затем перестанет работать вообще. Затем я решил вытащить данные непосредственно из своего db, используя свой язык запросов facebook (fql) и создать собственную разметку в html. работал 100%. Мой совет вам, если вы настоящий разработчик, не покупайте мантру "все просто", которую facebook пытается накормить всех, это не так. В дополнение к ознакомлению с вашей платформой программирования facebook client api (PHP, Python, Java и т.д.), Инвестируйте в изучение того, что вы можете извлечь из своего сервера, используя fql и что вы можете сделать в браузере с JS Client API (не путать с fbjs). Вы вполне можете найти, что более поздние 2 - это все, что вам нужно для выполнения большинства вещей.
Я уверен, что список не заканчивается там, но с моей вершины здесь.