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.
Files changed (226) hide show
  1. {authlib-1.7.1 → authlib-1.8.0}/Authlib.egg-info/PKG-INFO +41 -41
  2. {authlib-1.7.1 → authlib-1.8.0}/Authlib.egg-info/SOURCES.txt +2 -0
  3. authlib-1.8.0/Authlib.egg-info/requires.txt +2 -0
  4. {authlib-1.7.1 → authlib-1.8.0}/PKG-INFO +41 -41
  5. {authlib-1.7.1 → authlib-1.8.0}/README.md +38 -38
  6. authlib-1.8.0/authlib/common/language.py +13 -0
  7. authlib-1.8.0/authlib/common/security.py +48 -0
  8. {authlib-1.7.1 → authlib-1.8.0}/authlib/common/urls.py +11 -2
  9. {authlib-1.7.1 → authlib-1.8.0}/authlib/consts.py +1 -1
  10. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/async_openid.py +3 -2
  11. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/sync_openid.py +3 -2
  12. authlib-1.8.0/authlib/integrations/httpx_client/_compat.py +18 -0
  13. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/assertion_client.py +12 -13
  14. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/oauth1_client.py +10 -15
  15. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/oauth2_client.py +16 -17
  16. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/utils.py +7 -2
  17. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/assertion_session.py +2 -0
  18. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/errors.py +1 -1
  19. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7521/client.py +4 -0
  20. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/assertion.py +7 -1
  21. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/auth.py +3 -1
  22. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/client.py +18 -1
  23. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/jwt_bearer.py +26 -3
  24. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/token.py +1 -1
  25. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/validator.py +3 -2
  26. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8414/models.py +11 -1
  27. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/endpoint.py +1 -1
  28. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/token.py +1 -1
  29. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/token_validator.py +1 -2
  30. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/claims.py +7 -0
  31. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/_legacy.py +12 -8
  32. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/code.py +6 -4
  33. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/discovery/models.py +2 -1
  34. {authlib-1.7.1 → authlib-1.8.0}/pyproject.toml +21 -22
  35. authlib-1.7.1/Authlib.egg-info/requires.txt +0 -2
  36. authlib-1.7.1/authlib/common/security.py +0 -21
  37. {authlib-1.7.1 → authlib-1.8.0}/Authlib.egg-info/dependency_links.txt +0 -0
  38. {authlib-1.7.1 → authlib-1.8.0}/Authlib.egg-info/top_level.txt +0 -0
  39. {authlib-1.7.1 → authlib-1.8.0}/LICENSE +0 -0
  40. {authlib-1.7.1 → authlib-1.8.0}/MANIFEST.in +0 -0
  41. {authlib-1.7.1 → authlib-1.8.0}/authlib/__init__.py +0 -0
  42. {authlib-1.7.1 → authlib-1.8.0}/authlib/_joserfc_helpers.py +0 -0
  43. {authlib-1.7.1 → authlib-1.8.0}/authlib/common/__init__.py +0 -0
  44. {authlib-1.7.1 → authlib-1.8.0}/authlib/common/encoding.py +0 -0
  45. {authlib-1.7.1 → authlib-1.8.0}/authlib/common/errors.py +0 -0
  46. {authlib-1.7.1 → authlib-1.8.0}/authlib/deprecate.py +0 -0
  47. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/__init__.py +0 -0
  48. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/__init__.py +0 -0
  49. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/async_app.py +0 -0
  50. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/errors.py +0 -0
  51. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/framework_integration.py +0 -0
  52. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/registry.py +0 -0
  53. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/base_client/sync_app.py +0 -0
  54. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_client/__init__.py +0 -0
  55. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_client/apps.py +0 -0
  56. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_client/integration.py +0 -0
  57. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth1/__init__.py +0 -0
  58. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth1/authorization_server.py +0 -0
  59. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth1/nonce.py +0 -0
  60. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth1/resource_protector.py +0 -0
  61. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/__init__.py +0 -0
  62. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/authorization_server.py +0 -0
  63. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/endpoints.py +0 -0
  64. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/requests.py +0 -0
  65. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/resource_protector.py +0 -0
  66. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/django_oauth2/signals.py +0 -0
  67. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_client/__init__.py +0 -0
  68. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_client/apps.py +0 -0
  69. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_client/integration.py +0 -0
  70. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth1/__init__.py +0 -0
  71. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth1/authorization_server.py +0 -0
  72. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth1/cache.py +0 -0
  73. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth1/resource_protector.py +0 -0
  74. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/__init__.py +0 -0
  75. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/authorization_server.py +0 -0
  76. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/errors.py +0 -0
  77. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/requests.py +0 -0
  78. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/resource_protector.py +0 -0
  79. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/flask_oauth2/signals.py +0 -0
  80. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/httpx_client/__init__.py +0 -0
  81. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/__init__.py +0 -0
  82. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/oauth1_session.py +0 -0
  83. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/oauth2_session.py +0 -0
  84. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/requests_client/utils.py +0 -0
  85. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/sqla_oauth2/__init__.py +0 -0
  86. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/sqla_oauth2/client_mixin.py +0 -0
  87. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/sqla_oauth2/functions.py +0 -0
  88. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/sqla_oauth2/tokens_mixins.py +0 -0
  89. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/starlette_client/__init__.py +0 -0
  90. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/starlette_client/apps.py +0 -0
  91. {authlib-1.7.1 → authlib-1.8.0}/authlib/integrations/starlette_client/integration.py +0 -0
  92. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/__init__.py +0 -0
  93. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/drafts/__init__.py +0 -0
  94. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/drafts/_jwe_algorithms.py +0 -0
  95. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/drafts/_jwe_enc_cryptodome.py +0 -0
  96. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/drafts/_jwe_enc_cryptography.py +0 -0
  97. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/errors.py +0 -0
  98. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/jwk.py +0 -0
  99. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7515/__init__.py +0 -0
  100. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7515/jws.py +0 -0
  101. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7515/models.py +0 -0
  102. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7516/__init__.py +0 -0
  103. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7516/jwe.py +0 -0
  104. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7516/models.py +0 -0
  105. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/__init__.py +0 -0
  106. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/_cryptography_key.py +0 -0
  107. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/asymmetric_key.py +0 -0
  108. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/base_key.py +0 -0
  109. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/jwk.py +0 -0
  110. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7517/key_set.py +0 -0
  111. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/__init__.py +0 -0
  112. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/ec_key.py +0 -0
  113. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/jwe_algs.py +0 -0
  114. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/jwe_encs.py +0 -0
  115. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/jwe_zips.py +0 -0
  116. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/jws_algs.py +0 -0
  117. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/oct_key.py +0 -0
  118. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/rsa_key.py +0 -0
  119. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7518/util.py +0 -0
  120. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7519/__init__.py +0 -0
  121. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7519/claims.py +0 -0
  122. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc7519/jwt.py +0 -0
  123. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc8037/__init__.py +0 -0
  124. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc8037/jws_eddsa.py +0 -0
  125. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/rfc8037/okp_key.py +0 -0
  126. {authlib-1.7.1 → authlib-1.8.0}/authlib/jose/util.py +0 -0
  127. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/__init__.py +0 -0
  128. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/client.py +0 -0
  129. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/errors.py +0 -0
  130. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/__init__.py +0 -0
  131. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/authorization_server.py +0 -0
  132. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/base_server.py +0 -0
  133. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/client_auth.py +0 -0
  134. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/models.py +0 -0
  135. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/parameters.py +0 -0
  136. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/resource_protector.py +0 -0
  137. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/rsa.py +0 -0
  138. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/signature.py +0 -0
  139. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/util.py +0 -0
  140. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth1/rfc5849/wrapper.py +0 -0
  141. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/__init__.py +0 -0
  142. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/auth.py +0 -0
  143. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/base.py +0 -0
  144. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/claims.py +0 -0
  145. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/client.py +0 -0
  146. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/__init__.py +0 -0
  147. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/authenticate_client.py +0 -0
  148. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/authorization_server.py +0 -0
  149. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/endpoint.py +0 -0
  150. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/errors.py +0 -0
  151. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/__init__.py +0 -0
  152. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/authorization_code.py +0 -0
  153. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/base.py +0 -0
  154. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/client_credentials.py +0 -0
  155. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/implicit.py +0 -0
  156. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/refresh_token.py +0 -0
  157. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/grants/resource_owner_password_credentials.py +0 -0
  158. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/hooks.py +0 -0
  159. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/models.py +0 -0
  160. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/parameters.py +0 -0
  161. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/requests.py +0 -0
  162. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/resource_protector.py +0 -0
  163. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/token_endpoint.py +0 -0
  164. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/util.py +0 -0
  165. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6749/wrappers.py +0 -0
  166. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/__init__.py +0 -0
  167. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/errors.py +0 -0
  168. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/parameters.py +0 -0
  169. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/token.py +0 -0
  170. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc6750/validator.py +0 -0
  171. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7009/__init__.py +0 -0
  172. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7009/parameters.py +0 -0
  173. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7009/revocation.py +0 -0
  174. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7521/__init__.py +0 -0
  175. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7523/__init__.py +0 -0
  176. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7591/__init__.py +0 -0
  177. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7591/claims.py +0 -0
  178. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7591/endpoint.py +0 -0
  179. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7591/errors.py +0 -0
  180. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7592/__init__.py +0 -0
  181. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7592/endpoint.py +0 -0
  182. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7636/__init__.py +0 -0
  183. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7636/challenge.py +0 -0
  184. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7662/__init__.py +0 -0
  185. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7662/introspection.py +0 -0
  186. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7662/models.py +0 -0
  187. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc7662/token_validator.py +0 -0
  188. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8414/__init__.py +0 -0
  189. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8414/well_known.py +0 -0
  190. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/__init__.py +0 -0
  191. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/device_code.py +0 -0
  192. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/errors.py +0 -0
  193. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8628/models.py +0 -0
  194. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc8693/__init__.py +0 -0
  195. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/__init__.py +0 -0
  196. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/claims.py +0 -0
  197. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/introspection.py +0 -0
  198. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9068/revocation.py +0 -0
  199. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/__init__.py +0 -0
  200. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/authorization_server.py +0 -0
  201. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/discovery.py +0 -0
  202. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/errors.py +0 -0
  203. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9101/registration.py +0 -0
  204. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9207/__init__.py +0 -0
  205. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9207/discovery.py +0 -0
  206. {authlib-1.7.1 → authlib-1.8.0}/authlib/oauth2/rfc9207/parameter.py +0 -0
  207. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/__init__.py +0 -0
  208. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/__init__.py +0 -0
  209. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/errors.py +0 -0
  210. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/__init__.py +0 -0
  211. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/hybrid.py +0 -0
  212. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/implicit.py +0 -0
  213. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/grants/util.py +0 -0
  214. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/models.py +0 -0
  215. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/userinfo.py +0 -0
  216. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/core/util.py +0 -0
  217. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/discovery/__init__.py +0 -0
  218. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/discovery/well_known.py +0 -0
  219. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/registration/__init__.py +0 -0
  220. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/registration/claims.py +0 -0
  221. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/rpinitiated/__init__.py +0 -0
  222. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/rpinitiated/discovery.py +0 -0
  223. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/rpinitiated/end_session.py +0 -0
  224. {authlib-1.7.1 → authlib-1.8.0}/authlib/oidc/rpinitiated/registration.py +0 -0
  225. {authlib-1.7.1 → authlib-1.8.0}/setup.cfg +0 -0
  226. {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.7.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.0
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/basic/oauth1.html)
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/basic/oauth2.html)
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#requests-oauth-1-0)
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#httpx-oauth-1-0)
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/1/)
139
- - [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/flask/2/)
140
- - [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/flask/2/openid-connect.html)
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/1/)
143
- - [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/django/2/)
144
- - [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/django/2/openid-connect.html)
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
@@ -0,0 +1,2 @@
1
+ cryptography>=45.0.1
2
+ joserfc>=1.6.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Authlib
3
- Version: 1.7.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.0
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/basic/oauth1.html)
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/basic/oauth2.html)
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#requests-oauth-1-0)
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#httpx-oauth-1-0)
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/1/)
139
- - [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/flask/2/)
140
- - [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/flask/2/openid-connect.html)
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/1/)
143
- - [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/django/2/)
144
- - [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/django/2/openid-connect.html)
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/basic/oauth1.html)
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/basic/oauth2.html)
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#requests-oauth-1-0)
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#httpx-oauth-1-0)
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/1/)
101
- - [Flask OAuth 2.0 Provider](https://docs.authlib.org/en/stable/flask/2/)
102
- - [Flask OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/flask/2/openid-connect.html)
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/1/)
105
- - [Django OAuth 2.0 Provider](https://docs.authlib.org/en/stable/django/2/)
106
- - [Django OpenID Connect 1.0 Provider](https://docs.authlib.org/en/stable/django/2/openid-connect.html)
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
- parsed = urlparse.urlparse(url)
144
- return (
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,5 +1,5 @@
1
1
  name = "Authlib"
2
- version = "1.7.1"
2
+ version = "1.8.0"
3
3
  author = "Hsiaoming Yang <me@lepture.com>"
4
4
  homepage = "https://authlib.org"
5
5
  default_user_agent = f"{name}/{version} (+{homepage})"
@@ -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, httpx.AsyncClient):
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
- httpx.AsyncClient.__init__(self, **client_kwargs)
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, httpx.Client):
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
- # app keyword was dropped!
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