NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #676 most downloaded on PyPI
OAuth 2.0 client library
Last release 8 years ago
no release in 18 months
Ships unpredictably
gaps range from 2 weeks to 1.2 years
Nearly every release is documented
notes for 34 of 35 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
44 releases · first in 2011
Note : oauth2client is deprecated. No more features will be added to the libraries and the core team is turning down support. We recommend you use goo…
Note: oauth2client is deprecated. No more features will be added to the
libraries and the core team is turning down support. We recommend you use
google-auth and oauthlib.
Note : oauth2client is deprecated. No more features will be added to the libraries and the core team is turning down support. We recommend you use goo…
Note: oauth2client is deprecated. No more features will be added to the
libraries and the core team is turning down support. We recommend you use
google-auth and oauthlib.
Bug fixes:
One column per quarter.
Note : oauth2client is deprecated. No more features will be added to the libraries and the core team is turning down support. We recommend you use goo…
Note: oauth2client is deprecated. No more features will be added to the
libraries and the core team is turning down support. We recommend you use
google-auth and oauthlib.
New features:
Note : oauth2client is now deprecated. No more features will be added to the libraries and the core team is turning down support. We recommend you use…
Note: oauth2client is now deprecated. No more features will be added to the
libraries and the core team is turning down support. We recommend you use
google-auth and oauthlib.
New features:
Bug fixes:
( #569 ) Merge util.py and _helpers.py. ( #579 ) Remove httplib2 imports from non-transport modules. ( #577 ) Breaking changes:
New features:
New Django samples. (#636)
Add support for RFC7636 PKCE. (#588)
Release as a universal wheel. (#665)
Bug fixes:
Fix django authorization redirect by correctly checking validity of credentials. (#651)
Correct query loss when using parse_qsl to dict. (#622)
Switch django models from pickle to jsonpickle. (#614)
Support new MIDDLEWARE Django 1.10 setting. (#623)
Remove usage of os.environ.setdefault. (#621)
Handle missing storage files correctly. (#576)
Try to revoke token with POST when getting a 405. (#662)
Internal changes:
Use transport module for GCE environment check. (#612)
Remove author lines and add contributors.md. (#627)
Clean up imports. (#625)
Use transport.request in tests. (#607)
Drop unittest2 dependency (#610)
Remove backslash line continuations. (#608)
Use transport helpers in system tests. (#606)
Clean up usage of HTTP mocks in tests. (#605)
Remove all uses of MagicMock. (#598)
Migrate test runner to pytest. (#569)
Merge util.py and _helpers.py. (#579)
Remove httplib2 imports from non-transport modules. (#577)
Breaking changes:
Drop Python 3.3 support. (#603)
Drop Python 2.6 support. (#590)
Remove multistore_file. (#589)
Add warnings when using deprecated approval_prompt='force' .
token_expiry for GCE credentials. (#473)scopes for GCE credentials. (#524)oauth2client.contrib.sqlalchemy, a SQLAlchemy-based credential store. (#527)oauth2client.contrib.multiprocess_storage. This supersedes the functionality in oauth2client.contrib.multistore_file. (#504)oauth2client.contrib.django_util. Add DjangoORMStorage, remove FlowField. (#546)approval_prompt='force'. (#572)oauth2client.contrib.multistore_file. (#574)oauth2client.contrib.appengine. (#533)NOTE: The next major release of oauth2client (v4.0.0) will remove the oauth2client.contrib.multistore_file module.
Added support to override token_uri and revoke_uri in oauth2client.service_account.ServiceAccountCredentials .
token_uri and revoke_uri in oauth2client.service_account.ServiceAccountCredentials. (#510)oauth2client.contrib.multistore_file now handles OSError in addition to IOError because Windows may raise OSError where other platforms will raise IOError.oauth2client.contrib.django_util and oauth2client.contrib.django_orm have been updated to support Django 1.8 - 1.10. Versions of Django below 1.8 will not work with these modules.Add basic support for JWT access credentials.
oauth2client.client.DeviceFlowInfo to use UTC instead of the system timezone when calculating code expiration.Fix issue where flask_util.UserOAuth2.required would accept expired credentials ( #452 ).
Making scopes optional on Google Compute Engine AppAssertionCredentials and adding a warning that GCE won't honor scopes
AppAssertionCredentialssign_blob() to service account types and aservice_account_email property. (#421)ServiceAccountCredentials.from_p12_keyfile when pyOpenSSL isoauth2client.tools.run_flow()oauth2client.util.dict_to_tuple_key() from publicoauth2client.contrib._appengine_ndb helper moduleoauth2client.contrib.appengine and moving most code thatndb library into the helper (#434)django_util sample code (#438)Fix Google Compute Engine breakage (#411, breakage introduced in #387) that made it impossible to obtain access tokens
ServiceAccountCredentials.from_p12_keyfile_buffer()
to allow passing a file-like object in addition to the factory
constructor that uses a filename directly (#413)ServiceAccountCredentials.create_delegated()
to allow upgrading a credential to one that acts on behalf
of a given subject (#420)Avoid OAuth2Credentials id_token going out of sync after a token refresh
id_token going out of sync after a token
refresh (#337)contrib sub-package code not considered a core part of
the library (#346, #353, #370, #375, #376, #382)token_expiry to devshell credentials (#372)Storage locking into a base class (#379)to_json and from_json methods to all Credentials
classes (#385)ServiceAccountCredentials
classes (#395, #396, #397, #398, #400)ServiceAccountCredentials:For JSON keys, you can create a credential via
from oauth2client.service_account import ServiceAccountCredentials
credentials = ServiceAccountCredentials.from_json_keyfile_name(
key_file_name, scopes=[...])
You can still rely on
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
returning these credentials when you set the GOOGLE_APPLICATION_CREDENTIALS
environment variable.
For .p12 keys, construct via
credentials = ServiceAccountCredentials.from_p12_keyfile(
service_account_email, key_file_name, scopes=[...])
though we urge you to use JSON keys (rather than .p12 keys) if you can.
This is equivalent to the previous method
# PRE-oauth2client 2.0.0 EXAMPLE CODE!
from oauth2client.client import SignedJwtAssertionCredentials
with open(key_file_name, 'rb') as key_file:
private_key = key_file.read()
credentials = SignedJwtAssertionCredentials(
service_account_email, private_key, scope=[...])
Add access token refresh error class that includes HTTP status
Fix bad indent in tools.run_flow() (#301, bug was introduced when switching from 2 space indents to 4)
tools.run_flow() (#301, bug was
introduced when switching from 2 space indents to 4)Removing old_run module. Was deprecated July 2, 2013.
bytes / str handling in crypto
methods. (#203, #250, #272)webapp with webapp2 in oauth2client.appengine (#217)state parameter to
step1_get_authorize_url. (#219 and #222)flask_util module that provides a Flask extension to aid
with using OAuth2 web server flow. This provides the same functionality
as the appengine.webapp2 OAuth2Decorator, but will work with any Flask
application regardless of hosting environment. (#226, #273)old_run module. Was deprecated July 2, 2013. (#285)Fix OS X flaky test failure (#189).
@util.positional from wrapped request in Credentials.authorize()
(#196, #197).>= (#200, #204).Authorization header (#206).Better environment detection with Managed VMs.
Update the OpenSSL check to be less strict about finding crypto.py in the OpenSSL directory.
OpenSSL check to be less strict about finding crypto.py in
the OpenSSL directory.tox updates for new environment handling in tox.Ensure that the ADC fails if we try to *write* the well-known file to a directory that doesn't exist, but not if we try to *read* from one.
Better handling of body during token refresh when body is a stream.
body during token refresh when body is a stream.openSSL import.well_known_file.well_known_file.Add support for Google Developer Shell credentials.
NO_GCE_CHECK for skipping GCE detection.InvalidClientSecretsError.run_flow.Add utility function to convert PKCS12 key to PEM.
Set a shorter timeout for an Application Default Credentials issue on some networks. (#93, #101)
Fix a bug in bytes/string encoding of headers.
Big thanks to @dhermes for spotting and fixing a mess in our test setup.
Big thanks to @dhermes for spotting and fixing a mess in our test setup.
Fix a serious issue with tests not being run. (#86, #87, #89)
Start credentials cleanup for single 2LO/3LO call. (#83, #84)
Clean up stack traces when re-raising in some places. (#79)
Clean up doc building. (#81, #82)
Fixed minimum version for six dependency. (#75)
Several small bugfixes related to six/py3 support.
six/py3 support.Fix a critical bug on import in oauth2client.tools.
oauth2client.tools.Merge python3 branch! Massive thanks due to @pferate and @methane for doing the heavy lifting.
Merge python3 branch! Massive thanks due to @pferate and @methane for doing the heavy lifting.
Make oauth2client.tools import gracefully if argparse isn't present.
Change flow.step2_exchange to preserve the raw id_token in the
token_response field.
Quick bugfix for an issue with dict-like arguments to flow.step2_exchange, which is common in some environments (such as GAE).
flow.step2_exchange,
which is common in some environments (such as GAE).Quick bugfix for bad error handling in from_json.
Added support for the Google Application Default Credentials for more information (thanks @orestica).
Added support for the Google Application Default Credentials for more information (thanks @orestica).
Added support for OAuth2 for devices (#3, thanks @sde-melo).
The minimum required Python version is now 2.6.
The anyjson submodule has been removed.
Better exception handling around missing crypto libraries (#56).
Improve error messages in AccessTokenRefreshError (#53, thanks
@erickoledadevrel).
Drop uritemplate as a dependency.
Handle X509 certs with PyCrypto (#51, thanks @liujin-google).
Handle additional failure types on OSX (#32, thanks @simoncadman).
Better unicode handling with PKCS12 passwords (#31, thanks @jterrace).
Better retry handling with bad server replies on refresh (#29, thanks @kaste).
Better logging for missing refresh_token in server replies (#21).
Support login_hint (#18, thanks @jay0lee).
Better overwrite options in django_orm.Storage. (#2, thanks @lraccomando).
The use of the gflags library is now deprecated, and is no longer a dependency. If you are still using the oauth2client.tools.run() function then incl…
The use of the gflags library is now deprecated, and is no longer a
dependency. If you are still using the oauth2client.tools.run() function
then include python-gflags as a dependency of your application or switch to
oauth2client.tools.run_flow.
Samples have been updated to use the new apiclient.sample_tools, and no
longer use gflags.
Added support for the experimental Object Change Notification, as found in the Cloud Storage API.
The oauth2client App Engine decorators are now threadsafe.
Use the following redirects feature of httplib2 where it returns the ultimate URL after a series of redirects to avoid multiple hops for every resumable media upload request.
Updated AdSense Management API samples to V1.3
Add option to automatically retry requests.
Ability to list registered keys in multistore_file.
User-agent must contain (gzip).
The method parameter for httplib2 is not positional. This would cause
spurious warnings in the logging.
Making OAuth2Decorator more extensible. Fixes Issue 256.
Update AdExchange Buyer API examples to version v1.2.
Add PEM support to SignedJWTAssertionCredentials (used to only support PKCS12 formatted keys). Note that if you use PEM formatted keys you can use PyC
Add PEM support to SignedJWTAssertionCredentials (used to only support
PKCS12 formatted keys). Note that if you use PEM formatted keys you can use
PyCrypto 2.6 or later instead of OpenSSL.
Allow deserialized discovery docs to be passed to build_from_document().
Make ResumableUploadError derive from HttpError.
Many changes to move all the closures in apiclient.discovery into real
classes and objects.
Make from_json behavior inheritable.
Expose the full token response in OAuth2Client and OAuth2Decorator.
Handle reasons that are None.
Added support for NDB based storing of oauth2client objects.
Update grant_type for AssertionCredentials.
Adding a .revoke() to Credentials. Closes issue 98.
Modify oauth2client.multistore_file to store and retrieve credentials
using an arbitrary key.
Don't accept 403 challenges by default for auth challenges.
Set httplib2.RETRIES to 1.
Consolidate handling of scopes.
Upgrade to httplib2 version 0.8.
Allow setting the response_type in OAuth2WebServerFlow.
Ensure that dataWrapper feature is checked before using the data value.
HMAC verification does not use a constant time algorithm.
Changes to the code for running tests and building releases.
In samples and oauth2 decorator, escape untrusted content before displaying it.
keyring-based Storage.client_secrets JSON file backed by a cache.additionalProperties when printing schema'd objects.Parameter values of None should be treated as missing. Fixes issue 144.
client_secrets.json. Fixes issue 156.locked_file.py understand win32file primitives for better
awesomeness.Documentation for the library has switched to epydoc
MediaUpload to include io.Base and also fix some bugs.credentials_from_code and credentials_from_clientsecrets_and_code.StorageByKeyName.None handling in Django fields.
Fixes issue 128.README files.Better handling for requests that don't require a body.
.delete() method.apiclient.anyjson has moved to oauth2client.anyjson.taskqueue().lease() used to require a parameter
named body. In this new release only methods that really need to send a
body require a body parameter, and so you may get errors about an unknown
body parameter in your call. The solution is to remove the unneeded
body={} parameter.Better handling for APIs that return something other than JSON.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →