Changelog¶
Here you can see the full list of changes between each Authlib release.
Version 1.9.1 — 2026-10-14¶
Breaking changes¶
The RFC 7592 client configuration endpoint calls
check_client()on the registration access token. Tokens must implementTokenMixin.check_client.
Security¶
authlib.joserejects empty HMAC keys with aValueError. An empty key used to let anyone forge HS256, HS384 and HS512 signatures. The minimumjoserfcversion is now 1.6.8, which has the same check. GHSA-8m4g-j4wp-wgcgThe RFC 7592 client configuration endpoint rejects registration access tokens issued to another client, with an
access_deniederror. A client could read, update or delete the registration of any other client. GHSA-c73q-w75p-j82v
Version 1.9.0¶
Released on Oct 14, 2026
Breaking change: ID Tokens with
nonce_supported=falseno longer bypass validation of the nonce saved by the client. Missing or mismatched nonces are rejected in both synchronous and asynchronous integrations. Provider compatibility exceptions must be explicitly configured by the application, rather than enabled by an ID Token claim. pull request #949Enforce JAR
require_signed_request_objectindependently of the signing algorithm configuration. An explicit algorithm list or a customizedget_request_object_signing_algorithms()cannot allowalg=nonewhen either the server or the client requires signed request objects. pull request #949Breaking change: JAR
request_uriis validated before retrieval and rejected by default. Applications must implementvalidate_request_uri()with an explicit secure retrieval policy. See RFC9101: The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR) for retrieval safeguards. pull request #949Add
authlib.oidc.core.OpenIDJWTAuthenticationRequestto enforce OIDCrequire_request_uri_registrationseparately from the generic JAR retrieval policy. Registered URIs must also pass the application’s validation policy. See OpenID request objects. pull request #949Reject PEM and SSH key material used as symmetric JOSE keys, including PEM keys with leading whitespace, comments, or a byte-order mark and keys supplied through an oct JWK or an
OctKeyinstance. pull request #945Use the client’s allowed scope when validating and issuing OIDC implicit and hybrid responses. Clients without the
openidscope can no longer obtain an ID Token by including it in the raw request, and custom token generators receive only the allowed scope. pull request #945Breaking change:
JWTBearerGrant.get_audiences()must return a non-empty list of audience identifiers for the authorization server. Assertions are rejected withinvalid_grantwhen audiences are not configured, instead of issuing a deprecation warning and skipping audience value validation. pull request #945Require client authentication for ID-JAG token requests and bind the assertion’s
client_idto the authenticated client. Missing or invalid credentials and client mismatches no longer allow token issuance. Rejected authentication and mismatches do not consume the assertion’s replay identifier. pull request #955Add support for the Identity Assertion JWT Authorization Grant (ID-JAG), a draft extension to RFC 7523 for cross-application access using identity assertions issued by an external enterprise IdP. See ID-JAG: Identity Assertion JWT Authorization Grant for details. pull request #898
The async OpenID Connect client returns
Nonefromparse_id_token()when the token has noid_token, like the sync client. It used to raise aKeyError. pull request #924OAuth 2 and assertion clients raise the HTTP error of the token endpoint response when its body is not a JSON object, such as a plain-text 429 page from a gateway. They used to raise a
JSONDecodeErroror aTypeError. A success response with such a body raises aValueError. issue #928 pull request #929JsonWebSignature.deserialize_json()rejects a JWS JSON Serialization with an emptysignatureslist. It used to accept it as valid. pull request #938JWTClaims.validate()rejects booleanexp,nbfandiatvalues with anInvalidClaimError. issue #641 pull request #942OAuth 1.0 clients send each OAuth parameter once when the signature is placed in the query string or the form body. Duplicated parameters used to produce an invalid signature. issue #542 pull request #943
Version 1.8.0¶
Released on Aug 30, 2026
Breaking change:
authlib.integrations.httpx_clientis now powered byhttpx2instead ofhttpx. Installhttpx2to keep using this integration; the public import path and class names are unchanged. Whenhttpx2is not installed, the integration falls back tohttpxand emits anAuthlibDeprecationWarning. This fallback will be removed in a future release. issue #904Breaking change: the client metadata
id_token_signed_response_algnow takes precedence overget_jwt_config()["alg"]when signing OIDCid_token, in line with OpenID Connect Registration 1.0 Section 2.get_jwt_config()["alg"]is now used as a server-wide default when the client did not configure an algorithm. Overrideget_client_algorithm(client)if you need the previous behaviour. issue #806Fix
is_secure_transport()accepting cleartext URIs whoseuserinfocomponent looks like a loopback host, such ashttp://localhost:80@attacker.test/cb. The loopback exemption is now matched on the parsed host, and no longer requires an explicit port.Reject URIs with a
userinfocomponent during client and server metadata validation, as inhttps://client.test@attacker.test/cb. URIs thaturlparserefuses to parse, such ashttp://[not-an-ip]/, are also rejected instead of raising an unhandledValueError.Cast the
subclaim to a string in the RFC 9068 and RFC 7523JWTBearerTokenGenerator, as required by RFC 7519 Section 4.1.2.joserfc1.7.3 started validating this claim and rejected the previously emitted non-string values (e.g. an integerget_user_id()). issue #910 pull request #911Require
joserfc>=1.6.1andcryptography>=45.0.1. The RFC 9068amrvalidation usesInvalidClaimError’sdescriptionargument, added injoserfc1.6.1.Declare lower bounds for the optional integration dependencies and test them in CI against their minimum versions with uv’s
lowest-directresolution.The token endpoint answers malformed RFC 7523 assertions with an
invalid_clientorinvalid_granterror instead of raising an unhandled exception.JWTBearerGrant.resolve_issuer_client()may returnNonefor an unknown issuer.The RFC 9068
JWTBearerTokenValidatoranswers with aninvalid_tokenerror for anyJoseErrorraised while decoding an access token, instead of onlyDecodeError. An unknownkidused to raise an unhandledInvalidKeyIdError. pull request #891Add a
leewayparameter to the RFC 7523JWTBearerTokenValidator, which used to be hardcoded to 60 seconds. pull request #903sign_jwt_bearer_assertion()generates a defaultjticlaim when the caller did not provide one, as RFC 7523 §3 recommends against replay attacks. This matches whatOAuth2Sessionalready did for client assertions. pull request #897Add optional
client_idparameter toAssertionClient(and itsAssertionSession/ httpx wrappers) so it can be sent in the token endpoint request body per RFC 7521 §4.1 and RFC 6749 §3.2.1. pull request #476The OpenID Connect client no longer rejects an
id_tokenwhose JWS header carries unregistered parameters. issue #902Omit the
nonceandauth_timeclaims from theid_tokeninstead of emitting them with anullvalue. issue #921DeviceAuthorizationEndpointsaves the device credential with the authenticated client id. It used to readrequest.payload.client_id, which isNonewhen the client authenticates withclient_secret_basic. issue #798 pull request #908Fix the OAuth 1.0a
InsecureTransportErrordescription telling users that OAuth 2 must use HTTPS. pull request #919
Version 1.7.2¶
Released on May 6, 2026
Fix
PrivateKeyJWTrejectingECKeyprivate keys (e.g. forES256). The client private key is no longer forcibly imported as anRSAKey;joserfc’s key auto-detection is used instead. pull request #852Allow
ClientSecretJWTandPrivateKeyJWTto sign client assertions with non-recommended algorithms (e.g.RS384) when explicitly set via thealgparameter. issue #883Validate BCP 47 language tags in
ui_locales_supported,claims_locales_supportedandUserInfo.locale. pull request #873
Version 1.7.1¶
Released on May 4, 2026
Fix
AuthlibDeprecationWarningbeing emitted on import when using integrations that do not useauthlib.josedirectly. issue #880Fix redirecting to unvalidated
redirect_urionInvalidScopeErrorinOpenIDImplicitGrantandOpenIDHybridGrant.
Version 1.7.0¶
Released on Apr 18, 2026
Add support for OpenID Connect RP-Initiated Logout 1.0. See OpenID Connect RP-Initiated Logout 1.0 for details. issue #500
Per RFC 6749 Section 3.3, the
scopeparameter is now optional at both authorization and token endpoints.client.get_allowed_scope()is called to determine the default scope when omitted. issue #845Stop support for Python 3.9, start support Python 3.14. pull request #850
Allow
AuthorizationServerMetadata.validate()to compose with RFC extension classes.Fix
expires_at=0being incorrectly treated asNone. issue #530Allow
ResourceProtectordecorator to be used without parentheses. issue #604Implement RFC9700 PKCE downgrade countermeasure.
Set
User-Agentheader when fetching server metadata and JWKs. issue #704RFC7523 accepts the issuer URL as a valid audience. issue #730
Fix
InvalidTokenErrorextra attributes being wrapped instead of passed as individual key=value pairs in theWWW-Authenticateheader. pull request #872
Upgrade Guide: joserfc migration.
Version 1.6.11¶
Released on Apr 16, 2026
Fix CSRF vulnerability in the Starlette OAuth client when a
cacheis configured.
Version 1.6.10¶
Released on Apr 13, 2026
Fix redirecting to unvalidated
redirect_urionUnsupportedResponseTypeError.
Version 1.6.9¶
Released on Mar 2, 2026
Not using header’s
jwkautomatically.Add
ES256Kinto default jwt algorithms.Remove deprecated algorithm from default registry.
Generate random
cekwhenceklength doesn’t match.
Version 1.6.8¶
Released on Feb 17, 2026
Add
EdDSAto defaultjwtinstance.
Version 1.6.7¶
Released on Feb 6, 2026
Set supported algorithms for the default
jwtinstance.
Version 1.6.6¶
Released on Jan 9, 2026
get_jwt_configtakes aclientparameter, pull request #844.Fix incorrect signature when
Content-Typeis x-www-form-urlencoded for OAuth 1.0 Client, pull request #778.Use
expires_ininOAuth2Tokenwhenexpires_atis unparsable, pull request #842.Always track
statein session for OAuth client integrations.
Version 1.6.5¶
Released on Oct 2, 2025
RFC7591
generate_client_infoandgenerate_client_secrettake arequestparameter.Add size limitation when decode JWS/JWE to prevent DoS.
Add size limitation for
DEFJWE zip algorithm.
Version 1.6.4¶
Released on Sep 17, 2025
Fix
InsecureTransportErrorerror raising. issue #795Fix
response_mode=form_postwith Starlette client. issue #793Validate
critheader value, reject unprotected header incritheader.
Version 1.6.3¶
Released on Aug 26, 2025
OIDC
id_tokenare signed according toid_token_signed_response_algclient metadata. issue #755
Version 1.6.2¶
Released on Aug 23, 2025
Temporarily restore
OAuth2Requestbodyparameter. issue #781 pull request #791Allow
127.0.0.1in insecure transport mode. pull request #788Raise
MissingCodeExceptionwhen thecodeparameter is missing. issue #793 pull request #794Fix
id_tokengeneration with EdDSA algs. issue #799 pull request #800
Version 1.6.1¶
Released on Jul 20, 2025
Filter key set with additional “alg” and “use” parameters.
Restore and deprecate
OAuth2Requestbodyparameter. issue #781
Version 1.6.0¶
Released on May 22, 2025
Fix issue when RFC9207 is enabled and the authorization endpoint response is not a redirection. pull request #733
Fix missing
stateparameter in authorization error responses. issue #525Support for the
noneJWS algorithm.Fix
response_typesstrict order during dynamic client registration. issue #760Implement RFC9101 The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR). issue #723
OIDC
UserInfo endpointsupport. issue #459
Breaking changes:
Support for
acrandamrclaims inid_token. issue #734 TheOAuth2AuthorizationCodeMixinmust have a migration to support the new fields.
Version 1.5.2¶
Released on Apr 1, 2025
Forbid fragments in
redirect_uris. issue #714Fix invalid characters in
error_description. issue #720Add
claims_clsparameter for client’sparse_id_tokenmethod. issue #725
Version 1.5.1¶
Released on Feb 28, 2025
Fix RFC9207
issparameter. pull request #715
Version 1.5.0¶
Released on Feb 25, 2025
Fix token introspection auth method for clients. pull request #662
Optional
typclaim in JWT tokens. pull request #696JWT validation leeway. pull request #689
Implement server-side RFC9207. issue #700 pull request #701
generate_id_tokencan take akidparameter. pull request #702More detailed
InvalidClientError. pull request #706OpenID Connect Dynamic Client Registration implementation. pull request #707
Version 1.4.1¶
Released on Jan 28, 2025
Improve garbage collection on OAuth clients. issue #698
Fix client parameters for httpx. issue #694
Version 1.4.0¶
Released on Dec 20, 2024
Fix
id_tokendecoding when kid is null. pull request #659Support for Python 3.13. pull request #682
Force login if the
promptparameter value islogin. pull request #637Support for httpx 0.28, pull request #695
Breaking changes:
Stop support for Python 3.8. pull request #682
Version 1.3.2¶
Released on Aug 30 2024
Prevent ever-growing session size for OAuth clients.
Revert
quoteclient id and secret.unquotebasic auth header for authorization server.
Version 1.3.1¶
Released on June 4, 2024
Prevent
OctKeyto import ssh and PEM strings.
Version 1.3.0¶
Released on Dec 17, 2023
Restore
AuthorizationServer.create_authorization_responsebehavior, via pull request #558Include
leewayinvalidate_iat()for JWT, via pull request #565Fix
encode_client_secret_basic, via pull request #594Use single key in JWK if JWS does not specify
kid, via pull request #596Fix error when RFC9068 JWS has no scope field, via pull request #598
Get werkzeug version using importlib, via pull request #591
New features:
RFC9068 implementation, via pull request #586, by @azmeuk.
Breaking changes:
End support for python 3.7
Version 1.2.1¶
Released on Jun 25, 2023
Apply headers in
ClientSecretJWT.signmethod, via pull request #552Allow falsy but non-None grant uri params, via pull request #544
Fixed
authorize_redirectfor Starlette v0.26.0, via pull request #533Removed
has_client_secretmethod and documentation, via pull request #513Removed
request_invalidandtoken_revokedremaining occurrences and documentation. pull request #514Fixed RFC7591
grant_typesandresponse_typesdefault values, via pull request #509.Add support for python 3.12, via pull request #590.
Version 1.2.0¶
Released on Dec 6, 2022
Not passing
request.bodytoResourceProtector, via issue #485.Use
flask.ginstead of_app_ctx_stack, via issue #482.Add
headersparameter back toClientSecretJWT, via issue #457.Always passing
realmparameter in OAuth 1 clients, via issue #339.Implemented RFC7592 Dynamic Client Registration Management Protocol, via pull request #505.
Add
default_timeoutfor requestsOAuth2SessionandAssertionSession.Deprecate
jwk.loadsandjwk.dumps
Version 1.1.0¶
Released on Sep 13, 2022
This release contains breaking changes and security fixes.
Allow to pass
claims_optionsto Framework OpenID Connect clients, via pull request #446.Fix
.streamwith context for HTTPX OAuth clients, via pull request #465.Fix Starlette OAuth client for cache store, via pull request #478.
Breaking changes:
Raise
InvalidGrantErrorfor invalid code, redirect_uri and no user errors in OAuth 2.0 server.The default
authlib.jose.jwtwould only work with JSON Web Signature algorithms, if you would like to use JWT with JWE algorithms, please pass the algorithms parameter:jwt = JsonWebToken(['A128KW', 'A128GCM', 'DEF'])
Security fixes: CVE-2022-39175 and CVE-2022-39174, both related to JOSE.
Version 1.0.1¶
Released on Apr 6, 2022
Fix authenticate_none method, via issue #438.
Allow to pass in alternative signing algorithm to RFC7523 authentication methods via pull request #447.
Fix
missing_tokenfor Flask OAuth client, via issue #448.Allow
openidin any place of the scope, via issue #449.Security fix for validating essential value on blank value in JWT, via issue #445.
Version 1.0.0¶
Released on Mar 15, 2022.
We have dropped support for Python 2 in this release. We have removed built-in SQLAlchemy integration.
OAuth Client Changes:
The whole framework client integrations have been restructured, if you are
using the client properly, e.g. oauth.register(...), it would work as
before.
OAuth Provider Changes:
In Flask OAuth 2.0 provider, we have removed the deprecated
OAUTH2_JWT_XXX configuration, instead, developers should define
.get_jwt_config on OpenID extensions and grant types.
SQLAlchemy integrations has been removed from Authlib. Developers should define the database by themselves.
JOSE Changes
JWShas been renamed toJsonWebSignatureJWEhas been renamed toJsonWebEncryptionJWKhas been renamed toJsonWebKeyJWThas been renamed toJsonWebToken
The “Key” model has been re-designed, checkout the JSON Web Key (JWK) for updates.
Added ES256K algorithm for JWS and JWT.
Breaking Changes: find how to solve the deprecate issues via https://git.io/JkY4f
Old Versions¶
Find old changelog at https://github.com/authlib/authlib/releases
Version 0.15.5: Released on Oct 18, 2021
Version 0.15.4: Released on Jul 17, 2021
Version 0.15.3: Released on Jan 15, 2021
Version 0.15.2: Released on Oct 18, 2020
Version 0.15.1: Released on Oct 14, 2020
Version 0.15.0: Released on Oct 10, 2020
Version 0.14.3: Released on May 18, 2020
Version 0.14.2: Released on May 6, 2020
Version 0.14.1: Released on Feb 12, 2020
Version 0.14.0: Released on Feb 11, 2020
Version 0.13.0: Released on Nov 11, 2019
Version 0.12.0: Released on Sep 3, 2019
Version 0.11.0: Released on Apr 6, 2019
Version 0.10.0: Released on Oct 12, 2018
Version 0.9.0: Released on Aug 12, 2018
Version 0.8.0: Released on Jun 17, 2018
Version 0.7.0: Released on Apr 28, 2018
Version 0.6.0: Released on Mar 20, 2018
Version 0.5.1: Released on Feb 11, 2018
Version 0.5.0: Released on Feb 11, 2018
Version 0.4.1: Released on Feb 2, 2018
Version 0.4.0: Released on Jan 31, 2018
Version 0.3.0: Released on Dec 24, 2017
Version 0.2.1: Released on Dec 6, 2017
Version 0.2.0: Released on Nov 25, 2017
Version 0.1.0: Released on Nov 18, 2017