Authlib 1.9.1__tar.gz → 1.9.3__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.9.1 → authlib-1.9.3}/Authlib.egg-info/PKG-INFO +1 -1
- {authlib-1.9.1 → authlib-1.9.3}/PKG-INFO +1 -1
- {authlib-1.9.1 → authlib-1.9.3}/authlib/consts.py +1 -1
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/drafts/id_jag.py +29 -2
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/grants/hybrid.py +2 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/grants/implicit.py +2 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/grants/util.py +23 -0
- {authlib-1.9.1 → authlib-1.9.3}/Authlib.egg-info/SOURCES.txt +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/Authlib.egg-info/dependency_links.txt +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/Authlib.egg-info/requires.txt +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/Authlib.egg-info/top_level.txt +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/LICENSE +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/MANIFEST.in +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/README.md +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/_joserfc_helpers.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/common/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/common/encoding.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/common/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/common/language.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/common/security.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/common/urls.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/deprecate.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/base_client/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/base_client/async_app.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/base_client/async_openid.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/base_client/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/base_client/framework_integration.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/base_client/registry.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/base_client/sync_app.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/base_client/sync_openid.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_client/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_client/apps.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_client/integration.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth1/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth1/authorization_server.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth1/nonce.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth1/resource_protector.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth2/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth2/authorization_server.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth2/endpoints.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth2/requests.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth2/resource_protector.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/django_oauth2/signals.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_client/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_client/apps.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_client/integration.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth1/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth1/authorization_server.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth1/cache.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth1/resource_protector.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth2/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth2/authorization_server.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth2/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth2/requests.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth2/resource_protector.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/flask_oauth2/signals.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/httpx_client/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/httpx_client/_compat.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/httpx_client/assertion_client.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/httpx_client/oauth1_client.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/httpx_client/oauth2_client.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/httpx_client/utils.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/requests_client/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/requests_client/assertion_session.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/requests_client/oauth1_session.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/requests_client/oauth2_session.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/requests_client/utils.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/sqla_oauth2/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/sqla_oauth2/client_mixin.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/sqla_oauth2/functions.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/sqla_oauth2/tokens_mixins.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/starlette_client/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/starlette_client/apps.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/integrations/starlette_client/integration.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/drafts/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/drafts/_jwe_algorithms.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/drafts/_jwe_enc_cryptodome.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/drafts/_jwe_enc_cryptography.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/jwk.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7515/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7515/jws.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7515/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7516/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7516/jwe.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7516/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7517/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7517/_cryptography_key.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7517/asymmetric_key.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7517/base_key.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7517/jwk.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7517/key_set.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/ec_key.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/jwe_algs.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/jwe_encs.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/jwe_zips.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/jws_algs.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/oct_key.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/rsa_key.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7518/util.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7519/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7519/claims.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc7519/jwt.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc8037/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc8037/jws_eddsa.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/rfc8037/okp_key.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/jose/util.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/client.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/authorization_server.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/base_server.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/client_auth.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/parameters.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/resource_protector.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/rsa.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/signature.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/util.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth1/rfc5849/wrapper.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/auth.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/base.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/claims.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/client.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/drafts/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/authenticate_client.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/authorization_server.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/endpoint.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/grants/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/grants/authorization_code.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/grants/base.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/grants/client_credentials.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/grants/implicit.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/grants/refresh_token.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/grants/resource_owner_password_credentials.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/hooks.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/parameters.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/requests.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/resource_protector.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/token_endpoint.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/util.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6749/wrappers.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6750/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6750/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6750/parameters.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6750/token.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc6750/validator.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7009/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7009/parameters.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7009/revocation.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7521/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7521/client.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7523/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7523/assertion.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7523/auth.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7523/client.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7523/jwt_bearer.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7523/token.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7523/validator.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7591/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7591/claims.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7591/endpoint.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7591/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7592/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7592/endpoint.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7636/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7636/challenge.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7662/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7662/introspection.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7662/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc7662/token_validator.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8414/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8414/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8414/well_known.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8628/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8628/device_code.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8628/endpoint.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8628/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8628/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc8693/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9068/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9068/claims.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9068/introspection.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9068/revocation.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9068/token.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9068/token_validator.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9101/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9101/authorization_server.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9101/discovery.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9101/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9101/registration.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9207/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9207/discovery.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oauth2/rfc9207/parameter.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/authorization_request.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/claims.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/errors.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/grants/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/grants/_legacy.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/grants/code.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/userinfo.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/core/util.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/discovery/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/discovery/models.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/discovery/well_known.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/registration/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/registration/claims.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/rpinitiated/__init__.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/rpinitiated/discovery.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/rpinitiated/end_session.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/authlib/oidc/rpinitiated/registration.py +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/pyproject.toml +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/setup.cfg +0 -0
- {authlib-1.9.1 → authlib-1.9.3}/setup.py +0 -0
|
@@ -32,6 +32,7 @@ from authlib.common.security import generate_token
|
|
|
32
32
|
from ..rfc6749 import BaseGrant
|
|
33
33
|
from ..rfc6749 import InvalidGrantError
|
|
34
34
|
from ..rfc6749 import InvalidRequestError
|
|
35
|
+
from ..rfc6749 import InvalidScopeError
|
|
35
36
|
from ..rfc6749 import TokenEndpointMixin
|
|
36
37
|
from ..rfc6749 import UnauthorizedClientError
|
|
37
38
|
from ..rfc6749 import scope_to_list
|
|
@@ -182,6 +183,7 @@ class IDJAGGrant(BaseGrant, TokenEndpointMixin):
|
|
|
182
183
|
self.request.client = client
|
|
183
184
|
log.debug("Validate token request of %s", client)
|
|
184
185
|
self.validate_requested_scope()
|
|
186
|
+
self.request.scope = self._resolve_scope(claims)
|
|
185
187
|
|
|
186
188
|
# Authenticate user from sub claim (required by ID-JAG).
|
|
187
189
|
user = self.authenticate_user(claims["sub"])
|
|
@@ -189,7 +191,7 @@ class IDJAGGrant(BaseGrant, TokenEndpointMixin):
|
|
|
189
191
|
raise InvalidGrantError(description="Invalid 'sub' value in assertion")
|
|
190
192
|
|
|
191
193
|
# Application policy check.
|
|
192
|
-
scopes = scope_to_list(self.request.
|
|
194
|
+
scopes = scope_to_list(self.request.scope) or []
|
|
193
195
|
if not self.check_id_jag_permission(client, user, scopes):
|
|
194
196
|
raise InvalidGrantError(
|
|
195
197
|
description=(
|
|
@@ -203,7 +205,7 @@ class IDJAGGrant(BaseGrant, TokenEndpointMixin):
|
|
|
203
205
|
def create_token_response(self):
|
|
204
206
|
"""Issue an access token (no refresh token per the ID-JAG draft)."""
|
|
205
207
|
token = self.generate_token(
|
|
206
|
-
scope=self.request.
|
|
208
|
+
scope=self.request.scope,
|
|
207
209
|
user=self.request.user,
|
|
208
210
|
include_refresh_token=False,
|
|
209
211
|
)
|
|
@@ -241,6 +243,31 @@ class IDJAGGrant(BaseGrant, TokenEndpointMixin):
|
|
|
241
243
|
|
|
242
244
|
return token.claims
|
|
243
245
|
|
|
246
|
+
def _resolve_scope(self, claims):
|
|
247
|
+
"""Return the scope of the access token.
|
|
248
|
+
|
|
249
|
+
The scope is bounded by the scope claim of the assertion, and
|
|
250
|
+
defaults to it. Without that claim, the requested scope is used.
|
|
251
|
+
"""
|
|
252
|
+
requested = self.request.payload.scope
|
|
253
|
+
if "scope" not in claims:
|
|
254
|
+
return requested
|
|
255
|
+
|
|
256
|
+
granted = claims["scope"]
|
|
257
|
+
if not isinstance(granted, str):
|
|
258
|
+
raise InvalidGrantError(description="Invalid 'scope' claim in assertion")
|
|
259
|
+
|
|
260
|
+
if not requested:
|
|
261
|
+
return granted
|
|
262
|
+
|
|
263
|
+
# RFC 7521 §4.1: "the requested scope MUST be equal to or less than
|
|
264
|
+
# the scope originally granted to the authorized accessor."
|
|
265
|
+
if not set(scope_to_list(requested)).issubset(scope_to_list(granted)):
|
|
266
|
+
raise InvalidScopeError(
|
|
267
|
+
description="The requested scope exceeds the 'scope' claim in assertion"
|
|
268
|
+
)
|
|
269
|
+
return requested
|
|
270
|
+
|
|
244
271
|
def _extract_assertion(self, assertion: str):
|
|
245
272
|
try:
|
|
246
273
|
obj = jws.extract_compact(to_bytes(assertion))
|
|
@@ -8,6 +8,7 @@ from authlib.oauth2.rfc6749.grants.authorization_code import (
|
|
|
8
8
|
|
|
9
9
|
from .implicit import OpenIDImplicitGrant
|
|
10
10
|
from .util import is_openid_scope
|
|
11
|
+
from .util import validate_form_post_redirect_uri
|
|
11
12
|
from .util import validate_nonce
|
|
12
13
|
|
|
13
14
|
log = logging.getLogger(__name__)
|
|
@@ -56,6 +57,7 @@ class OpenIDHybridGrant(OpenIDImplicitGrant):
|
|
|
56
57
|
),
|
|
57
58
|
)
|
|
58
59
|
redirect_uri = validate_code_authorization_request(self)
|
|
60
|
+
validate_form_post_redirect_uri(self, redirect_uri)
|
|
59
61
|
if not is_openid_scope(self.request.scope):
|
|
60
62
|
raise InvalidScopeError(
|
|
61
63
|
"Missing 'openid' scope",
|
|
@@ -15,6 +15,7 @@ from ._legacy import LegacyMixin
|
|
|
15
15
|
from .util import create_half_hash
|
|
16
16
|
from .util import create_response_mode_response
|
|
17
17
|
from .util import is_openid_scope
|
|
18
|
+
from .util import validate_form_post_redirect_uri
|
|
18
19
|
from .util import validate_nonce
|
|
19
20
|
from .util import validate_request_prompt
|
|
20
21
|
|
|
@@ -69,6 +70,7 @@ class OpenIDImplicitGrant(LegacyMixin, ImplicitGrant):
|
|
|
69
70
|
|
|
70
71
|
def validate_authorization_request(self):
|
|
71
72
|
redirect_uri = super().validate_authorization_request()
|
|
73
|
+
validate_form_post_redirect_uri(self, redirect_uri)
|
|
72
74
|
if not is_openid_scope(self.request.scope):
|
|
73
75
|
raise InvalidScopeError(
|
|
74
76
|
"Missing 'openid' scope",
|
|
@@ -6,6 +6,7 @@ from authlib._joserfc_helpers import import_any_key
|
|
|
6
6
|
from authlib.common.encoding import to_native
|
|
7
7
|
from authlib.common.urls import add_params_to_uri
|
|
8
8
|
from authlib.common.urls import quote_url
|
|
9
|
+
from authlib.common.urls import urlparse
|
|
9
10
|
from authlib.oauth2.rfc6749 import InvalidRequestError
|
|
10
11
|
from authlib.oauth2.rfc6749 import scope_to_list
|
|
11
12
|
|
|
@@ -51,6 +52,28 @@ def validate_request_prompt(grant, redirect_uri, redirect_fragment=False):
|
|
|
51
52
|
return grant
|
|
52
53
|
|
|
53
54
|
|
|
55
|
+
def validate_form_post_redirect_uri(grant, redirect_uri):
|
|
56
|
+
"""Reject the ``form_post`` response mode for a non-HTTP redirect URI.
|
|
57
|
+
|
|
58
|
+
With ``form_post``, the user-agent submits an HTML form to the redirect
|
|
59
|
+
URI. A ``javascript:`` redirect URI would then run a script in the
|
|
60
|
+
origin of the authorization server.
|
|
61
|
+
|
|
62
|
+
:param grant: the grant that validates the authorization request
|
|
63
|
+
:param redirect_uri: the redirect URI of the authorization request
|
|
64
|
+
:raises InvalidRequestError: if the redirect URI scheme is not http or https
|
|
65
|
+
"""
|
|
66
|
+
response_mode = grant.request.payload.data.get(
|
|
67
|
+
"response_mode", grant.DEFAULT_RESPONSE_MODE
|
|
68
|
+
)
|
|
69
|
+
if response_mode != "form_post":
|
|
70
|
+
return
|
|
71
|
+
if urlparse.urlparse(redirect_uri).scheme not in ("http", "https"):
|
|
72
|
+
raise InvalidRequestError(
|
|
73
|
+
"The 'form_post' response mode requires an http or https redirect URI."
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
54
77
|
def validate_nonce(request, exists_nonce, required=False):
|
|
55
78
|
nonce = request.payload.data.get("nonce")
|
|
56
79
|
if not nonce:
|
|
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
|
|
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.9.1 → authlib-1.9.3}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|