There are a number of different authentication methods available for integrating with Google Apps. These include OpenID, OAuth and SAML amongst others. At a first glance, it's not always entirely clear on the differences between them and when you may wish to use one over another. Here's a brief overview which hopefully makes this a bit clearer.
OpenIDOpenID allows users to log into supporting websites with an existing account without ever needing to create a new account. All you need to do is to create an OpenID for your username and password. In fact, the chances are you have one already. Sites such as Google, Yahoo!, Flickr and LiveJournal are OpenID providers, so if you have an account with any of these (or another OpenID provider), then you just need to find out your OpenID. It is usually formatted like a URL, for example, for LiveJournal it is username.livejournal.com whereas for MySpace it's www.myspace.com/username. Just replace username with your actual username. You can then click on the OpenID login link on the site you wish to log in and enter in your OpenID. You don't even need to create an account on the site. For Google Apps, the situation is the same. The user can log into your Drupal site by entering in their Google Apps OpenID url. If the user isn't already logged into their Google Apps account, they'll be prompted for their login details. Users may also have to confirm or reject a set of authentication requests made by the web application before being redirected back to the Drupal site. The user will now be logged into both sites, but the user's Google Apps account can't be accessed by the Drupal site. OpenID has been part of Drupal core since version 6. For earlier versions of Drupal, there is a contributed module which provides this functionality at http://drupal.org/project/openid These modules only provide client support, to become an OpenID provider (aka server), you will need the OpenID Provider or OpenID Attribute Exchange modules. Note, while earlier versions of Drupal's OpenID module supported regular Google OpenIDs, those for Google Apps didn't work due to unsupported characters in the url. This was recently fixed in http://drupal.org/node/216101 so ensure you are running Drupal 6.15 or later to avail of this fix. Useful links: OpenID homepage : http://openid.net OpenID 2.0 specification: http://openid.net/specs/openid-authentication-2_0.html OpenID Federated Login Service for Google Apps : http://code.google.com/apis/apps/sso/openid_reference_implementation.html OpenID Explained : http://openidexplained.com/
OpenID + OAuth (aka hybrid)This is essentially the same as OpenID, except an Auth Token is also returned to the Drupal site. This token allows the site to access the user's Google Apps account and pull down information, such as their calendar feed. See the next section for more information on OAuth.
OAuthGoogle also supports the OAuth standard for API authentication. When not being used with OpenID, the user logs into the site with their Drupal username and password. Once authenticated, they are then immediately redirected to the Google login page where they must confirm (or reject) that the website is allowed to use an authorization token to access their Google account. If confirmed, the user is redirected back to Drupal site, along with an auth token, which the site can then use to access Google data feeds, such as the user's calendars, mails, etc. If you want the user to be logged into both Drupal and Google, and you want the site to be able to access the user's Google account, then this is a good solution. The only caveat is that it is a two step login - once on the Drupal site, and then on Google. If you just want one login but the same functionality, then you probably want a combination of SAML and 2-legged OAuth. There are two Drupal modules which provide OAuth functionality. The first is OAuth which integrates with Drupal's Services module. The other is OAuth Common which is a more generic, API module. I found the OAuth module too closely intertwined with the Services module to be of any use for integrating with Google. Useful links: OAuth homepage : http://oauth.net/ Google OAuth documentation : http://code.google.com/apis/accounts/docs/OAuth.html Google Auth (gauth) module : http://drupal.org/project/gauth OAuth Common module : http://drupal.org/project/oauth_common OAuth module : http://drupal.org/project/oauth
2-legged OAuthAdministrators of Google Apps Premier and Education editions can also use a special type of OAuth, called 2-legged OAuth. Unlike standard OAuth (also called 3-legged OAuth), 2-legged OAuth does not require an authorization token for the user's account to be accessed. Instead the credentials for a Google Apps administrator are stored on the site. Then for each user, we just need their Google Apps email address. We don't even need their password. The site uses the administrator's credentials to authenticate with Google. Unlike standard OAuth, the user is not actually authenticated with Google, but the site is able to act on their behalf to pull in or update their account data. Useful links: 2-legged OAuth documentation : http://code.google.com/apis/accounts/docs/OAuth.html Google Auth (gauth) module : http://drupal.org/project/gauth
AuthSubLike OAuth, AuthSub is a proxy authentication service. The end user experience is pretty much the same as with OAuth, so I won't go into too much detail here. It was developed by Google, before the OAuth standard was released, and OAuth is now the preferred solution. The Google Authentication module, google_auth (note underscore), provides AuthSub authentication and is available for Drupal 6. Useful links: Google AuthSub documentation : http://code.google.com/apis/accounts/docs/AuthSub.html Differences between OAuth and AuthSub : http://code.google.com/apis/gdata/articles/oauth.html Google Authentication module : http://drupal.org/project/google_auth
ClientLoginAn alternative to OAuth and AuthSub is the ClientLogin authentication method. It is the only authentication method which works with Google's Provisioning API which can be used to create and edit accounts, and other account operations. For web applications, OAuth is recommended over ClientLogin as it's not as secure. This is because the user's Google Apps credentials need to be stored in the application. Useful links: Google ClientLogin documentation : http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html
SAMLSecurity Assertion Markup Language (SAML) is an XML standard that allows secure web domains to exchange user authentication and authorization data. This allows users to log into Google Apps directly, but authentication is done against the Drupal database. It's best described by the following two scenarios: Scenario 1: user logs into Drupal first:
- user goes to the Drupal site
- user enters Drupal credentials
- user not logged into Google Apps
- user goes to Google Apps site
- Google Apps redirects to Drupal site for authentication, but as user already logged in this step should be invisible
- user redirected back to Google Apps and can access their account info.
- user goes to the Google Apps site
- user redirected to Drupal site where they enter their credentials
- user redirected back to Google Apps and can access their account info.
- user decides to go to Drupal site, but should be already logged in.