Authlib 1.6.5__tar.gz → 1.6.6__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.6.5 → authlib-1.6.6}/Authlib.egg-info/PKG-INFO +1 -1
- {authlib-1.6.5 → authlib-1.6.6}/PKG-INFO +1 -1
- {authlib-1.6.5 → authlib-1.6.6}/authlib/__init__.py +2 -1
- {authlib-1.6.5 → authlib-1.6.6}/authlib/consts.py +1 -1
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/base_client/framework_integration.py +13 -12
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/client_auth.py +2 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/wrappers.py +12 -1
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/grants/code.py +16 -4
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/grants/implicit.py +16 -4
- {authlib-1.6.5 → authlib-1.6.6}/Authlib.egg-info/SOURCES.txt +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/Authlib.egg-info/dependency_links.txt +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/Authlib.egg-info/requires.txt +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/Authlib.egg-info/top_level.txt +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/LICENSE +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/MANIFEST.in +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/README.md +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/common/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/common/encoding.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/common/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/common/security.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/common/urls.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/deprecate.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/base_client/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/base_client/async_app.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/base_client/async_openid.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/base_client/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/base_client/registry.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/base_client/sync_app.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/base_client/sync_openid.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_client/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_client/apps.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_client/integration.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth1/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth1/authorization_server.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth1/nonce.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth1/resource_protector.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth2/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth2/authorization_server.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth2/endpoints.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth2/requests.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth2/resource_protector.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/django_oauth2/signals.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_client/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_client/apps.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_client/integration.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth1/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth1/authorization_server.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth1/cache.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth1/resource_protector.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth2/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth2/authorization_server.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth2/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth2/requests.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth2/resource_protector.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/flask_oauth2/signals.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/httpx_client/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/httpx_client/assertion_client.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/httpx_client/oauth1_client.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/httpx_client/oauth2_client.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/httpx_client/utils.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/requests_client/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/requests_client/assertion_session.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/requests_client/oauth1_session.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/requests_client/oauth2_session.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/requests_client/utils.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/sqla_oauth2/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/sqla_oauth2/client_mixin.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/sqla_oauth2/functions.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/sqla_oauth2/tokens_mixins.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/starlette_client/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/starlette_client/apps.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/integrations/starlette_client/integration.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/drafts/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/drafts/_jwe_algorithms.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/drafts/_jwe_enc_cryptodome.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/drafts/_jwe_enc_cryptography.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/jwk.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7515/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7515/jws.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7515/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7516/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7516/jwe.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7516/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7517/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7517/_cryptography_key.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7517/asymmetric_key.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7517/base_key.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7517/jwk.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7517/key_set.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/ec_key.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/jwe_algs.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/jwe_encs.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/jwe_zips.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/jws_algs.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/oct_key.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/rsa_key.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7518/util.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7519/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7519/claims.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc7519/jwt.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc8037/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc8037/jws_eddsa.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/rfc8037/okp_key.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/jose/util.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/client.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/authorization_server.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/base_server.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/parameters.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/resource_protector.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/rsa.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/signature.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/util.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth1/rfc5849/wrapper.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/auth.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/base.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/client.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/authenticate_client.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/authorization_server.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/grants/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/grants/authorization_code.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/grants/base.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/grants/client_credentials.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/grants/implicit.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/grants/refresh_token.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/grants/resource_owner_password_credentials.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/hooks.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/parameters.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/requests.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/resource_protector.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/token_endpoint.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/util.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6750/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6750/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6750/parameters.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6750/token.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6750/validator.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7009/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7009/parameters.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7009/revocation.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7521/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7521/client.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7523/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7523/assertion.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7523/auth.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7523/client.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7523/jwt_bearer.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7523/token.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7523/validator.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7591/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7591/claims.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7591/endpoint.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7591/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7592/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7592/endpoint.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7636/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7636/challenge.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7662/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7662/introspection.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7662/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc7662/token_validator.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8414/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8414/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8414/well_known.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8628/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8628/device_code.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8628/endpoint.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8628/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8628/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc8693/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9068/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9068/claims.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9068/introspection.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9068/revocation.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9068/token.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9068/token_validator.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9101/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9101/authorization_server.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9101/discovery.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9101/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9101/registration.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9207/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc9207/parameter.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/claims.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/errors.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/grants/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/grants/hybrid.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/grants/util.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/userinfo.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/core/util.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/discovery/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/discovery/models.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/discovery/well_known.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/registration/__init__.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/authlib/oidc/registration/claims.py +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/pyproject.toml +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/setup.cfg +0 -0
- {authlib-1.6.5 → authlib-1.6.6}/setup.py +0 -0
|
@@ -20,11 +20,9 @@ class FrameworkIntegration:
|
|
|
20
20
|
|
|
21
21
|
def _clear_session_state(self, session):
|
|
22
22
|
now = time.time()
|
|
23
|
+
prefix = f"_state_{self.name}"
|
|
23
24
|
for key in dict(session):
|
|
24
|
-
if
|
|
25
|
-
# TODO: remove in future
|
|
26
|
-
session.pop(key)
|
|
27
|
-
elif key.startswith("_state_"):
|
|
25
|
+
if key.startswith(prefix):
|
|
28
26
|
value = session[key]
|
|
29
27
|
exp = value.get("exp")
|
|
30
28
|
if not exp or exp < now:
|
|
@@ -32,29 +30,32 @@ class FrameworkIntegration:
|
|
|
32
30
|
|
|
33
31
|
def get_state_data(self, session, state):
|
|
34
32
|
key = f"_state_{self.name}_{state}"
|
|
33
|
+
session_data = session.get(key)
|
|
34
|
+
if not session_data:
|
|
35
|
+
return None
|
|
35
36
|
if self.cache:
|
|
36
|
-
|
|
37
|
+
cached_value = self._get_cache_data(key)
|
|
37
38
|
else:
|
|
38
|
-
|
|
39
|
-
if
|
|
40
|
-
return
|
|
39
|
+
cached_value = session_data
|
|
40
|
+
if cached_value:
|
|
41
|
+
return cached_value.get("data")
|
|
41
42
|
return None
|
|
42
43
|
|
|
43
44
|
def set_state_data(self, session, state, data):
|
|
44
45
|
key = f"_state_{self.name}_{state}"
|
|
46
|
+
now = time.time()
|
|
45
47
|
if self.cache:
|
|
46
48
|
self.cache.set(key, json.dumps({"data": data}), self.expires_in)
|
|
49
|
+
session[key] = {"exp": now + self.expires_in}
|
|
47
50
|
else:
|
|
48
|
-
now = time.time()
|
|
49
51
|
session[key] = {"data": data, "exp": now + self.expires_in}
|
|
50
52
|
|
|
51
53
|
def clear_state_data(self, session, state):
|
|
52
54
|
key = f"_state_{self.name}_{state}"
|
|
53
55
|
if self.cache:
|
|
54
56
|
self.cache.delete(key)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
self._clear_session_state(session)
|
|
57
|
+
session.pop(key, None)
|
|
58
|
+
self._clear_session_state(session)
|
|
58
59
|
|
|
59
60
|
def update_token(self, token, refresh_token=None, access_token=None):
|
|
60
61
|
raise NotImplementedError()
|
|
@@ -172,6 +172,8 @@ class ClientAuth:
|
|
|
172
172
|
|
|
173
173
|
if CONTENT_TYPE_FORM_URLENCODED in content_type:
|
|
174
174
|
headers["Content-Type"] = CONTENT_TYPE_FORM_URLENCODED
|
|
175
|
+
if isinstance(body, bytes):
|
|
176
|
+
body = body.decode()
|
|
175
177
|
uri, headers, body = self.sign(method, uri, headers, body)
|
|
176
178
|
elif self.force_include_body:
|
|
177
179
|
# To allow custom clients to work on non form encoded bodies.
|
|
@@ -4,15 +4,26 @@ import time
|
|
|
4
4
|
class OAuth2Token(dict):
|
|
5
5
|
def __init__(self, params):
|
|
6
6
|
if params.get("expires_at"):
|
|
7
|
-
|
|
7
|
+
try:
|
|
8
|
+
params["expires_at"] = int(params["expires_at"])
|
|
9
|
+
except ValueError:
|
|
10
|
+
# If expires_at is not parseable, fall back to expires_in if available
|
|
11
|
+
# Otherwise leave expires_at untouched
|
|
12
|
+
if params.get("expires_in"):
|
|
13
|
+
params["expires_at"] = int(time.time()) + int(params["expires_in"])
|
|
14
|
+
|
|
8
15
|
elif params.get("expires_in"):
|
|
9
16
|
params["expires_at"] = int(time.time()) + int(params["expires_in"])
|
|
17
|
+
|
|
10
18
|
super().__init__(params)
|
|
11
19
|
|
|
12
20
|
def is_expired(self, leeway=60):
|
|
13
21
|
expires_at = self.get("expires_at")
|
|
14
22
|
if not expires_at:
|
|
15
23
|
return None
|
|
24
|
+
# Only check expiration if expires_at is an integer
|
|
25
|
+
if not isinstance(expires_at, int):
|
|
26
|
+
return None
|
|
16
27
|
# small timedelta to consider token as expired before it actually expires
|
|
17
28
|
expiration_threshold = expires_at - leeway
|
|
18
29
|
return expiration_threshold < time.time()
|
|
@@ -8,6 +8,7 @@ per `Section 3.1`_.
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import logging
|
|
11
|
+
import warnings
|
|
11
12
|
|
|
12
13
|
from authlib.oauth2.rfc6749 import OAuth2Request
|
|
13
14
|
|
|
@@ -20,7 +21,7 @@ log = logging.getLogger(__name__)
|
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class OpenIDToken:
|
|
23
|
-
def get_jwt_config(self, grant): # pragma: no cover
|
|
24
|
+
def get_jwt_config(self, grant, client): # pragma: no cover
|
|
24
25
|
"""Get the JWT configuration for OpenIDCode extension. The JWT
|
|
25
26
|
configuration will be used to generate ``id_token``.
|
|
26
27
|
If ``alg`` is undefined, the ``id_token_signed_response_alg`` client
|
|
@@ -29,15 +30,16 @@ class OpenIDToken:
|
|
|
29
30
|
will be used.
|
|
30
31
|
Developers MUST implement this method in subclass, e.g.::
|
|
31
32
|
|
|
32
|
-
def get_jwt_config(self, grant):
|
|
33
|
+
def get_jwt_config(self, grant, client):
|
|
33
34
|
return {
|
|
34
35
|
"key": read_private_key_file(key_path),
|
|
35
|
-
"alg": "RS256",
|
|
36
|
+
"alg": client.id_token_signed_response_alg or "RS256",
|
|
36
37
|
"iss": "issuer-identity",
|
|
37
38
|
"exp": 3600,
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
:param grant: AuthorizationCodeGrant instance
|
|
42
|
+
:param client: OAuth2 client instance
|
|
41
43
|
:return: dict
|
|
42
44
|
"""
|
|
43
45
|
raise NotImplementedError()
|
|
@@ -78,7 +80,17 @@ class OpenIDToken:
|
|
|
78
80
|
request: OAuth2Request = grant.request
|
|
79
81
|
authorization_code = request.authorization_code
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
try:
|
|
84
|
+
config = self.get_jwt_config(grant, request.client)
|
|
85
|
+
except TypeError:
|
|
86
|
+
warnings.warn(
|
|
87
|
+
"get_jwt_config(self, grant) is deprecated and will be removed in version 1.8. "
|
|
88
|
+
"Use get_jwt_config(self, grant, client) instead.",
|
|
89
|
+
DeprecationWarning,
|
|
90
|
+
stacklevel=2,
|
|
91
|
+
)
|
|
92
|
+
config = self.get_jwt_config(grant)
|
|
93
|
+
|
|
82
94
|
config["aud"] = self.get_audiences(request)
|
|
83
95
|
|
|
84
96
|
# Per OpenID Connect Registration 1.0 Section 2:
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import warnings
|
|
2
3
|
|
|
3
4
|
from authlib.oauth2.rfc6749 import AccessDeniedError
|
|
4
5
|
from authlib.oauth2.rfc6749 import ImplicitGrant
|
|
@@ -36,19 +37,20 @@ class OpenIDImplicitGrant(ImplicitGrant):
|
|
|
36
37
|
"""
|
|
37
38
|
raise NotImplementedError()
|
|
38
39
|
|
|
39
|
-
def get_jwt_config(self):
|
|
40
|
+
def get_jwt_config(self, client):
|
|
40
41
|
"""Get the JWT configuration for OpenIDImplicitGrant. The JWT
|
|
41
42
|
configuration will be used to generate ``id_token``. Developers
|
|
42
43
|
MUST implement this method in subclass, e.g.::
|
|
43
44
|
|
|
44
|
-
def get_jwt_config(self):
|
|
45
|
+
def get_jwt_config(self, client):
|
|
45
46
|
return {
|
|
46
47
|
"key": read_private_key_file(key_path),
|
|
47
|
-
"alg": "RS256",
|
|
48
|
+
"alg": client.id_token_signed_response_alg or "RS256",
|
|
48
49
|
"iss": "issuer-identity",
|
|
49
50
|
"exp": 3600,
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
:param client: OAuth2 client instance
|
|
52
54
|
:return: dict
|
|
53
55
|
"""
|
|
54
56
|
raise NotImplementedError()
|
|
@@ -143,7 +145,17 @@ class OpenIDImplicitGrant(ImplicitGrant):
|
|
|
143
145
|
return params
|
|
144
146
|
|
|
145
147
|
def process_implicit_token(self, token, code=None):
|
|
146
|
-
|
|
148
|
+
try:
|
|
149
|
+
config = self.get_jwt_config(self.request.client)
|
|
150
|
+
except TypeError:
|
|
151
|
+
warnings.warn(
|
|
152
|
+
"get_jwt_config(self) is deprecated and will be removed in version 1.8. "
|
|
153
|
+
"Use get_jwt_config(self, client) instead.",
|
|
154
|
+
DeprecationWarning,
|
|
155
|
+
stacklevel=2,
|
|
156
|
+
)
|
|
157
|
+
config = self.get_jwt_config()
|
|
158
|
+
|
|
147
159
|
config["aud"] = self.get_audiences(self.request)
|
|
148
160
|
config["nonce"] = self.request.payload.data.get("nonce")
|
|
149
161
|
if code is not None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{authlib-1.6.5 → authlib-1.6.6}/authlib/oauth2/rfc6749/grants/resource_owner_password_credentials.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|