53
53
])
54
54
METADATA_SERVICE_URL = ('http://metadata.google.internal/computeMetadata/v1/instance/'
55
55
'service-accounts/default/email' )
56
+ ALGORITHM_RS256 = 'RS256'
57
+ ALGORITHM_NONE = 'none'
56
58
57
59
# Emulator fake account
58
60
AUTH_EMULATOR_EMAIL = '[email protected] '
@@ -71,9 +73,10 @@ def sign(self, message):
71
73
class _SigningProvider :
72
74
"""Stores a reference to a google.auth.crypto.Signer."""
73
75
74
- def __init__ (self , signer , signer_email ):
76
+ def __init__ (self , signer , signer_email , alg = ALGORITHM_RS256 ):
75
77
self ._signer = signer
76
78
self ._signer_email = signer_email
79
+ self ._alg = alg
77
80
78
81
@property
79
82
def signer (self ):
@@ -83,6 +86,10 @@ def signer(self):
83
86
def signer_email (self ):
84
87
return self ._signer_email
85
88
89
+ @property
90
+ def alg (self ):
91
+ return self ._alg
92
+
86
93
@classmethod
87
94
def from_credential (cls , google_cred ):
88
95
return _SigningProvider (google_cred .signer , google_cred .signer_email )
@@ -94,7 +101,7 @@ def from_iam(cls, request, google_cred, service_account):
94
101
95
102
@classmethod
96
103
def for_emulator (cls ):
97
- return _SigningProvider (_EmulatedSigner (), AUTH_EMULATOR_EMAIL )
104
+ return _SigningProvider (_EmulatedSigner (), AUTH_EMULATOR_EMAIL , ALGORITHM_NONE )
98
105
99
106
100
107
class TokenGenerator :
@@ -190,8 +197,10 @@ def create_custom_token(self, uid, developer_claims=None, tenant_id=None):
190
197
191
198
if developer_claims is not None :
192
199
payload ['claims' ] = developer_claims
200
+
201
+ header = {'alg' : signing_provider .alg }
193
202
try :
194
- return jwt .encode (signing_provider .signer , payload )
203
+ return jwt .encode (signing_provider .signer , payload , header = header )
195
204
except google .auth .exceptions .TransportError as error :
196
205
msg = 'Failed to sign custom token. {0}' .format (error )
197
206
raise TokenSignError (msg , error )
0 commit comments