unstale

pypi / oauthlib

oauthlib

What changed in oauthlib 3 to 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-26.

16 breaking2 security1 deprecations8 new APIs and options1 behavior and defaults4 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.2.7 on npm

oauthlib 45 changes

Breaking changes 2

Security 2

New APIs and options 1

oauthlib 327 changes

Breaking changes 14

  • The status code for access_denied changed from 401 to 400.

    3.0.0release notes

  • The behavior of confirm_redirect_uri changed.

    3.0.0release notes

  • The status code for consent_required changed from 401 to 400.

    3.0.0release notes

  • expires no longer overrides expires_in.

    3.0.0release notes

  • expires_in in the Implicit flow is now an integer.

    3.0.0release notes

  • The behavior of get_default_redirect_uri changed.

    3.0.0release notes

  • invalid_client is now a FatalError.

    3.0.0release notes

  • The status code for invalid_grant changed from 401 to 400.

    3.0.0release notes

  • The status code for invalid_scope changed from 401 to 400.

    3.0.0release notes

  • The status code for login_required changed from 401 to 400.

    3.0.0release notes

  • parse_request_uri_response is now required.

    3.0.0release notes

  • Request attributes are no longer overridden by HTTP Headers.

    3.0.0release notes

  • The status code for unauthorized_client changed from 401 to 400.

    3.0.0release notes

  • A 401 response must include the WWW-Authenticate HTTP Header.

    3.0.0release notes

Deprecations 1

  • Passing client_id to WebApplicationClient.prepare_request_body emits a DeprecationWarning; use the already configured self.client_id instead.

    3.0.0release notes

New APIs and options 7

  • Adds request to confirm_redirect_uri.

    3.0.0release notes

  • Adds HMAC-SHA256 support for the OAuth1.0 Client.

    3.0.0release notes

  • WebApplicationClient.prepare_request_body adds the include_client_id keyword argument to control whether client_id is sent; it defaults to included.

    3.0.0release notes

  • Adds OpenID Connect Core support to the OAuth2.0 Provider.

    3.0.0release notes

  • Adds RFC7636 PKCE support to the OAuth2.0 Provider.

    3.0.0release notes

  • Adds RFC7662 Introspect support to the OAuth2.0 Provider.

    3.0.0release notes

  • Adds RFC8414 OAuth2.0 Authorization Server Metadata support to the OAuth2.0 Provider.

    3.0.0release notes

Behavior and default changes 1

  • pytest is set as the default unittest framework.

    3.0.0release notes

Fixes and other changes 4

  • Empty scopes no longer raise exceptions for implicit and authorization_code.

    3.0.0release notes

  • prepare_token_request supports sending an empty string for client_id.

    3.0.0release notes

  • Adds support for Python 3.7.

    3.0.0release notes

  • $ and ' are allowed to be unencoded in query strings.

    3.0.0release notes