5353])
5454METADATA_SERVICE_URL = ('http://metadata.google.internal/computeMetadata/v1/instance/'
5555 'service-accounts/default/email' )
56+ ALGORITHM_RS256 = 'RS256'
57+ ALGORITHM_NONE = 'none'
5658
5759# Emulator fake account
5860AUTH_EMULATOR_EMAIL = 'firebase-auth-emulator@example.com'
@@ -71,9 +73,10 @@ def sign(self, message):
7173class _SigningProvider :
7274 """Stores a reference to a google.auth.crypto.Signer."""
7375
74- def __init__ (self , signer , signer_email ):
76+ def __init__ (self , signer , signer_email , alg = ALGORITHM_RS256 ):
7577 self ._signer = signer
7678 self ._signer_email = signer_email
79+ self ._alg = alg
7780
7881 @property
7982 def signer (self ):
@@ -83,6 +86,10 @@ def signer(self):
8386 def signer_email (self ):
8487 return self ._signer_email
8588
89+ @property
90+ def alg (self ):
91+ return self ._alg
92+
8693 @classmethod
8794 def from_credential (cls , google_cred ):
8895 return _SigningProvider (google_cred .signer , google_cred .signer_email )
@@ -94,7 +101,7 @@ def from_iam(cls, request, google_cred, service_account):
94101
95102 @classmethod
96103 def for_emulator (cls ):
97- return _SigningProvider (_EmulatedSigner (), AUTH_EMULATOR_EMAIL )
104+ return _SigningProvider (_EmulatedSigner (), AUTH_EMULATOR_EMAIL , ALGORITHM_NONE )
98105
99106
100107class TokenGenerator :
@@ -190,8 +197,10 @@ def create_custom_token(self, uid, developer_claims=None, tenant_id=None):
190197
191198 if developer_claims is not None :
192199 payload ['claims' ] = developer_claims
200+
201+ header = {'alg' : signing_provider .alg }
193202 try :
194- return jwt .encode (signing_provider .signer , payload )
203+ return jwt .encode (signing_provider .signer , payload , header = header )
195204 except google .auth .exceptions .TransportError as error :
196205 msg = 'Failed to sign custom token. {0}' .format (error )
197206 raise TokenSignError (msg , error )
0 commit comments