Skip to content

Commit aacd27f

Browse files
committed
Token verification for the auth emulator
1 parent 489c1d4 commit aacd27f

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

firebase_admin/_token_gen.py

+22-2
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@
5454
'service-accounts/default/email')
5555

5656

57+
class_EmulatedSigner(google.auth.crypt.Signer):
58+
key_id=None
59+
60+
def__init__(self):
61+
pass
62+
63+
defsign(self, message):
64+
returnb''
65+
66+
5767
class_SigningProvider:
5868
"""Stores a reference to a google.auth.crypto.Signer."""
5969

@@ -78,6 +88,10 @@ def from_iam(cls, request, google_cred, service_account):
7888
signer=iam.Signer(request, google_cred, service_account)
7989
return_SigningProvider(signer, service_account)
8090

91+
@classmethod
92+
deffor_emulator(cls):
93+
return_SigningProvider(_EmulatedSigner(), 'firebase-auth-emulator@example.com')
94+
8195

8296
classTokenGenerator:
8397
"""Generates custom tokens and session cookies."""
@@ -94,6 +108,8 @@ def __init__(self, app, http_client, url_override=None):
94108

95109
def_init_signing_provider(self):
96110
"""Initializes a signing provider by following the go/firebase-admin-sign protocol."""
111+
if_auth_utils.is_emulated():
112+
return_SigningProvider.for_emulator()
97113
# If the SDK was initialized with a service account, use it to sign bytes.
98114
google_cred=self.app.credential.get_credential()
99115
ifisinstance(google_cred, google.oauth2.service_account.Credentials):
@@ -291,15 +307,15 @@ def verify(self, token, request):
291307
error_message= (
292308
'{0} expects {1}, but was given a custom '
293309
'token.'.format(self.operation, self.articled_short_name))
294-
elifnotheader.get('kid'):
310+
elifnot_auth_utils.is_emulated() andnotheader.get('kid'):
295311
ifheader.get('alg') =='HS256'andpayload.get(
296312
'v') ==0and'uid'inpayload.get('d', {}):
297313
error_message= (
298314
'{0} expects {1}, but was given a legacy custom '
299315
'token.'.format(self.operation, self.articled_short_name))
300316
else:
301317
error_message='Firebase {0} has no "kid" claim.'.format(self.short_name)
302-
elifheader.get('alg') !='RS256':
318+
elifnot_auth_utils.is_emulated() andheader.get('alg') !='RS256':
303319
error_message= (
304320
'Firebase {0} has incorrect algorithm. Expected "RS256" but got '
305321
'"{1}". {2}'.format(self.short_name, header.get('alg'), verify_id_token_msg))
@@ -329,6 +345,10 @@ def verify(self, token, request):
329345
iferror_message:
330346
raiseself._invalid_token_error(error_message)
331347

348+
if_auth_utils.is_emulated():
349+
claims=jwt.decode(token, verify=False)
350+
claims['uid'] =claims['sub']
351+
returnclaims
332352
try:
333353
verified_claims=google.oauth2.id_token.verify_token(
334354
token,

0 commit comments

Comments
 (0)
close