Add test coverage for past expires_on in Managed Identity - #940
Merged
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a regression test to ensure Managed Identity token acquisition correctly handles an MI endpoint response containing a past expires_on timestamp, preventing an accidentally long-lived token lifetime and ensuring a subsequent request re-hits the MI endpoint rather than returning a stale cached token.
Changes:
- Add a new App Service MI test covering past
expires_onhandling. - Assert
expires_inderived fromexpires_onis non-positive for past timestamps. - Assert a second acquisition re-calls the MI endpoint (no cache hit for an already-expired token).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Follow-up to review feedback: the second comment overstated that the token is not cached; the test proves it is not served (endpoint is re-hit), not that no entry is written. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avery-Dunn
approved these changes
Jul 10, 2026
Robbie-Microsoft
added a commit
that referenced
this pull request
Jul 30, 2026
Bring the SNI mTLS PoP branch current with base dev (which had advanced with PRs #911, #937, #940, #942), resolving the acquire_token_for_client overlap between this branch's mtls_proof_of_possession feature and dev's new forwarded_client_claims parameter (#937). Conflicts resolved by integrating BOTH sides: - msal/application.py acquire_token_for_client(): keep both the mtls_proof_of_possession and forwarded_client_claims parameters, both request setup blocks, and the fail-closed mtls_pop downgrade/binding_certificate post-processing (result = _clean_up(...) form). - msal/application.py _acquire_token_for_client(): keep the is_mtls_pop client selection AND the client_claims merge into the OAuth claims parameter; the single popped request_data carries token_type/key_id and client_claims on the wire. - tests/test_token_cache.py: union the imports (_key_id_to_str from this branch plus _parse_claims_or_raise/_merge_claims from dev). No Task-1 SNI hardening dropped: the mTLS PoP feature, the test_credential_x509_output_{pop,bearer} matrix, the region split (pop GLOBAL / bearer REGIONAL westus3, no regional pop cell), the _call_graph helper, and the downgrade fail-closed all remain. No escape hatch reintroduced. Verified: py_compile clean; pytest collects 196 tests (e2e matrix + upstream suites); 17 mtls_pop + forwarded_client_claims unit tests pass; 49 token_cache tests pass. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Robbie-Microsoft
added a commit
that referenced
this pull request
Jul 30, 2026
Bring the FIC branch current with base dev by merging the resync'd SNI branch (rginsburg/sni-mtls-pop @ 4ec592f, which merged origin/dev), so #939 also carries PRs #911, #937, #940, #942. Single conflict in msal/application.py acquire_token_for_client(), resolved by integrating BOTH sides: keep the FIC-aware mTLS condition (mtls_proof_of_possession or self._mtls_is_fic_leg2) and its comment from this branch, AND add dev's forwarded_client_claims request-setup block above it. The private _acquire_token_for_client() auto-merged correctly, combining the FIC/mtls client selection (is_mtls_pop or self._mtls_is_fic_leg2) with dev's client_claims -> OAuth claims merge. The FIC e2e test test_fic_two_leg_over_mtls_pop and its leg-1 skip-hatch are left UNTOUCHED (de-hatch + resource-call port + Credential_Fic_Output_* naming remain Task 2). Region split, x509 pop/bearer matrix, and downgrade fail-closed are all preserved. Verified: py_compile clean; e2e matrix (pop/bearer) + FIC test collect; 22 mtls_pop + forwarded_client_claims unit tests pass. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a regression test in
tests/test_mi.pyfor a previously-uncovered Managed Identity edge case: when the MI endpoint returns a pastexpires_ontimestamp.Existing MI tests only use current/future
expires_onvalues. This test verifies that a past timestamp is treated as already-expired:expires_inderived from a pastexpires_onis non-positive (not an inflated lifetime).acquire_token_for_clientre-hits the endpoint, so the stale token is not served from cache.