tokens.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. """
  2. authlib.openid.connect.core.tokens
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. This module contains methods for adding JWT tokens to requests.
  5. """
  6. from oauthlib.oauth2.rfc6749.tokens import (
  7. TokenBase, get_token_from_header, random_token_generator,
  8. )
  9. class JWTToken(TokenBase):
  10. __slots__ = (
  11. 'request_validator', 'token_generator',
  12. 'refresh_token_generator', 'expires_in'
  13. )
  14. def __init__(self, request_validator=None, token_generator=None,
  15. expires_in=None, refresh_token_generator=None):
  16. self.request_validator = request_validator
  17. self.token_generator = token_generator or random_token_generator
  18. self.refresh_token_generator = (
  19. refresh_token_generator or self.token_generator
  20. )
  21. self.expires_in = expires_in or 3600
  22. def create_token(self, request, refresh_token=False):
  23. """Create a JWT Token, using requestvalidator method."""
  24. if callable(self.expires_in):
  25. expires_in = self.expires_in(request)
  26. else:
  27. expires_in = self.expires_in
  28. request.expires_in = expires_in
  29. return self.request_validator.get_jwt_bearer_token(None, None, request)
  30. def validate_request(self, request):
  31. token = get_token_from_header(request)
  32. return self.request_validator.validate_jwt_bearer_token(
  33. token, request.scopes, request)
  34. def estimate_type(self, request):
  35. token = get_token_from_header(request)
  36. if token and token.startswith('ey') and token.count('.') in (2, 4):
  37. return 10
  38. return 0