Ready to get started?Download WordPress

Plugin Directory


An authentication framework that handles authorization with external web services.


  • Enhancement BREAKING: Change the way the keyring_admin_url filter is applied so that it's already got all the parameters etc added to it by the time the filter happens. Makes that filter much more flexible. You probably need to add $params to your filter function, and the add_query_arg() those params onto whatever URL you're returning.
  • Bugfix WARNING: Change the filters in get_credentials() to keyring_service_credentials, since keyring_credentials is in use, and slightly different
  • Enhancement: Allow the token store to be filtered, for divergent implementations on a single installation, props Jamie P
  • Enhancement: Allow filtering of request scope for OAuth1 services
  • Enhancement: Add connection-testing to the default admin UI for most services
  • Enhancement: Abstract out prepare_request() for OAuth1 service
  • Bugfix: Use the correct parameters for filtering results in SingleStore, props Milan D
  • Bugfix: Request correct permissions for LinkedIn, using the new filter
  • Bugfix: Get Google Contacts working properly. Props Simon W for spotting 2 errors.
  • Bugfix: Update authorize/authenticate URL for LinkedIn. Should move entire service to OAuth2 ideally
  • Bugfix: Don't restrict the 'state' parameter to being an int only (per OAuth2 spec), props Jamie P
  • Bugfix: Ensure to always filter the return value (even if false) from get_credentials(), props Jamie P
  • Bugfix: Fix the Moves service so that it can get past the auth flow again (new restriction on Redirect URIs)
  • Enhancement: Update the Facebook config instructions to match their UI changes
  • Bugfix: Remove unnecessary %s from Google instructions


  • Remove example OAuth application included within that library. Unnecessary and contains an XSS vulnerability.


  • Enhancement: Added Moves as a service
  • Bugfix: OAuth2 services were having querystring parameters stripped during POST requests. No longer doing that.
  • Bugfix: typo in profile request for RunKeeper service


  • BREAKING: Depending on where you were loading Keyring, the new filtering on 'keyring_admin_url' might require some changes on your end
  • BREAKING: Credentials for Services are handled slightly differently now (especially if you were using constants), so confirm they are loading before rolling out this update
  • Introduce concept of "is_configured()" to Services so that you can test if a service has been set up correctly before attempting to use it
  • Change get_credentials() so that it checks for a service-specific _get_credentials(), then generic constants, then in the DB
  • get_credentials() is now always called when initiating a service, to load its details from the most appropriate place available
  • In the default Admin UI, split services out to show which ones are configured/ready to connect and which ones need attention
  • Add extensive helper instructions to the configuration pages for apps with links to where you need to go to register etc
  • Update Twitter requests to 1.1 endpoint, ready for them retiring v1
  • Keep track of request response codes (Props justinshreve)
  • Start adding some additional information to Keyring::error() for better handling


  • Added Service definitions for Instapaper (paid account required) and TripIt
  • Improved access and request token filters
  • Specify request token in token query for custom storage engines that don't use globally-unique ids
  • Pass request token to verification of access tokens
  • Make Keyring::init() be callable after init (it will trigger everything it needs automatically)
  • Changed admin UI to use ListTable


  • Huge overhaul of codebase to support Request tokens, passing reference via 'state' param (BREAKING)
  • Shuffled around how tokens are managed so that more places explicitly expect a Keyring_Token (BREAKING)
  • Force serialization of stored tokens when using SingleStore (BREAKING)
  • Big cleanup/changes to how token storage works, and how Keyring_Store looks (BREAKING)
  • Standardized handling of meta with tokens (BREAKING)
  • Added RunKeeper Service definition
  • Added a bunch of filters and tried to standardize them everywhere
  • Improve some nonce checking
  • Improved debugging information for different service types
  • Introduced app_ids for services that support/require them
  • Removed all wp_die()s in favor of Keyring::error(); exit;
  • Introduced test_connection() methods, props pento
  • Whitespace/alignment cleanup
  • Switched to using stable-tagging system in the WP.org repo


  • First tagged version

Requires: 3.3 or higher
Compatible up to: 3.9.1
Last Updated: 2014-7-5
Downloads: 3,578


5 stars
5 out of 5 stars


Got something to say? Need help?


Not enough data

1 person says it works.
0 people say it's broken.

100,1,1 100,1,1
100,1,1 100,1,1
100,1,1 100,2,2 100,1,1 100,1,1
100,1,1 100,1,1 100,1,1 100,1,1 100,3,3
100,1,1 100,1,1
100,2,2 100,1,1
100,1,1 100,1,1