Skip to content

[Identity] Make managed identity mTLS PoP opt-in - #63298

Merged
Jonathan Cárdenas (JonathanCrd) merged 4 commits into
mainfrom
JonathanCrd/enable-mtls-pop
Sep 23, 2026
Merged

Jonathan Cárdenas (JonathanCrd) merged 4 commits into
mainfrom
JonathanCrd/enable-mtls-pop

Conversation

@JonathanCrd

@JonathanCrd Jonathan Cárdenas (JonathanCrd) commented Sep 23, 2026 •

Copy link
Copy Markdown
Member

Summary

Changes Azure.Core mTLS proof-of-possession from opt-out to opt-in.

  • Renames the experimental ManagedIdentityCredentialOptions.DisableMtlsProofOfPossession property to EnableMtlsProofOfPossession.
  • Renames the corresponding configured-credential JSON setting used by managed identity federated identity credentials.
  • Defaults managed identity mTLS PoP to false and propagates the positive flag through capability discovery, MSAL client creation, federated identity, and chained credential paths.
  • Renames the first-party ClientCertificateCredential AppContext configuration to the opt-in Azure.Identity.EnableClientCertificateMtlsProofOfPossession switch and AZURE_IDENTITY_ENABLE_CLIENT_CERTIFICATE_MTLS_POP environment variable.
  • Defaults client-certificate mTLS PoP to bearer behavior unless the first-party switch is enabled and proof-of-possession is requested.
  • Updates configuration schema, documentation, changelog, Azure.Core API listings, forwarded Azure.Identity API listings, and focused tests.
  • Adds the generated ApiCompat suppression for removal of the previously shipped experimental managed identity property name.

This is layer 2 of a three-PR stack and depends on the experimental-status restoration PR.

Validation

  • Focused managed identity and configuration tests passed across .NET 8, .NET 9, .NET 10, and .NET Framework 4.6.2:
    • 2,271 passed
    • 1 existing platform-specific skip
  • Focused ClientCertificateCredential tests passed across all four target frameworks: 272 passed.
  • Azure.Core ApiCompat passed with the generated suppression for the intentional experimental API rename.
  • Azure.Identity API export and build passed with ApiCompat against Azure.Identity 1.21.0.
  • Formatting, API export, snippet synchronization, and diff checks completed.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@JonathanCrd Jonathan Cárdenas (JonathanCrd) changed the title Make managed identity mTLS PoP opt-in [Core] Make managed identity mTLS PoP opt-in Sep 23, 2026
Comment thread eng/apicompatbaselines/Azure.Core.xml
Copilot AI balanced review requested due to automatic review settings September 23, 2026 17:49

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Azure.Identity API artifacts remain stale, and key tests do not yet reliably exercise the new default and opt-in paths.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
What changed in this PR

Makes Azure.Core managed identity and client-certificate mTLS proof-of-possession explicitly opt-in.

Changes:

  • Renames and propagates positive mTLS PoP configuration flags.
  • Adds AppContext and environment-variable opt-in controls.
  • Updates tests, documentation, schemas, API listings, and compatibility metadata.
File Description
sdk/​core/​Azure.Core/​tests/​Identity/​MsalManagedIdentityClientReflectionTests.cs Tests explicit PoP opt-in decisions.
sdk/​core/​Azure.Core/​tests/​Identity/​ManagedIdentityCredentialTests.cs Updates managed identity tests; the helper default and request-level default coverage require correction.
sdk/​core/​Azure.Core/​tests/​Identity/​DefaultAzureCredentialOptionsTests.cs Tests configuration cloning.
sdk/​core/​Azure.Core/​tests/​Identity/​ConfigurableCredentials/​ConfigurableCredentialTests.cs Tests federated credential configuration.
sdk/​core/​Azure.Core/​tests/​Identity/​ClientCertificateCredentialTests.cs Tests client-certificate opt-in behavior.
sdk/​core/​Azure.Core/​src/​Identity/​MsalManagedIdentityClient.cs Applies the positive PoP flag.
sdk/​core/​Azure.Core/​src/​Identity/​ManagedIdentityClientOptions.cs Renames internal option state.
sdk/​core/​Azure.Core/​src/​Identity/​ManagedIdentityClient.cs Gates capability discovery.
sdk/​core/​Azure.Core/​src/​Identity/​DefaultAzureCredentialFactory.cs Propagates federated credential opt-in.
sdk/​core/​Azure.Core/​src/​Identity/​Credentials/​ManagedIdentityCredentialOptions.cs Renames the public experimental option.
sdk/​core/​Azure.Core/​src/​Identity/​Credentials/​ManagedIdentityCredential.cs Resolves the positive option.
sdk/​core/​Azure.Core/​src/​Identity/​Credentials/​DefaultAzureCredentialOptions.cs Parses and clones the renamed setting.
sdk/​core/​Azure.Core/​src/​Identity/​Credentials/​ClientCertificateCredential.cs Selects PoP behavior only when enabled.
sdk/​core/​Azure.Core/​src/​Identity/​Credentials/​ClientAssertionCredentialOptions.cs Renames internal assertion option state.
sdk/​core/​Azure.Core/​src/​Identity/​Credentials/​ClientAssertionCredential.cs Gates PoP client creation; existing PoP and failure tests must explicitly opt in.
sdk/​core/​Azure.Core/​src/​Identity/​ChainedTokenCredentialFactory.cs Propagates opt-in through credential chains.
sdk/​core/​Azure.Core/​src/​Identity/​AppContextSwitches.cs Defines positive switch and environment names.
sdk/​core/​Azure.Core/​src/​docs/​ExperimentalFeatures.md Documents explicit opt-in behavior.
sdk/​core/​Azure.Core/​src/​docs/​ConfigurationAndDependencyInjection.md Updates configuration guidance.
sdk/​core/​Azure.Core/​schema/​ConfigurationSchema.json Renames schema properties and defaults.
sdk/​core/​Azure.Core/​CHANGELOG.md Records behavior and API changes.
sdk/​core/​Azure.Core/​api/​Azure.Core.netstandard2.0.cs Updates Core’s API listing; forwarded Azure.Identity listings remain stale.
sdk/​core/​Azure.Core/​api/​Azure.Core.net8.0.cs Updates Core’s API listing; forwarded Azure.Identity listings remain stale.
sdk/​core/​Azure.Core/​api/​Azure.Core.net472.cs Updates the .NET Framework 4.7.2 API listing.
sdk/​core/​Azure.Core/​api/​Azure.Core.net462.cs Updates the .NET Framework 4.6.2 API listing.
sdk/​core/​Azure.Core/​api/​Azure.Core.net10.0.cs Updates the .NET 10 API listing.
eng/​apicompatbaselines/​Azure.Core.xml Suppresses the intentional removal; Azure.Identity facade snapshots and compatibility baseline also need updates.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Comment thread sdk/core/Azure.Core/api/Azure.Core.net8.0.cs
@JonathanCrd Jonathan Cárdenas (JonathanCrd) changed the title [Core] Make managed identity mTLS PoP opt-in [Identity] Make managed identity mTLS PoP opt-in Sep 23, 2026
Base automatically changed from JonathanCrd/restore-mtls-experimental to main September 23, 2026 20:17
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@JonathanCrd
Jonathan Cárdenas (JonathanCrd) merged commit 6b9f305 into main Sep 23, 2026
43 checks passed
@JonathanCrd
Jonathan Cárdenas (JonathanCrd) deleted the JonathanCrd/enable-mtls-pop branch September 23, 2026 23:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants