Authlib 1.7.1__tar.gz → 1.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {authlib-1.7.1 → authlib-1.8.0}/Authlib.egg-info/PKG-INFO +41 -41
- {authlib-1.7.1 → authlib-1.8.0}/Authlib.egg-info/SOURCES.txt +2 -0
- authlib-1.8.0/Authlib.egg-info/requires.txt +2 -0
- {authlib-1.7.1 → authlib-1.8.0}/PKG-INFO +41 -41
- {authlib-1.7.1 → authlib-1.8.0}/README.md +38 -38
- authlib-1.8.0/authlib/common/language.py +13 -0
- authlib-1.8.0/authlib/common/security.py +48 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/common/urls.py +11 -2
- {authlib-1.7.1 → authlib-1.8.0}/authlib/consts.py +1 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/async_openid.py +3 -2
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/sync_openid.py +3 -2
- authlib-1.8.0/authlib/integrations/httpx_client/_compat.py +18 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/assertion_client.py +12 -13
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/oauth1_client.py +10 -15
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/oauth2_client.py +16 -17
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/utils.py +7 -2
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/assertion_session.py +2 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/errors.py +1 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7521/client.py +4 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/assertion.py +7 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/auth.py +3 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/client.py +18 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/jwt_bearer.py +26 -3
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/token.py +1 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/validator.py +3 -2
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8414/models.py +11 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/endpoint.py +1 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/token.py +1 -1
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/token_validator.py +1 -2
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/claims.py +7 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/_legacy.py +12 -8
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/code.py +6 -4
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/discovery/models.py +2 -1
- {authlib-1.7.1 → authlib-1.8.0}/pyproject.toml +21 -22
- authlib-1.7.1/Authlib.egg-info/requires.txt +0 -2
- authlib-1.7.1/authlib/common/security.py +0 -21
- {authlib-1.7.1 → authlib-1.8.0}/Authlib.egg-info/dependency_links.txt +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/Authlib.egg-info/top_level.txt +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/LICENSE +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/MANIFEST.in +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/_joserfc_helpers.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/common/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/common/encoding.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/common/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/deprecate.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/async_app.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/framework_integration.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/registry.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/sync_app.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_client/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_client/apps.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_client/integration.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth1/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth1/authorization_server.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth1/nonce.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth1/resource_protector.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/authorization_server.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/endpoints.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/requests.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/resource_protector.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/signals.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_client/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_client/apps.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_client/integration.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth1/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth1/authorization_server.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth1/cache.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth1/resource_protector.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/authorization_server.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/requests.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/resource_protector.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/signals.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/oauth1_session.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/oauth2_session.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/utils.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/sqla_oauth2/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/sqla_oauth2/client_mixin.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/sqla_oauth2/functions.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/sqla_oauth2/tokens_mixins.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/starlette_client/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/starlette_client/apps.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/starlette_client/integration.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/drafts/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/drafts/_jwe_algorithms.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/drafts/_jwe_enc_cryptodome.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/drafts/_jwe_enc_cryptography.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/jwk.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7515/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7515/jws.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7515/models.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7516/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7516/jwe.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7516/models.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/_cryptography_key.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/asymmetric_key.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/base_key.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/jwk.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/key_set.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/ec_key.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/jwe_algs.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/jwe_encs.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/jwe_zips.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/jws_algs.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/oct_key.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/rsa_key.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/util.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7519/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7519/claims.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7519/jwt.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc8037/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc8037/jws_eddsa.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc8037/okp_key.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/util.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/client.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/authorization_server.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/base_server.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/client_auth.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/models.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/parameters.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/resource_protector.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/rsa.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/signature.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/util.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/wrapper.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/auth.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/base.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/claims.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/client.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/authenticate_client.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/authorization_server.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/endpoint.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/authorization_code.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/base.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/client_credentials.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/implicit.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/refresh_token.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/resource_owner_password_credentials.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/hooks.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/models.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/parameters.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/requests.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/resource_protector.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/token_endpoint.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/util.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/wrappers.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/parameters.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/token.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/validator.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7009/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7009/parameters.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7009/revocation.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7521/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7591/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7591/claims.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7591/endpoint.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7591/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7592/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7592/endpoint.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7636/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7636/challenge.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7662/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7662/introspection.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7662/models.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7662/token_validator.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8414/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8414/well_known.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/device_code.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/models.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8693/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/claims.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/introspection.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/revocation.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/authorization_server.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/discovery.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/registration.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9207/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9207/discovery.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9207/parameter.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/errors.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/hybrid.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/implicit.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/util.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/models.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/userinfo.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/util.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/discovery/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/discovery/well_known.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/registration/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/registration/claims.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/rpinitiated/__init__.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/rpinitiated/discovery.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/rpinitiated/end_session.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/rpinitiated/registration.py +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/setup.cfg +0 -0
- {authlib-1.7.1 → authlib-1.8.0}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Authlib
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0
|
|
4
4
|
Summary: The ultimate Python library in building OAuth and OpenID Connect servers and clients.
|
|
5
5
|
Author-email: Hsiaoming Yang <me@lepture.com>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -32,8 +32,8 @@ Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
|
|
32
32
|
Requires-Python: >=3.10
|
|
33
33
|
Description-Content-Type: text/markdown
|
|
34
34
|
License-File: LICENSE
|
|
35
|
-
Requires-Dist: cryptography
|
|
36
|
-
Requires-Dist: joserfc>=1.6.
|
|
35
|
+
Requires-Dist: cryptography>=45.0.1
|
|
36
|
+
Requires-Dist: joserfc>=1.6.1
|
|
37
37
|
Dynamic: license-file
|
|
38
38
|
|
|
39
39
|
<div align="center">
|
|
@@ -83,33 +83,33 @@ Authlib will deprecate `authlib.jose` module, please read:
|
|
|
83
83
|
|
|
84
84
|
Generic, spec-compliant implementation to build clients and providers:
|
|
85
85
|
|
|
86
|
-
- [The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/
|
|
87
|
-
- [RFC5849: The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/specs/rfc5849.html)
|
|
88
|
-
- [The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/
|
|
89
|
-
- [RFC6749: The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/specs/rfc6749.html)
|
|
90
|
-
- [RFC6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://docs.authlib.org/en/stable/specs/rfc6750.html)
|
|
91
|
-
- [RFC7009: OAuth 2.0 Token Revocation](https://docs.authlib.org/en/stable/specs/rfc7009.html)
|
|
92
|
-
- [RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants](https://docs.authlib.org/en/stable/specs/rfc7523.html)
|
|
93
|
-
- [RFC7591: OAuth 2.0 Dynamic Client Registration Protocol](https://docs.authlib.org/en/stable/specs/rfc7591.html)
|
|
94
|
-
- [RFC7592: OAuth 2.0 Dynamic Client Registration Management Protocol](https://docs.authlib.org/en/stable/specs/rfc7592.html)
|
|
95
|
-
- [RFC7636: Proof Key for Code Exchange by OAuth Public Clients](https://docs.authlib.org/en/stable/specs/rfc7636.html)
|
|
96
|
-
- [RFC7662: OAuth 2.0 Token Introspection](https://docs.authlib.org/en/stable/specs/rfc7662.html)
|
|
97
|
-
- [RFC8414: OAuth 2.0 Authorization Server Metadata](https://docs.authlib.org/en/stable/specs/rfc8414.html)
|
|
98
|
-
- [RFC8628: OAuth 2.0 Device Authorization Grant](https://docs.authlib.org/en/stable/specs/rfc8628.html)
|
|
99
|
-
- [RFC9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens](https://docs.authlib.org/en/stable/specs/rfc9068.html)
|
|
100
|
-
- [RFC9101: The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)](https://docs.authlib.org/en/stable/specs/rfc9101.html)
|
|
101
|
-
- [RFC9207: OAuth 2.0 Authorization Server Issuer Identification](https://docs.authlib.org/en/stable/specs/rfc9207.html)
|
|
86
|
+
- [The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/oauth1/index.html)
|
|
87
|
+
- [RFC5849: The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/oauth1/specs/rfc5849.html)
|
|
88
|
+
- [The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/oauth2/index.html)
|
|
89
|
+
- [RFC6749: The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/oauth2/specs/rfc6749.html)
|
|
90
|
+
- [RFC6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://docs.authlib.org/en/stable/oauth2/specs/rfc6750.html)
|
|
91
|
+
- [RFC7009: OAuth 2.0 Token Revocation](https://docs.authlib.org/en/stable/oauth2/specs/rfc7009.html)
|
|
92
|
+
- [RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants](https://docs.authlib.org/en/stable/oauth2/specs/rfc7523.html)
|
|
93
|
+
- [RFC7591: OAuth 2.0 Dynamic Client Registration Protocol](https://docs.authlib.org/en/stable/oauth2/specs/rfc7591.html)
|
|
94
|
+
- [RFC7592: OAuth 2.0 Dynamic Client Registration Management Protocol](https://docs.authlib.org/en/stable/oauth2/specs/rfc7592.html)
|
|
95
|
+
- [RFC7636: Proof Key for Code Exchange by OAuth Public Clients](https://docs.authlib.org/en/stable/oauth2/specs/rfc7636.html)
|
|
96
|
+
- [RFC7662: OAuth 2.0 Token Introspection](https://docs.authlib.org/en/stable/oauth2/specs/rfc7662.html)
|
|
97
|
+
- [RFC8414: OAuth 2.0 Authorization Server Metadata](https://docs.authlib.org/en/stable/oauth2/specs/rfc8414.html)
|
|
98
|
+
- [RFC8628: OAuth 2.0 Device Authorization Grant](https://docs.authlib.org/en/stable/oauth2/specs/rfc8628.html)
|
|
99
|
+
- [RFC9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens](https://docs.authlib.org/en/stable/oauth2/specs/rfc9068.html)
|
|
100
|
+
- [RFC9101: The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)](https://docs.authlib.org/en/stable/oauth2/specs/rfc9101.html)
|
|
101
|
+
- [RFC9207: OAuth 2.0 Authorization Server Issuer Identification](https://docs.authlib.org/en/stable/oauth2/specs/rfc9207.html)
|
|
102
102
|
- [Javascript Object Signing and Encryption](https://docs.authlib.org/en/stable/jose/index.html)
|
|
103
103
|
- [RFC7515: JSON Web Signature](https://docs.authlib.org/en/stable/jose/jws.html)
|
|
104
104
|
- [RFC7516: JSON Web Encryption](https://docs.authlib.org/en/stable/jose/jwe.html)
|
|
105
105
|
- [RFC7517: JSON Web Key](https://docs.authlib.org/en/stable/jose/jwk.html)
|
|
106
|
-
- [RFC7518: JSON Web Algorithms](https://docs.authlib.org/en/stable/specs/rfc7518.html)
|
|
106
|
+
- [RFC7518: JSON Web Algorithms](https://docs.authlib.org/en/stable/jose/specs/rfc7518.html)
|
|
107
107
|
- [RFC7519: JSON Web Token](https://docs.authlib.org/en/stable/jose/jwt.html)
|
|
108
|
-
- [RFC7638: JSON Web Key (JWK) Thumbprint](https://docs.authlib.org/en/stable/specs/rfc7638.html)
|
|
108
|
+
- [RFC7638: JSON Web Key (JWK) Thumbprint](https://docs.authlib.org/en/stable/jose/specs/rfc7638.html)
|
|
109
109
|
- [ ] RFC7797: JSON Web Signature (JWS) Unencoded Payload Option
|
|
110
|
-
- [RFC8037: ECDH in JWS and JWE](https://docs.authlib.org/en/stable/specs/rfc8037.html)
|
|
110
|
+
- [RFC8037: ECDH in JWS and JWE](https://docs.authlib.org/en/stable/jose/specs/rfc8037.html)
|
|
111
111
|
- [ ] draft-madden-jose-ecdh-1pu-04: Public Key Authenticated Encryption for JOSE: ECDH-1PU
|
|
112
|
-
- [OpenID Connect 1.0](https://docs.authlib.org/en/stable/specs/oidc.html)
|
|
112
|
+
- [OpenID Connect 1.0](https://docs.authlib.org/en/stable/oauth2/specs/oidc.html)
|
|
113
113
|
- [x] OpenID Connect Core 1.0
|
|
114
114
|
- [x] OpenID Connect Discovery 1.0
|
|
115
115
|
- [x] OpenID Connect Dynamic Client Registration 1.0
|
|
@@ -118,30 +118,30 @@ Generic, spec-compliant implementation to build clients and providers:
|
|
|
118
118
|
Connect third party OAuth providers with Authlib built-in client integrations:
|
|
119
119
|
|
|
120
120
|
- Requests
|
|
121
|
-
- [OAuth1Session](https://docs.authlib.org/en/stable/client/requests.html
|
|
122
|
-
- [OAuth2Session](https://docs.authlib.org/en/stable/client/requests.html#requests-oauth-2-0)
|
|
123
|
-
- [OpenID Connect](https://docs.authlib.org/en/stable/client/requests.html#requests-openid-connect)
|
|
124
|
-
- [AssertionSession](https://docs.authlib.org/en/stable/client/requests.html#requests-service-account)
|
|
121
|
+
- [OAuth1Session](https://docs.authlib.org/en/stable/oauth1/client/http/requests.html)
|
|
122
|
+
- [OAuth2Session](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-oauth-2-0)
|
|
123
|
+
- [OpenID Connect](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-openid-connect)
|
|
124
|
+
- [AssertionSession](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-service-account)
|
|
125
125
|
- HTTPX
|
|
126
|
-
- [AsyncOAuth1Client](https://docs.authlib.org/en/stable/client/httpx.html
|
|
127
|
-
- [AsyncOAuth2Client](https://docs.authlib.org/en/stable/client/httpx.html#httpx-oauth-2-0)
|
|
128
|
-
- [OpenID Connect](https://docs.authlib.org/en/stable/client/httpx.html#httpx-oauth-2-0)
|
|
129
|
-
- [AsyncAssertionClient](https://docs.authlib.org/en/stable/client/httpx.html#async-service-account)
|
|
130
|
-
- [Flask OAuth Client](https://docs.authlib.org/en/stable/client/flask.html)
|
|
131
|
-
- [Django OAuth Client](https://docs.authlib.org/en/stable/client/django.html)
|
|
132
|
-
- [Starlette OAuth Client](https://docs.authlib.org/en/stable/client/starlette.html)
|
|
133
|
-
- [FastAPI OAuth Client](https://docs.authlib.org/en/stable/client/fastapi.html)
|
|
126
|
+
- [AsyncOAuth1Client](https://docs.authlib.org/en/stable/oauth1/client/http/httpx.html)
|
|
127
|
+
- [AsyncOAuth2Client](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#httpx-oauth-2-0)
|
|
128
|
+
- [OpenID Connect](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#httpx-oauth-2-0)
|
|
129
|
+
- [AsyncAssertionClient](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#async-service-account)
|
|
130
|
+
- [Flask OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/flask.html)
|
|
131
|
+
- [Django OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/django.html)
|
|
132
|
+
- [Starlette OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/starlette.html)
|
|
133
|
+
- [FastAPI OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/fastapi.html)
|
|
134
134
|
|
|
135
135
|
Build your own OAuth 1.0, OAuth 2.0, and OpenID Connect providers:
|
|
136
136
|
|
|
137
137
|
- Flask
|
|
138
|
-
- [Flask OAuth 1.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
139
|
-
- [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
140
|
-
- [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
138
|
+
- [Flask OAuth 1.0 Provider](https://docs.authlib.org/en/stable/oauth1/provider/flask/index.html)
|
|
139
|
+
- [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/flask/index.html)
|
|
140
|
+
- [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/flask/openid-connect.html)
|
|
141
141
|
- Django
|
|
142
|
-
- [Django OAuth 1.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
143
|
-
- [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
144
|
-
- [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
142
|
+
- [Django OAuth 1.0 Provider](https://docs.authlib.org/en/stable/oauth1/provider/django/index.html)
|
|
143
|
+
- [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/django/index.html)
|
|
144
|
+
- [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/django/openid-connect.html)
|
|
145
145
|
|
|
146
146
|
## Useful Links
|
|
147
147
|
|
|
@@ -15,6 +15,7 @@ authlib/deprecate.py
|
|
|
15
15
|
authlib/common/__init__.py
|
|
16
16
|
authlib/common/encoding.py
|
|
17
17
|
authlib/common/errors.py
|
|
18
|
+
authlib/common/language.py
|
|
18
19
|
authlib/common/security.py
|
|
19
20
|
authlib/common/urls.py
|
|
20
21
|
authlib/integrations/__init__.py
|
|
@@ -53,6 +54,7 @@ authlib/integrations/flask_oauth2/requests.py
|
|
|
53
54
|
authlib/integrations/flask_oauth2/resource_protector.py
|
|
54
55
|
authlib/integrations/flask_oauth2/signals.py
|
|
55
56
|
authlib/integrations/httpx_client/__init__.py
|
|
57
|
+
authlib/integrations/httpx_client/_compat.py
|
|
56
58
|
authlib/integrations/httpx_client/assertion_client.py
|
|
57
59
|
authlib/integrations/httpx_client/oauth1_client.py
|
|
58
60
|
authlib/integrations/httpx_client/oauth2_client.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Authlib
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0
|
|
4
4
|
Summary: The ultimate Python library in building OAuth and OpenID Connect servers and clients.
|
|
5
5
|
Author-email: Hsiaoming Yang <me@lepture.com>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -32,8 +32,8 @@ Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
|
|
32
32
|
Requires-Python: >=3.10
|
|
33
33
|
Description-Content-Type: text/markdown
|
|
34
34
|
License-File: LICENSE
|
|
35
|
-
Requires-Dist: cryptography
|
|
36
|
-
Requires-Dist: joserfc>=1.6.
|
|
35
|
+
Requires-Dist: cryptography>=45.0.1
|
|
36
|
+
Requires-Dist: joserfc>=1.6.1
|
|
37
37
|
Dynamic: license-file
|
|
38
38
|
|
|
39
39
|
<div align="center">
|
|
@@ -83,33 +83,33 @@ Authlib will deprecate `authlib.jose` module, please read:
|
|
|
83
83
|
|
|
84
84
|
Generic, spec-compliant implementation to build clients and providers:
|
|
85
85
|
|
|
86
|
-
- [The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/
|
|
87
|
-
- [RFC5849: The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/specs/rfc5849.html)
|
|
88
|
-
- [The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/
|
|
89
|
-
- [RFC6749: The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/specs/rfc6749.html)
|
|
90
|
-
- [RFC6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://docs.authlib.org/en/stable/specs/rfc6750.html)
|
|
91
|
-
- [RFC7009: OAuth 2.0 Token Revocation](https://docs.authlib.org/en/stable/specs/rfc7009.html)
|
|
92
|
-
- [RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants](https://docs.authlib.org/en/stable/specs/rfc7523.html)
|
|
93
|
-
- [RFC7591: OAuth 2.0 Dynamic Client Registration Protocol](https://docs.authlib.org/en/stable/specs/rfc7591.html)
|
|
94
|
-
- [RFC7592: OAuth 2.0 Dynamic Client Registration Management Protocol](https://docs.authlib.org/en/stable/specs/rfc7592.html)
|
|
95
|
-
- [RFC7636: Proof Key for Code Exchange by OAuth Public Clients](https://docs.authlib.org/en/stable/specs/rfc7636.html)
|
|
96
|
-
- [RFC7662: OAuth 2.0 Token Introspection](https://docs.authlib.org/en/stable/specs/rfc7662.html)
|
|
97
|
-
- [RFC8414: OAuth 2.0 Authorization Server Metadata](https://docs.authlib.org/en/stable/specs/rfc8414.html)
|
|
98
|
-
- [RFC8628: OAuth 2.0 Device Authorization Grant](https://docs.authlib.org/en/stable/specs/rfc8628.html)
|
|
99
|
-
- [RFC9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens](https://docs.authlib.org/en/stable/specs/rfc9068.html)
|
|
100
|
-
- [RFC9101: The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)](https://docs.authlib.org/en/stable/specs/rfc9101.html)
|
|
101
|
-
- [RFC9207: OAuth 2.0 Authorization Server Issuer Identification](https://docs.authlib.org/en/stable/specs/rfc9207.html)
|
|
86
|
+
- [The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/oauth1/index.html)
|
|
87
|
+
- [RFC5849: The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/oauth1/specs/rfc5849.html)
|
|
88
|
+
- [The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/oauth2/index.html)
|
|
89
|
+
- [RFC6749: The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/oauth2/specs/rfc6749.html)
|
|
90
|
+
- [RFC6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://docs.authlib.org/en/stable/oauth2/specs/rfc6750.html)
|
|
91
|
+
- [RFC7009: OAuth 2.0 Token Revocation](https://docs.authlib.org/en/stable/oauth2/specs/rfc7009.html)
|
|
92
|
+
- [RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants](https://docs.authlib.org/en/stable/oauth2/specs/rfc7523.html)
|
|
93
|
+
- [RFC7591: OAuth 2.0 Dynamic Client Registration Protocol](https://docs.authlib.org/en/stable/oauth2/specs/rfc7591.html)
|
|
94
|
+
- [RFC7592: OAuth 2.0 Dynamic Client Registration Management Protocol](https://docs.authlib.org/en/stable/oauth2/specs/rfc7592.html)
|
|
95
|
+
- [RFC7636: Proof Key for Code Exchange by OAuth Public Clients](https://docs.authlib.org/en/stable/oauth2/specs/rfc7636.html)
|
|
96
|
+
- [RFC7662: OAuth 2.0 Token Introspection](https://docs.authlib.org/en/stable/oauth2/specs/rfc7662.html)
|
|
97
|
+
- [RFC8414: OAuth 2.0 Authorization Server Metadata](https://docs.authlib.org/en/stable/oauth2/specs/rfc8414.html)
|
|
98
|
+
- [RFC8628: OAuth 2.0 Device Authorization Grant](https://docs.authlib.org/en/stable/oauth2/specs/rfc8628.html)
|
|
99
|
+
- [RFC9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens](https://docs.authlib.org/en/stable/oauth2/specs/rfc9068.html)
|
|
100
|
+
- [RFC9101: The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)](https://docs.authlib.org/en/stable/oauth2/specs/rfc9101.html)
|
|
101
|
+
- [RFC9207: OAuth 2.0 Authorization Server Issuer Identification](https://docs.authlib.org/en/stable/oauth2/specs/rfc9207.html)
|
|
102
102
|
- [Javascript Object Signing and Encryption](https://docs.authlib.org/en/stable/jose/index.html)
|
|
103
103
|
- [RFC7515: JSON Web Signature](https://docs.authlib.org/en/stable/jose/jws.html)
|
|
104
104
|
- [RFC7516: JSON Web Encryption](https://docs.authlib.org/en/stable/jose/jwe.html)
|
|
105
105
|
- [RFC7517: JSON Web Key](https://docs.authlib.org/en/stable/jose/jwk.html)
|
|
106
|
-
- [RFC7518: JSON Web Algorithms](https://docs.authlib.org/en/stable/specs/rfc7518.html)
|
|
106
|
+
- [RFC7518: JSON Web Algorithms](https://docs.authlib.org/en/stable/jose/specs/rfc7518.html)
|
|
107
107
|
- [RFC7519: JSON Web Token](https://docs.authlib.org/en/stable/jose/jwt.html)
|
|
108
|
-
- [RFC7638: JSON Web Key (JWK) Thumbprint](https://docs.authlib.org/en/stable/specs/rfc7638.html)
|
|
108
|
+
- [RFC7638: JSON Web Key (JWK) Thumbprint](https://docs.authlib.org/en/stable/jose/specs/rfc7638.html)
|
|
109
109
|
- [ ] RFC7797: JSON Web Signature (JWS) Unencoded Payload Option
|
|
110
|
-
- [RFC8037: ECDH in JWS and JWE](https://docs.authlib.org/en/stable/specs/rfc8037.html)
|
|
110
|
+
- [RFC8037: ECDH in JWS and JWE](https://docs.authlib.org/en/stable/jose/specs/rfc8037.html)
|
|
111
111
|
- [ ] draft-madden-jose-ecdh-1pu-04: Public Key Authenticated Encryption for JOSE: ECDH-1PU
|
|
112
|
-
- [OpenID Connect 1.0](https://docs.authlib.org/en/stable/specs/oidc.html)
|
|
112
|
+
- [OpenID Connect 1.0](https://docs.authlib.org/en/stable/oauth2/specs/oidc.html)
|
|
113
113
|
- [x] OpenID Connect Core 1.0
|
|
114
114
|
- [x] OpenID Connect Discovery 1.0
|
|
115
115
|
- [x] OpenID Connect Dynamic Client Registration 1.0
|
|
@@ -118,30 +118,30 @@ Generic, spec-compliant implementation to build clients and providers:
|
|
|
118
118
|
Connect third party OAuth providers with Authlib built-in client integrations:
|
|
119
119
|
|
|
120
120
|
- Requests
|
|
121
|
-
- [OAuth1Session](https://docs.authlib.org/en/stable/client/requests.html
|
|
122
|
-
- [OAuth2Session](https://docs.authlib.org/en/stable/client/requests.html#requests-oauth-2-0)
|
|
123
|
-
- [OpenID Connect](https://docs.authlib.org/en/stable/client/requests.html#requests-openid-connect)
|
|
124
|
-
- [AssertionSession](https://docs.authlib.org/en/stable/client/requests.html#requests-service-account)
|
|
121
|
+
- [OAuth1Session](https://docs.authlib.org/en/stable/oauth1/client/http/requests.html)
|
|
122
|
+
- [OAuth2Session](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-oauth-2-0)
|
|
123
|
+
- [OpenID Connect](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-openid-connect)
|
|
124
|
+
- [AssertionSession](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-service-account)
|
|
125
125
|
- HTTPX
|
|
126
|
-
- [AsyncOAuth1Client](https://docs.authlib.org/en/stable/client/httpx.html
|
|
127
|
-
- [AsyncOAuth2Client](https://docs.authlib.org/en/stable/client/httpx.html#httpx-oauth-2-0)
|
|
128
|
-
- [OpenID Connect](https://docs.authlib.org/en/stable/client/httpx.html#httpx-oauth-2-0)
|
|
129
|
-
- [AsyncAssertionClient](https://docs.authlib.org/en/stable/client/httpx.html#async-service-account)
|
|
130
|
-
- [Flask OAuth Client](https://docs.authlib.org/en/stable/client/flask.html)
|
|
131
|
-
- [Django OAuth Client](https://docs.authlib.org/en/stable/client/django.html)
|
|
132
|
-
- [Starlette OAuth Client](https://docs.authlib.org/en/stable/client/starlette.html)
|
|
133
|
-
- [FastAPI OAuth Client](https://docs.authlib.org/en/stable/client/fastapi.html)
|
|
126
|
+
- [AsyncOAuth1Client](https://docs.authlib.org/en/stable/oauth1/client/http/httpx.html)
|
|
127
|
+
- [AsyncOAuth2Client](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#httpx-oauth-2-0)
|
|
128
|
+
- [OpenID Connect](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#httpx-oauth-2-0)
|
|
129
|
+
- [AsyncAssertionClient](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#async-service-account)
|
|
130
|
+
- [Flask OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/flask.html)
|
|
131
|
+
- [Django OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/django.html)
|
|
132
|
+
- [Starlette OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/starlette.html)
|
|
133
|
+
- [FastAPI OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/fastapi.html)
|
|
134
134
|
|
|
135
135
|
Build your own OAuth 1.0, OAuth 2.0, and OpenID Connect providers:
|
|
136
136
|
|
|
137
137
|
- Flask
|
|
138
|
-
- [Flask OAuth 1.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
139
|
-
- [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
140
|
-
- [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
138
|
+
- [Flask OAuth 1.0 Provider](https://docs.authlib.org/en/stable/oauth1/provider/flask/index.html)
|
|
139
|
+
- [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/flask/index.html)
|
|
140
|
+
- [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/flask/openid-connect.html)
|
|
141
141
|
- Django
|
|
142
|
-
- [Django OAuth 1.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
143
|
-
- [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
144
|
-
- [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
142
|
+
- [Django OAuth 1.0 Provider](https://docs.authlib.org/en/stable/oauth1/provider/django/index.html)
|
|
143
|
+
- [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/django/index.html)
|
|
144
|
+
- [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/django/openid-connect.html)
|
|
145
145
|
|
|
146
146
|
## Useful Links
|
|
147
147
|
|
|
@@ -45,33 +45,33 @@ Authlib will deprecate `authlib.jose` module, please read:
|
|
|
45
45
|
|
|
46
46
|
Generic, spec-compliant implementation to build clients and providers:
|
|
47
47
|
|
|
48
|
-
- [The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/
|
|
49
|
-
- [RFC5849: The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/specs/rfc5849.html)
|
|
50
|
-
- [The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/
|
|
51
|
-
- [RFC6749: The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/specs/rfc6749.html)
|
|
52
|
-
- [RFC6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://docs.authlib.org/en/stable/specs/rfc6750.html)
|
|
53
|
-
- [RFC7009: OAuth 2.0 Token Revocation](https://docs.authlib.org/en/stable/specs/rfc7009.html)
|
|
54
|
-
- [RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants](https://docs.authlib.org/en/stable/specs/rfc7523.html)
|
|
55
|
-
- [RFC7591: OAuth 2.0 Dynamic Client Registration Protocol](https://docs.authlib.org/en/stable/specs/rfc7591.html)
|
|
56
|
-
- [RFC7592: OAuth 2.0 Dynamic Client Registration Management Protocol](https://docs.authlib.org/en/stable/specs/rfc7592.html)
|
|
57
|
-
- [RFC7636: Proof Key for Code Exchange by OAuth Public Clients](https://docs.authlib.org/en/stable/specs/rfc7636.html)
|
|
58
|
-
- [RFC7662: OAuth 2.0 Token Introspection](https://docs.authlib.org/en/stable/specs/rfc7662.html)
|
|
59
|
-
- [RFC8414: OAuth 2.0 Authorization Server Metadata](https://docs.authlib.org/en/stable/specs/rfc8414.html)
|
|
60
|
-
- [RFC8628: OAuth 2.0 Device Authorization Grant](https://docs.authlib.org/en/stable/specs/rfc8628.html)
|
|
61
|
-
- [RFC9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens](https://docs.authlib.org/en/stable/specs/rfc9068.html)
|
|
62
|
-
- [RFC9101: The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)](https://docs.authlib.org/en/stable/specs/rfc9101.html)
|
|
63
|
-
- [RFC9207: OAuth 2.0 Authorization Server Issuer Identification](https://docs.authlib.org/en/stable/specs/rfc9207.html)
|
|
48
|
+
- [The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/oauth1/index.html)
|
|
49
|
+
- [RFC5849: The OAuth 1.0 Protocol](https://docs.authlib.org/en/stable/oauth1/specs/rfc5849.html)
|
|
50
|
+
- [The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/oauth2/index.html)
|
|
51
|
+
- [RFC6749: The OAuth 2.0 Authorization Framework](https://docs.authlib.org/en/stable/oauth2/specs/rfc6749.html)
|
|
52
|
+
- [RFC6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage](https://docs.authlib.org/en/stable/oauth2/specs/rfc6750.html)
|
|
53
|
+
- [RFC7009: OAuth 2.0 Token Revocation](https://docs.authlib.org/en/stable/oauth2/specs/rfc7009.html)
|
|
54
|
+
- [RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants](https://docs.authlib.org/en/stable/oauth2/specs/rfc7523.html)
|
|
55
|
+
- [RFC7591: OAuth 2.0 Dynamic Client Registration Protocol](https://docs.authlib.org/en/stable/oauth2/specs/rfc7591.html)
|
|
56
|
+
- [RFC7592: OAuth 2.0 Dynamic Client Registration Management Protocol](https://docs.authlib.org/en/stable/oauth2/specs/rfc7592.html)
|
|
57
|
+
- [RFC7636: Proof Key for Code Exchange by OAuth Public Clients](https://docs.authlib.org/en/stable/oauth2/specs/rfc7636.html)
|
|
58
|
+
- [RFC7662: OAuth 2.0 Token Introspection](https://docs.authlib.org/en/stable/oauth2/specs/rfc7662.html)
|
|
59
|
+
- [RFC8414: OAuth 2.0 Authorization Server Metadata](https://docs.authlib.org/en/stable/oauth2/specs/rfc8414.html)
|
|
60
|
+
- [RFC8628: OAuth 2.0 Device Authorization Grant](https://docs.authlib.org/en/stable/oauth2/specs/rfc8628.html)
|
|
61
|
+
- [RFC9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens](https://docs.authlib.org/en/stable/oauth2/specs/rfc9068.html)
|
|
62
|
+
- [RFC9101: The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR)](https://docs.authlib.org/en/stable/oauth2/specs/rfc9101.html)
|
|
63
|
+
- [RFC9207: OAuth 2.0 Authorization Server Issuer Identification](https://docs.authlib.org/en/stable/oauth2/specs/rfc9207.html)
|
|
64
64
|
- [Javascript Object Signing and Encryption](https://docs.authlib.org/en/stable/jose/index.html)
|
|
65
65
|
- [RFC7515: JSON Web Signature](https://docs.authlib.org/en/stable/jose/jws.html)
|
|
66
66
|
- [RFC7516: JSON Web Encryption](https://docs.authlib.org/en/stable/jose/jwe.html)
|
|
67
67
|
- [RFC7517: JSON Web Key](https://docs.authlib.org/en/stable/jose/jwk.html)
|
|
68
|
-
- [RFC7518: JSON Web Algorithms](https://docs.authlib.org/en/stable/specs/rfc7518.html)
|
|
68
|
+
- [RFC7518: JSON Web Algorithms](https://docs.authlib.org/en/stable/jose/specs/rfc7518.html)
|
|
69
69
|
- [RFC7519: JSON Web Token](https://docs.authlib.org/en/stable/jose/jwt.html)
|
|
70
|
-
- [RFC7638: JSON Web Key (JWK) Thumbprint](https://docs.authlib.org/en/stable/specs/rfc7638.html)
|
|
70
|
+
- [RFC7638: JSON Web Key (JWK) Thumbprint](https://docs.authlib.org/en/stable/jose/specs/rfc7638.html)
|
|
71
71
|
- [ ] RFC7797: JSON Web Signature (JWS) Unencoded Payload Option
|
|
72
|
-
- [RFC8037: ECDH in JWS and JWE](https://docs.authlib.org/en/stable/specs/rfc8037.html)
|
|
72
|
+
- [RFC8037: ECDH in JWS and JWE](https://docs.authlib.org/en/stable/jose/specs/rfc8037.html)
|
|
73
73
|
- [ ] draft-madden-jose-ecdh-1pu-04: Public Key Authenticated Encryption for JOSE: ECDH-1PU
|
|
74
|
-
- [OpenID Connect 1.0](https://docs.authlib.org/en/stable/specs/oidc.html)
|
|
74
|
+
- [OpenID Connect 1.0](https://docs.authlib.org/en/stable/oauth2/specs/oidc.html)
|
|
75
75
|
- [x] OpenID Connect Core 1.0
|
|
76
76
|
- [x] OpenID Connect Discovery 1.0
|
|
77
77
|
- [x] OpenID Connect Dynamic Client Registration 1.0
|
|
@@ -80,30 +80,30 @@ Generic, spec-compliant implementation to build clients and providers:
|
|
|
80
80
|
Connect third party OAuth providers with Authlib built-in client integrations:
|
|
81
81
|
|
|
82
82
|
- Requests
|
|
83
|
-
- [OAuth1Session](https://docs.authlib.org/en/stable/client/requests.html
|
|
84
|
-
- [OAuth2Session](https://docs.authlib.org/en/stable/client/requests.html#requests-oauth-2-0)
|
|
85
|
-
- [OpenID Connect](https://docs.authlib.org/en/stable/client/requests.html#requests-openid-connect)
|
|
86
|
-
- [AssertionSession](https://docs.authlib.org/en/stable/client/requests.html#requests-service-account)
|
|
83
|
+
- [OAuth1Session](https://docs.authlib.org/en/stable/oauth1/client/http/requests.html)
|
|
84
|
+
- [OAuth2Session](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-oauth-2-0)
|
|
85
|
+
- [OpenID Connect](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-openid-connect)
|
|
86
|
+
- [AssertionSession](https://docs.authlib.org/en/stable/oauth2/client/http/requests.html#requests-service-account)
|
|
87
87
|
- HTTPX
|
|
88
|
-
- [AsyncOAuth1Client](https://docs.authlib.org/en/stable/client/httpx.html
|
|
89
|
-
- [AsyncOAuth2Client](https://docs.authlib.org/en/stable/client/httpx.html#httpx-oauth-2-0)
|
|
90
|
-
- [OpenID Connect](https://docs.authlib.org/en/stable/client/httpx.html#httpx-oauth-2-0)
|
|
91
|
-
- [AsyncAssertionClient](https://docs.authlib.org/en/stable/client/httpx.html#async-service-account)
|
|
92
|
-
- [Flask OAuth Client](https://docs.authlib.org/en/stable/client/flask.html)
|
|
93
|
-
- [Django OAuth Client](https://docs.authlib.org/en/stable/client/django.html)
|
|
94
|
-
- [Starlette OAuth Client](https://docs.authlib.org/en/stable/client/starlette.html)
|
|
95
|
-
- [FastAPI OAuth Client](https://docs.authlib.org/en/stable/client/fastapi.html)
|
|
88
|
+
- [AsyncOAuth1Client](https://docs.authlib.org/en/stable/oauth1/client/http/httpx.html)
|
|
89
|
+
- [AsyncOAuth2Client](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#httpx-oauth-2-0)
|
|
90
|
+
- [OpenID Connect](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#httpx-oauth-2-0)
|
|
91
|
+
- [AsyncAssertionClient](https://docs.authlib.org/en/stable/oauth2/client/http/httpx.html#async-service-account)
|
|
92
|
+
- [Flask OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/flask.html)
|
|
93
|
+
- [Django OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/django.html)
|
|
94
|
+
- [Starlette OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/starlette.html)
|
|
95
|
+
- [FastAPI OAuth Client](https://docs.authlib.org/en/stable/oauth2/client/web/fastapi.html)
|
|
96
96
|
|
|
97
97
|
Build your own OAuth 1.0, OAuth 2.0, and OpenID Connect providers:
|
|
98
98
|
|
|
99
99
|
- Flask
|
|
100
|
-
- [Flask OAuth 1.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
101
|
-
- [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
102
|
-
- [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/flask/
|
|
100
|
+
- [Flask OAuth 1.0 Provider](https://docs.authlib.org/en/stable/oauth1/provider/flask/index.html)
|
|
101
|
+
- [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/flask/index.html)
|
|
102
|
+
- [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/flask/openid-connect.html)
|
|
103
103
|
- Django
|
|
104
|
-
- [Django OAuth 1.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
105
|
-
- [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
106
|
-
- [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/django/
|
|
104
|
+
- [Django OAuth 1.0 Provider](https://docs.authlib.org/en/stable/oauth1/provider/django/index.html)
|
|
105
|
+
- [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/django/index.html)
|
|
106
|
+
- [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/oauth2/authorization-server/django/openid-connect.html)
|
|
107
107
|
|
|
108
108
|
## Useful Links
|
|
109
109
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
# Structurally validates BCP 47 language tags (RFC 5646).
|
|
4
|
+
# Accepts private-use tags (x-...) and standard tags (2-8 alpha + optional subtags).
|
|
5
|
+
# Does not validate subtags against the IANA registry.
|
|
6
|
+
_LANGUAGE_TAG_RE = re.compile(
|
|
7
|
+
r"^(x(-[a-zA-Z0-9]{1,8})+|[a-zA-Z]{2,8}(-[a-zA-Z0-9]{1,8})*)$"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def is_valid_language_tag(tag):
|
|
12
|
+
"""Return True if tag is a structurally valid BCP 47 language tag."""
|
|
13
|
+
return isinstance(tag, str) and bool(_LANGUAGE_TAG_RE.match(tag))
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import ipaddress
|
|
2
|
+
import os
|
|
3
|
+
import random
|
|
4
|
+
import string
|
|
5
|
+
from urllib.parse import urlsplit
|
|
6
|
+
|
|
7
|
+
UNICODE_ASCII_CHARACTER_SET = string.ascii_letters + string.digits
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def generate_token(length=30, chars=UNICODE_ASCII_CHARACTER_SET):
|
|
11
|
+
rand = random.SystemRandom()
|
|
12
|
+
return "".join(rand.choice(chars) for _ in range(length))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def is_secure_transport(uri):
|
|
16
|
+
"""Check if the uri is over ssl."""
|
|
17
|
+
if os.getenv("AUTHLIB_INSECURE_TRANSPORT"):
|
|
18
|
+
return True
|
|
19
|
+
|
|
20
|
+
try:
|
|
21
|
+
parts = urlsplit(uri)
|
|
22
|
+
except ValueError:
|
|
23
|
+
return False
|
|
24
|
+
|
|
25
|
+
if not parts.hostname:
|
|
26
|
+
return False
|
|
27
|
+
|
|
28
|
+
if parts.scheme == "https":
|
|
29
|
+
return True
|
|
30
|
+
|
|
31
|
+
if parts.scheme != "http":
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
# rfc8252 §7.3: native apps may use http for loopback redirection URIs.
|
|
35
|
+
if parts.hostname == "localhost":
|
|
36
|
+
return True
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
address = ipaddress.ip_address(parts.hostname)
|
|
40
|
+
except ValueError:
|
|
41
|
+
return False
|
|
42
|
+
|
|
43
|
+
# IPv6Address.is_loopback only accounts for the mapped IPv4 address since
|
|
44
|
+
# CPython 3.10.16, 3.11.11 and 3.12.4.
|
|
45
|
+
if isinstance(address, ipaddress.IPv6Address) and address.ipv4_mapped:
|
|
46
|
+
address = address.ipv4_mapped
|
|
47
|
+
|
|
48
|
+
return address.is_loopback
|
|
@@ -140,7 +140,16 @@ def extract_params(raw):
|
|
|
140
140
|
|
|
141
141
|
|
|
142
142
|
def is_valid_url(url: str, fragments_allowed=True):
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
try:
|
|
144
|
+
parsed = urlparse.urlparse(url)
|
|
145
|
+
except ValueError:
|
|
146
|
+
return False
|
|
147
|
+
|
|
148
|
+
# The userinfo component can disguise the actual host,
|
|
149
|
+
# as in "https://provider.test@attacker.test/".
|
|
150
|
+
if "@" in parsed.netloc:
|
|
151
|
+
return False
|
|
152
|
+
|
|
153
|
+
return bool(
|
|
145
154
|
parsed.scheme and parsed.hostname and (fragments_allowed or not parsed.fragment)
|
|
146
155
|
)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from joserfc import jwt
|
|
2
2
|
from joserfc.errors import InvalidKeyIdError
|
|
3
3
|
from joserfc.jwk import KeySet
|
|
4
|
+
from joserfc.jws import JWSRegistry
|
|
4
5
|
|
|
5
6
|
from authlib.common.security import generate_token
|
|
6
7
|
from authlib.common.urls import add_params_to_uri
|
|
@@ -67,7 +68,7 @@ class AsyncOpenIDMixin:
|
|
|
67
68
|
token = jwt.decode(
|
|
68
69
|
token["id_token"],
|
|
69
70
|
key=key_set,
|
|
70
|
-
algorithms=alg_values,
|
|
71
|
+
registry=JWSRegistry(algorithms=alg_values, strict_check_header=False),
|
|
71
72
|
)
|
|
72
73
|
except InvalidKeyIdError:
|
|
73
74
|
jwks = await self.fetch_jwk_set(force=True)
|
|
@@ -75,7 +76,7 @@ class AsyncOpenIDMixin:
|
|
|
75
76
|
token = jwt.decode(
|
|
76
77
|
token["id_token"],
|
|
77
78
|
key=key_set,
|
|
78
|
-
algorithms=alg_values,
|
|
79
|
+
registry=JWSRegistry(algorithms=alg_values, strict_check_header=False),
|
|
79
80
|
)
|
|
80
81
|
|
|
81
82
|
claims = claims_cls(token.claims, token.header, claims_options, claims_params)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from joserfc import jwt
|
|
2
2
|
from joserfc.errors import InvalidKeyIdError
|
|
3
3
|
from joserfc.jwk import KeySet
|
|
4
|
+
from joserfc.jws import JWSRegistry
|
|
4
5
|
|
|
5
6
|
from authlib.common.security import generate_token
|
|
6
7
|
from authlib.common.urls import add_params_to_uri
|
|
@@ -66,14 +67,14 @@ class OpenIDMixin:
|
|
|
66
67
|
token = jwt.decode(
|
|
67
68
|
token["id_token"],
|
|
68
69
|
key=key_set,
|
|
69
|
-
algorithms=alg_values,
|
|
70
|
+
registry=JWSRegistry(algorithms=alg_values, strict_check_header=False),
|
|
70
71
|
)
|
|
71
72
|
except InvalidKeyIdError:
|
|
72
73
|
key_set = KeySet.import_key_set(self.fetch_jwk_set(force=True))
|
|
73
74
|
token = jwt.decode(
|
|
74
75
|
token["id_token"],
|
|
75
76
|
key=key_set,
|
|
76
|
-
algorithms=alg_values,
|
|
77
|
+
registry=JWSRegistry(algorithms=alg_values, strict_check_header=False),
|
|
77
78
|
)
|
|
78
79
|
|
|
79
80
|
claims = claims_cls(token.claims, token.header, claims_options, claims_params)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Compatibility shim for httpx2 with legacy httpx fallback.
|
|
2
|
+
|
|
3
|
+
Falls back to httpx when httpx2 is unavailable. The fallback is deprecated
|
|
4
|
+
and will be removed in a future release.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from authlib.deprecate import deprecate
|
|
8
|
+
|
|
9
|
+
try:
|
|
10
|
+
import httpx2
|
|
11
|
+
except ImportError:
|
|
12
|
+
import httpx as httpx2
|
|
13
|
+
|
|
14
|
+
deprecate(
|
|
15
|
+
"The httpx module is deprecated; please use httpx2 instead."
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
__all__ = ["httpx2"]
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import httpx
|
|
2
|
-
from httpx import USE_CLIENT_DEFAULT
|
|
3
|
-
from httpx import Response
|
|
4
|
-
|
|
5
1
|
from authlib.oauth2.rfc7521 import AssertionClient as _AssertionClient
|
|
6
2
|
from authlib.oauth2.rfc7523 import JWTBearerGrant
|
|
7
3
|
|
|
8
4
|
from ..base_client import OAuthError
|
|
5
|
+
from ._compat import httpx2
|
|
9
6
|
from .oauth2_client import OAuth2Auth
|
|
10
7
|
from .utils import extract_client_kwargs
|
|
11
8
|
|
|
9
|
+
USE_CLIENT_DEFAULT = httpx2.USE_CLIENT_DEFAULT
|
|
10
|
+
Response = httpx2.Response
|
|
11
|
+
|
|
12
12
|
__all__ = ["AsyncAssertionClient"]
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
class AsyncAssertionClient(_AssertionClient,
|
|
15
|
+
class AsyncAssertionClient(_AssertionClient, httpx2.AsyncClient):
|
|
16
16
|
token_auth_class = OAuth2Auth
|
|
17
17
|
oauth_error_class = OAuthError
|
|
18
18
|
JWT_BEARER_GRANT_TYPE = JWTBearerGrant.GRANT_TYPE
|
|
@@ -31,10 +31,11 @@ class AsyncAssertionClient(_AssertionClient, httpx.AsyncClient):
|
|
|
31
31
|
claims=None,
|
|
32
32
|
token_placement="header",
|
|
33
33
|
scope=None,
|
|
34
|
+
client_id=None,
|
|
34
35
|
**kwargs,
|
|
35
36
|
):
|
|
36
37
|
client_kwargs = extract_client_kwargs(kwargs)
|
|
37
|
-
|
|
38
|
+
httpx2.AsyncClient.__init__(self, **client_kwargs)
|
|
38
39
|
|
|
39
40
|
_AssertionClient.__init__(
|
|
40
41
|
self,
|
|
@@ -47,6 +48,7 @@ class AsyncAssertionClient(_AssertionClient, httpx.AsyncClient):
|
|
|
47
48
|
claims=claims,
|
|
48
49
|
token_placement=token_placement,
|
|
49
50
|
scope=scope,
|
|
51
|
+
client_id=client_id,
|
|
50
52
|
**kwargs,
|
|
51
53
|
)
|
|
52
54
|
|
|
@@ -69,7 +71,7 @@ class AsyncAssertionClient(_AssertionClient, httpx.AsyncClient):
|
|
|
69
71
|
return self.parse_response_token(resp)
|
|
70
72
|
|
|
71
73
|
|
|
72
|
-
class AssertionClient(_AssertionClient,
|
|
74
|
+
class AssertionClient(_AssertionClient, httpx2.Client):
|
|
73
75
|
token_auth_class = OAuth2Auth
|
|
74
76
|
oauth_error_class = OAuthError
|
|
75
77
|
JWT_BEARER_GRANT_TYPE = JWTBearerGrant.GRANT_TYPE
|
|
@@ -88,15 +90,11 @@ class AssertionClient(_AssertionClient, httpx.Client):
|
|
|
88
90
|
claims=None,
|
|
89
91
|
token_placement="header",
|
|
90
92
|
scope=None,
|
|
93
|
+
client_id=None,
|
|
91
94
|
**kwargs,
|
|
92
95
|
):
|
|
93
96
|
client_kwargs = extract_client_kwargs(kwargs)
|
|
94
|
-
|
|
95
|
-
app_value = client_kwargs.pop("app", None)
|
|
96
|
-
if app_value is not None:
|
|
97
|
-
client_kwargs["transport"] = httpx.WSGITransport(app=app_value)
|
|
98
|
-
|
|
99
|
-
httpx.Client.__init__(self, **client_kwargs)
|
|
97
|
+
httpx2.Client.__init__(self, **client_kwargs)
|
|
100
98
|
|
|
101
99
|
_AssertionClient.__init__(
|
|
102
100
|
self,
|
|
@@ -109,6 +107,7 @@ class AssertionClient(_AssertionClient, httpx.Client):
|
|
|
109
107
|
claims=claims,
|
|
110
108
|
token_placement=token_placement,
|
|
111
109
|
scope=scope,
|
|
110
|
+
client_id=client_id,
|
|
112
111
|
**kwargs,
|
|
113
112
|
)
|
|
114
113
|
|