Skip to content

Commit 92ae66c

Browse files
authored
[Identity] Ensure DAC contextvar is reset (#42413)
If ChainedTokenCredential raises an exception, then the DAC contextvar is never reset. This updates to ensure that it is reset. Signed-off-by: Paul Van Eck <[email protected]>
1 parent 62ab762 commit 92ae66c

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

sdk/identity/azure-identity/azure/identity/_credentials/default.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,10 @@ def get_token(
332332
)
333333
return token
334334
within_dac.set(True)
335-
token = super().get_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs)
336-
within_dac.set(False)
335+
try:
336+
token = super().get_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs)
337+
finally:
338+
within_dac.set(False)
337339
return token
338340

339341
def get_token_info(self, *scopes: str, options: Optional[TokenRequestOptions] = None) -> AccessTokenInfo:
@@ -361,6 +363,8 @@ def get_token_info(self, *scopes: str, options: Optional[TokenRequestOptions] =
361363
return token_info
362364

363365
within_dac.set(True)
364-
token_info = cast(SupportsTokenInfo, super()).get_token_info(*scopes, options=options)
365-
within_dac.set(False)
366+
try:
367+
token_info = cast(SupportsTokenInfo, super()).get_token_info(*scopes, options=options)
368+
finally:
369+
within_dac.set(False)
366370
return token_info

sdk/identity/azure-identity/azure/identity/aio/_credentials/default.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,10 @@ async def get_token(
278278
return token
279279

280280
within_dac.set(True)
281-
token = await super().get_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs)
282-
within_dac.set(False)
281+
try:
282+
token = await super().get_token(*scopes, claims=claims, tenant_id=tenant_id, **kwargs)
283+
finally:
284+
within_dac.set(False)
283285
return token
284286

285287
async def get_token_info(self, *scopes: str, options: Optional[TokenRequestOptions] = None) -> AccessTokenInfo:
@@ -309,6 +311,8 @@ async def get_token_info(self, *scopes: str, options: Optional[TokenRequestOptio
309311
return token_info
310312

311313
within_dac.set(True)
312-
token_info = await cast(AsyncSupportsTokenInfo, super()).get_token_info(*scopes, options=options)
313-
within_dac.set(False)
314+
try:
315+
token_info = await cast(AsyncSupportsTokenInfo, super()).get_token_info(*scopes, options=options)
316+
finally:
317+
within_dac.set(False)
314318
return token_info

0 commit comments

Comments
 (0)