Skip to content

Commit 3a91806

Browse files
authored
Merge pull request #280 from AzureAD/bugfix-handle-rt-with-different-key
Reuse old rt data even if its key is different
2 parents dfbbc66 + 0845404 commit 3a91806

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

msal/token_cache.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,9 @@ def modify(self, credential_type, old_entry, new_key_value_pairs=None):
234234
with self._lock:
235235
if new_key_value_pairs: # Update with them
236236
entries = self._cache.setdefault(credential_type, {})
237-
entry = entries.setdefault(key, {}) # Create it if not yet exist
238-
entry.update(new_key_value_pairs)
237+
entries[key] = dict(
238+
old_entry, # Do not use entries[key] b/c it might not exist
239+
**new_key_value_pairs)
239240
else: # Remove old_entry
240241
self._cache.setdefault(credential_type, {}).pop(key, None)
241242

tests/test_token_cache.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,24 @@ def test_key_id_is_also_recorded(self):
222222
{}).get("key_id")
223223
self.assertEqual(my_key_id, cached_key_id, "AT should be bound to the key")
224224

225+
def test_old_rt_data_with_wrong_key_should_still_be_salvaged_into_new_rt(self):
226+
sample = {
227+
'client_id': 'my_client_id',
228+
'credential_type': 'RefreshToken',
229+
'environment': 'login.example.com',
230+
'home_account_id': "uid.utid",
231+
'secret': 'a refresh token',
232+
'target': 's2 s1 s3',
233+
}
234+
new_rt = "this is a new RT"
235+
self.cache._cache["RefreshToken"] = {"wrong-key": sample}
236+
self.cache.modify(
237+
self.cache.CredentialType.REFRESH_TOKEN, sample, {"secret": new_rt})
238+
self.assertEqual(
239+
dict(sample, secret=new_rt),
240+
self.cache._cache["RefreshToken"].get(
241+
'uid.utid-login.example.com-refreshtoken-my_client_id--s2 s1 s3')
242+
)
225243

226244
class SerializableTokenCacheTestCase(TokenCacheTestCase):
227245
# Run all inherited test methods, and have extra check in tearDown()

0 commit comments

Comments
 (0)