I have recently been contracted to work on an application that requires Facebook-Connect as one of its authentication mechanisms.
Working on my Facebook-Connect solution, I'm realizing that it's implementing a Single-Sign On authentication scheme, where if you log in to one website, you're logged on to all of them. Personally, I'm not fond of the approach and find that it's difficult (not impossible) to work with when trying to funnel all the authentication systems through a single process that you (the developer) have some control over. I also think that it introduces unnecessary security issues (see Risks of Internet Deployment) just to slightly improve user experience.
While researching strategies to work with the technology, I have noticed that the blogosphere has all but anointed Facebook-Connect as the holy grail of authentication, echoing each others' opinion and clamoring high and strong that "OpenID is too complicated". At the same time, I haven't really seen many prominent developers and security experts raise flags or voice their opinions on the matter. My only experience with OpenID is with StackOverflow and related sites. I too had a hard time understanding what it was at first, but once I realized that I could log in with my google credentials, the experience proved to be really smooth.
Am I being paranoid or missing something that everybody got? Is Facebook-Connect really a better alternative to OpenID, or is everybody drinking someone's Kool Aid?
EDIT:
After working on this, I confirm that the facebook-connect login scheme is less than ideal. The whole iframe/js/cookie/reload thing is ugly and can easily become problematic. Integrating fb login to an existing authentication system is an exercise in itself. You will have to make some compromises. I'd have to write a whole other article to explain how I did it.
Facebook does seem a bit obsessed with Single Sign-On to me. Most people aren't aware that facebook has OpenID enabled for their own site, but even the way they implemented it is to emulate SSO and makes it a bit pointless. The way I thought OpenID is supposed to work: you go to a new website, if you have an OpenId account, put the url, login to your provider and you're in. You can then proceed to complete additional information.
Fb doesn't offer you the OpenID login up front. Instead, you first have to register and log in, then go to Account Settings and under Linked Accounts, pick an OpenID provider. However, unlike StackOverflow that understands the point, facebook only lets you login with yours OpenID, if you instruct your provider to remember that setting. Why? It makes it more SSO-like. If you don't check the google box that asks to remember, OpenID doesn't work on facebook.
The login aside, facebook-connect works in general, but there are still many corners to round. A few things that had me pulling my hair and curse at that api:
I'm sure the list doesn't end there, but from the top of my head here it is.
Existing and new users can now link their Facebook accounts with their Gmail accounts or with accounts from those OpenID providers that support automatic login.
Facebook Connect is a single sign-on application which allows users to interact on other websites through their Facebook account. Launched in December 2008, Facebook Connect works with over 15,000 "partnered" sites to make site access easier for its users.
OAuth is also used when giving third-party apps access to accounts like your Twitter, Facebook, Google, or Microsoft accounts. It allows these third-party apps access to parts of your account. However, they never get your account password.
Warning: strong opinions following.
Yes, they're drinking the Kool-Aid. Facebook Connect is a proprietary, provider-dependent Single Sign-On plus more. Facebook goes down, or is deemed unworthy of trust, and you're hosed.
OpenID bypasses that. It has major user experience issues at present, but long-term it is a better solution because it frees the system from dependence on (and filtering all traffic through) a single provider. Further, its specification and implementation seem a lot cleaner -- none of this JavaScript/IFrame stuff. Just plain HTTP requests and redirects. This also gives you a lot better browser compatibility.
Facebook Connect fixed the user experience issue, but at the expense of browser support and provider choice. It's a short-term pragmatic win, but I think that long-term it's not a good idea.
The Single Sign-on scheme is fairly common now with major apps. If you sign into Gmail, you're signed into all of Google's products. I think it makes sense in a way, specially if the apps are interconnected, are a major service and the provider has the best security people working behind the scenes.
Now for OpenID, I think it's a great idea too, but OpenID is still not very accessible. It was supposed to revolutionize sign-in for smaller and middle rung websites, but it didn't. There are a lot of websites using it, but apparently not enough. Most websites still use their own sign-in schemes, call it lethargy or uneasiness with a separate provider.
But I think sooner or later something like OpenID will emerge but for it to work needs a major push behind it. Someone like Google.
Just imagine if you were able to sign in SO using your google ID.
For now I think you needn't be uncomfortable with Facebook-Connect,but I recommend OpenID even though I am not using it myself yet :) (lethargy)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With