Authlib 1.9.2__tar.gz → 1.9.4__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.
Files changed (227) hide show
  1. {authlib-1.9.2 → authlib-1.9.4}/Authlib.egg-info/PKG-INFO +1 -1
  2. {authlib-1.9.2 → authlib-1.9.4}/PKG-INFO +1 -1
  3. {authlib-1.9.2 → authlib-1.9.4}/authlib/consts.py +1 -1
  4. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/drafts/id_jag.py +20 -2
  5. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/grants/hybrid.py +2 -0
  6. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/grants/implicit.py +2 -0
  7. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/grants/util.py +23 -0
  8. {authlib-1.9.2 → authlib-1.9.4}/Authlib.egg-info/SOURCES.txt +0 -0
  9. {authlib-1.9.2 → authlib-1.9.4}/Authlib.egg-info/dependency_links.txt +0 -0
  10. {authlib-1.9.2 → authlib-1.9.4}/Authlib.egg-info/requires.txt +0 -0
  11. {authlib-1.9.2 → authlib-1.9.4}/Authlib.egg-info/top_level.txt +0 -0
  12. {authlib-1.9.2 → authlib-1.9.4}/LICENSE +0 -0
  13. {authlib-1.9.2 → authlib-1.9.4}/MANIFEST.in +0 -0
  14. {authlib-1.9.2 → authlib-1.9.4}/README.md +0 -0
  15. {authlib-1.9.2 → authlib-1.9.4}/authlib/__init__.py +0 -0
  16. {authlib-1.9.2 → authlib-1.9.4}/authlib/_joserfc_helpers.py +0 -0
  17. {authlib-1.9.2 → authlib-1.9.4}/authlib/common/__init__.py +0 -0
  18. {authlib-1.9.2 → authlib-1.9.4}/authlib/common/encoding.py +0 -0
  19. {authlib-1.9.2 → authlib-1.9.4}/authlib/common/errors.py +0 -0
  20. {authlib-1.9.2 → authlib-1.9.4}/authlib/common/language.py +0 -0
  21. {authlib-1.9.2 → authlib-1.9.4}/authlib/common/security.py +0 -0
  22. {authlib-1.9.2 → authlib-1.9.4}/authlib/common/urls.py +0 -0
  23. {authlib-1.9.2 → authlib-1.9.4}/authlib/deprecate.py +0 -0
  24. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/__init__.py +0 -0
  25. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/base_client/__init__.py +0 -0
  26. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/base_client/async_app.py +0 -0
  27. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/base_client/async_openid.py +0 -0
  28. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/base_client/errors.py +0 -0
  29. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/base_client/framework_integration.py +0 -0
  30. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/base_client/registry.py +0 -0
  31. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/base_client/sync_app.py +0 -0
  32. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/base_client/sync_openid.py +0 -0
  33. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_client/__init__.py +0 -0
  34. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_client/apps.py +0 -0
  35. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_client/integration.py +0 -0
  36. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth1/__init__.py +0 -0
  37. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth1/authorization_server.py +0 -0
  38. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth1/nonce.py +0 -0
  39. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth1/resource_protector.py +0 -0
  40. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth2/__init__.py +0 -0
  41. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth2/authorization_server.py +0 -0
  42. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth2/endpoints.py +0 -0
  43. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth2/requests.py +0 -0
  44. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth2/resource_protector.py +0 -0
  45. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/django_oauth2/signals.py +0 -0
  46. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_client/__init__.py +0 -0
  47. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_client/apps.py +0 -0
  48. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_client/integration.py +0 -0
  49. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth1/__init__.py +0 -0
  50. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth1/authorization_server.py +0 -0
  51. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth1/cache.py +0 -0
  52. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth1/resource_protector.py +0 -0
  53. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth2/__init__.py +0 -0
  54. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth2/authorization_server.py +0 -0
  55. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth2/errors.py +0 -0
  56. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth2/requests.py +0 -0
  57. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth2/resource_protector.py +0 -0
  58. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/flask_oauth2/signals.py +0 -0
  59. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/httpx_client/__init__.py +0 -0
  60. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/httpx_client/_compat.py +0 -0
  61. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/httpx_client/assertion_client.py +0 -0
  62. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/httpx_client/oauth1_client.py +0 -0
  63. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/httpx_client/oauth2_client.py +0 -0
  64. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/httpx_client/utils.py +0 -0
  65. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/requests_client/__init__.py +0 -0
  66. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/requests_client/assertion_session.py +0 -0
  67. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/requests_client/oauth1_session.py +0 -0
  68. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/requests_client/oauth2_session.py +0 -0
  69. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/requests_client/utils.py +0 -0
  70. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/sqla_oauth2/__init__.py +0 -0
  71. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/sqla_oauth2/client_mixin.py +0 -0
  72. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/sqla_oauth2/functions.py +0 -0
  73. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/sqla_oauth2/tokens_mixins.py +0 -0
  74. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/starlette_client/__init__.py +0 -0
  75. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/starlette_client/apps.py +0 -0
  76. {authlib-1.9.2 → authlib-1.9.4}/authlib/integrations/starlette_client/integration.py +0 -0
  77. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/__init__.py +0 -0
  78. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/drafts/__init__.py +0 -0
  79. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/drafts/_jwe_algorithms.py +0 -0
  80. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/drafts/_jwe_enc_cryptodome.py +0 -0
  81. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/drafts/_jwe_enc_cryptography.py +0 -0
  82. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/errors.py +0 -0
  83. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/jwk.py +0 -0
  84. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7515/__init__.py +0 -0
  85. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7515/jws.py +0 -0
  86. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7515/models.py +0 -0
  87. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7516/__init__.py +0 -0
  88. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7516/jwe.py +0 -0
  89. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7516/models.py +0 -0
  90. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7517/__init__.py +0 -0
  91. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7517/_cryptography_key.py +0 -0
  92. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7517/asymmetric_key.py +0 -0
  93. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7517/base_key.py +0 -0
  94. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7517/jwk.py +0 -0
  95. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7517/key_set.py +0 -0
  96. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/__init__.py +0 -0
  97. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/ec_key.py +0 -0
  98. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/jwe_algs.py +0 -0
  99. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/jwe_encs.py +0 -0
  100. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/jwe_zips.py +0 -0
  101. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/jws_algs.py +0 -0
  102. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/oct_key.py +0 -0
  103. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/rsa_key.py +0 -0
  104. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7518/util.py +0 -0
  105. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7519/__init__.py +0 -0
  106. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7519/claims.py +0 -0
  107. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc7519/jwt.py +0 -0
  108. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc8037/__init__.py +0 -0
  109. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc8037/jws_eddsa.py +0 -0
  110. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/rfc8037/okp_key.py +0 -0
  111. {authlib-1.9.2 → authlib-1.9.4}/authlib/jose/util.py +0 -0
  112. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/__init__.py +0 -0
  113. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/client.py +0 -0
  114. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/errors.py +0 -0
  115. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/__init__.py +0 -0
  116. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/authorization_server.py +0 -0
  117. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/base_server.py +0 -0
  118. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/client_auth.py +0 -0
  119. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/errors.py +0 -0
  120. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/models.py +0 -0
  121. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/parameters.py +0 -0
  122. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/resource_protector.py +0 -0
  123. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/rsa.py +0 -0
  124. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/signature.py +0 -0
  125. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/util.py +0 -0
  126. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth1/rfc5849/wrapper.py +0 -0
  127. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/__init__.py +0 -0
  128. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/auth.py +0 -0
  129. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/base.py +0 -0
  130. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/claims.py +0 -0
  131. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/client.py +0 -0
  132. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/drafts/__init__.py +0 -0
  133. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/__init__.py +0 -0
  134. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/authenticate_client.py +0 -0
  135. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/authorization_server.py +0 -0
  136. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/endpoint.py +0 -0
  137. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/errors.py +0 -0
  138. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/grants/__init__.py +0 -0
  139. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/grants/authorization_code.py +0 -0
  140. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/grants/base.py +0 -0
  141. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/grants/client_credentials.py +0 -0
  142. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/grants/implicit.py +0 -0
  143. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/grants/refresh_token.py +0 -0
  144. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/grants/resource_owner_password_credentials.py +0 -0
  145. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/hooks.py +0 -0
  146. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/models.py +0 -0
  147. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/parameters.py +0 -0
  148. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/requests.py +0 -0
  149. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/resource_protector.py +0 -0
  150. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/token_endpoint.py +0 -0
  151. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/util.py +0 -0
  152. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6749/wrappers.py +0 -0
  153. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6750/__init__.py +0 -0
  154. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6750/errors.py +0 -0
  155. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6750/parameters.py +0 -0
  156. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6750/token.py +0 -0
  157. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc6750/validator.py +0 -0
  158. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7009/__init__.py +0 -0
  159. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7009/parameters.py +0 -0
  160. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7009/revocation.py +0 -0
  161. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7521/__init__.py +0 -0
  162. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7521/client.py +0 -0
  163. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7523/__init__.py +0 -0
  164. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7523/assertion.py +0 -0
  165. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7523/auth.py +0 -0
  166. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7523/client.py +0 -0
  167. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7523/jwt_bearer.py +0 -0
  168. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7523/token.py +0 -0
  169. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7523/validator.py +0 -0
  170. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7591/__init__.py +0 -0
  171. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7591/claims.py +0 -0
  172. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7591/endpoint.py +0 -0
  173. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7591/errors.py +0 -0
  174. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7592/__init__.py +0 -0
  175. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7592/endpoint.py +0 -0
  176. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7636/__init__.py +0 -0
  177. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7636/challenge.py +0 -0
  178. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7662/__init__.py +0 -0
  179. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7662/introspection.py +0 -0
  180. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7662/models.py +0 -0
  181. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc7662/token_validator.py +0 -0
  182. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8414/__init__.py +0 -0
  183. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8414/models.py +0 -0
  184. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8414/well_known.py +0 -0
  185. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8628/__init__.py +0 -0
  186. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8628/device_code.py +0 -0
  187. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8628/endpoint.py +0 -0
  188. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8628/errors.py +0 -0
  189. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8628/models.py +0 -0
  190. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc8693/__init__.py +0 -0
  191. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9068/__init__.py +0 -0
  192. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9068/claims.py +0 -0
  193. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9068/introspection.py +0 -0
  194. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9068/revocation.py +0 -0
  195. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9068/token.py +0 -0
  196. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9068/token_validator.py +0 -0
  197. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9101/__init__.py +0 -0
  198. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9101/authorization_server.py +0 -0
  199. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9101/discovery.py +0 -0
  200. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9101/errors.py +0 -0
  201. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9101/registration.py +0 -0
  202. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9207/__init__.py +0 -0
  203. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9207/discovery.py +0 -0
  204. {authlib-1.9.2 → authlib-1.9.4}/authlib/oauth2/rfc9207/parameter.py +0 -0
  205. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/__init__.py +0 -0
  206. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/__init__.py +0 -0
  207. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/authorization_request.py +0 -0
  208. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/claims.py +0 -0
  209. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/errors.py +0 -0
  210. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/grants/__init__.py +0 -0
  211. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/grants/_legacy.py +0 -0
  212. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/grants/code.py +0 -0
  213. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/models.py +0 -0
  214. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/userinfo.py +0 -0
  215. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/core/util.py +0 -0
  216. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/discovery/__init__.py +0 -0
  217. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/discovery/models.py +0 -0
  218. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/discovery/well_known.py +0 -0
  219. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/registration/__init__.py +0 -0
  220. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/registration/claims.py +0 -0
  221. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/rpinitiated/__init__.py +0 -0
  222. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/rpinitiated/discovery.py +0 -0
  223. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/rpinitiated/end_session.py +0 -0
  224. {authlib-1.9.2 → authlib-1.9.4}/authlib/oidc/rpinitiated/registration.py +0 -0
  225. {authlib-1.9.2 → authlib-1.9.4}/pyproject.toml +0 -0
  226. {authlib-1.9.2 → authlib-1.9.4}/setup.cfg +0 -0
  227. {authlib-1.9.2 → authlib-1.9.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Authlib
3
- Version: 1.9.2
3
+ Version: 1.9.4
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Authlib
3
- Version: 1.9.2
3
+ Version: 1.9.4
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
@@ -1,5 +1,5 @@
1
1
  name = "Authlib"
2
- version = "1.9.2"
2
+ version = "1.9.4"
3
3
  author = "Hsiaoming Yang <me@lepture.com>"
4
4
  homepage = "https://authlib.org"
5
5
  default_user_agent = f"{name}/{version} (+{homepage})"
@@ -161,6 +161,7 @@ class IDJAGGrant(BaseGrant, TokenEndpointMixin):
161
161
  raise InvalidRequestError("Missing 'assertion' in request")
162
162
 
163
163
  claims = self._process_assertion_claims(assertion)
164
+ self.request.id_jag_claims = claims
164
165
 
165
166
  client_id_claim = claims["client_id"]
166
167
  if client.get_client_id() != client_id_claim:
@@ -328,7 +329,19 @@ class IDJAGGrant(BaseGrant, TokenEndpointMixin):
328
329
  raise NotImplementedError()
329
330
 
330
331
  def authenticate_user(self, subject):
331
- """Return the user identified by the ``sub`` claim, or *None*."""
332
+ """Return the user identified by the ``sub`` claim, or *None*.
333
+
334
+ Per the ID-JAG draft -06 §3.1, ``sub`` is only unique within its issuer,
335
+ and within its ``tenant`` for a multi-tenant issuer. When the server
336
+ trusts several IdPs, resolve the user with the issuer too (§4.1). The
337
+ verified claims are in ``self.request.id_jag_claims``::
338
+
339
+ def authenticate_user(self, subject):
340
+ issuer = self.request.id_jag_claims["iss"]
341
+ return User.query.filter_by(issuer=issuer, sub=subject).first()
342
+
343
+ :param subject: the ``sub`` claim of the ID-JAG
344
+ """
332
345
  raise NotImplementedError()
333
346
 
334
347
  def check_jti(self, claims, jti) -> bool:
@@ -338,5 +351,10 @@ class IDJAGGrant(BaseGrant, TokenEndpointMixin):
338
351
 
339
352
  def check_id_jag_permission(self, client, user, scopes) -> bool:
340
353
  """Application policy: return *True* if *client* may act on
341
- behalf of *user* for *scopes*."""
354
+ behalf of *user* for *scopes*.
355
+
356
+ The verified claims of the ID-JAG are in
357
+ ``self.request.id_jag_claims``, for a policy that depends on the
358
+ issuer or the tenant.
359
+ """
342
360
  raise NotImplementedError()
@@ -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