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