Tuesday, March 20, 2012
By Justin Smith, Product Manager
Starting today, Google supports Service Accounts, which provide certificate-based authentication for server-to-server interactions. This means, for example, that a request from a web application to Google Cloud Storage can be authenticated via a certificate instead of a shared key. Certificates offer better security properties than shared keys and passwords, largely because they are not human-readable or guessable.
Service accounts are currently supported by the following Google developer services:
- Google Cloud Storage
- Google Prediction API
- Google URL Shortener
- Google OAuth 2.0 Authorization Server
- Google APIs Console
- Google APIs Client Libraries for Python, Java, and PHP
This feature is implemented as an OAuth 2.0 flow and is compliant with draft 25 of the OAuth 2.0 specification. An application implements the following steps to authenticate with a Service Account:
- Generate a JSON structure.
- Sign the JSON structure with a private key, and encode it as a JSON Web Token (JWT).
- Send the JWT to Google’s OAuth 2.0 Authorization Server in exchange for an access token.
- Send the access token to Google Cloud Storage or the Google Prediction API.
If you’re a Google App Engine developer, all this might sound similar to what is described in these articles: App Engine & Storage, App Engine & Prediction. Service Accounts generalize this App Engine capability by making it available to other server-side platforms. When using another server-side platform, you can create a Service Account through the Google APIs Console. See the Google APIs Console documentation for more information on creating a Service Account.
As always, we welcome and appreciate feedback. Please post any questions or comments to the OAuth 2.0 Google group.
Justin Smith is a Google Product Manager and works on authentication and authorization technologies. He enjoys woodworking, cycling, country music, and the company of his wife and newborn daughter (not in that order).
Posted by Scott Knaster, Editor