25
25
26
26
from firebase_admin import credentials
27
27
28
- # Provided for overriding during tests.
29
- _request = transport .requests .Request ()
30
28
31
29
# ID token constants
32
30
ID_TOKEN_ISSUER_PREFIX = 'https://securetoken.google.com/'
36
34
# Session cookie constants
37
35
COOKIE_ISSUER_PREFIX = 'https://session.firebase.google.com/'
38
36
COOKIE_CERT_URI = 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/publicKeys'
39
- MIN_SESSION_COOKIE_DURATION_SECONDS = datetime .timedelta (minutes = 5 ).total_seconds ()
40
- MAX_SESSION_COOKIE_DURATION_SECONDS = datetime .timedelta (days = 14 ).total_seconds ()
37
+ MIN_SESSION_COOKIE_DURATION_SECONDS = int ( datetime .timedelta (minutes = 5 ).total_seconds () )
38
+ MAX_SESSION_COOKIE_DURATION_SECONDS = int ( datetime .timedelta (days = 14 ).total_seconds () )
41
39
42
40
# Custom token constants
43
- MAX_TOKEN_LIFETIME_SECONDS = datetime .timedelta (hours = 1 ).total_seconds ()
41
+ MAX_TOKEN_LIFETIME_SECONDS = int ( datetime .timedelta (hours = 1 ).total_seconds () )
44
42
FIREBASE_AUDIENCE = ('https://identitytoolkit.googleapis.com/google.'
45
43
'identity.identitytoolkit.v1.IdentityToolkit' )
46
44
RESERVED_CLAIMS = set ([
@@ -152,6 +150,7 @@ class TokenVerifier(object):
152
150
"""Verifies ID tokens and session cookies."""
153
151
154
152
def __init__ (self , app ):
153
+ self .request = transport .requests .Request ()
155
154
self ._id_token_verifier = _JWTVerifier (
156
155
project_id = app .project_id , short_name = 'ID token' ,
157
156
operation = 'verify_id_token()' ,
@@ -164,10 +163,10 @@ def __init__(self, app):
164
163
cert_url = COOKIE_CERT_URI , issuer = COOKIE_ISSUER_PREFIX )
165
164
166
165
def verify_id_token (self , id_token ):
167
- return self ._id_token_verifier .verify (id_token )
166
+ return self ._id_token_verifier .verify (id_token , self . request )
168
167
169
168
def verify_session_cookie (self , cookie ):
170
- return self ._cookie_verifier .verify (cookie )
169
+ return self ._cookie_verifier .verify (cookie , self . request )
171
170
172
171
173
172
class _JWTVerifier (object ):
@@ -185,7 +184,7 @@ def __init__(self, **kwargs):
185
184
else :
186
185
self .articled_short_name = 'a {0}' .format (self .short_name )
187
186
188
- def verify (self , token ):
187
+ def verify (self , token , request ):
189
188
"""Verifies the signature and data for the provided JWT."""
190
189
token = token .encode ('utf-8' ) if isinstance (token , six .text_type ) else token
191
190
if not isinstance (token , six .binary_type ) or not token :
@@ -258,7 +257,7 @@ def verify(self, token):
258
257
259
258
verified_claims = google .oauth2 .id_token .verify_token (
260
259
token ,
261
- request = _request ,
260
+ request = request ,
262
261
audience = self .project_id ,
263
262
certs_url = self .cert_url )
264
263
verified_claims ['uid' ] = verified_claims ['sub' ]
0 commit comments