Repository navigation
Fix Linux system browser callbacks with opt-in IPv4 forwarding - #6186
Merged
Merged
Conversation
Add MSAL_ALLOW_SYSTEM_BROWSER_PORT_FORWARDING for isolated container deployments while preserving IPv6 localhost and default loopback binding. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
IPv6-first startup/callback coverage and Linux-specific binding diagnostics remain unresolved.
Pull request overview
Adds explicit Linux opt-in IPv4 wildcard forwarding for system-browser callbacks in container deployments.
Changes:
- Adds
MSAL_ALLOW_SYSTEM_BROWSER_PORT_FORWARDINGconfiguration. - Supports IPv4 forwarding while preserving default listener behavior.
- Adds focused tests and documents security considerations.
File summaries
| File | Summary |
|---|---|
tests/Microsoft.Identity.Test.Unit/WebUITests/HttpListenerInterceptorTests.cs |
Tests configuration, prefix selection, and callbacks; IPv6-first integration coverage remains needed. |
src/client/Microsoft.Identity.Client/Platforms/Features/DefaultOSBrowser/HttpListenerInterceptor.cs |
Implements opt-in Linux forwarding; Linux binding diagnostics need improvement. |
docs/system-browser-port-forwarding.md |
Documents configuration, usage, and network-exposure warnings. |
Review details
Suppressed comments (3)
src/client/Microsoft.Identity.Client/Platforms/Features/DefaultOSBrowser/HttpListenerInterceptor.cs:95
- The IPv6-first branch is only exercised through
TestBeforeStart, which cancels beforehttpListener.Start()runs. Add a Linux test that injectslocalhostResolvesToIpv6: () => true, starts both prefixes, and sends the forwarded IPv4 callback; otherwise the fix's main two-prefix binding scenario is not verified.
if (usePortForwarding)
{
string portForwardingUrl = "http://*:" + port + path.TrimEnd('/') + "/";
httpListener.Prefixes.Add(portForwardingUrl);
src/client/Microsoft.Identity.Client/Platforms/Features/DefaultOSBrowser/HttpListenerInterceptor.cs:99
- The new Linux wildcard prefix introduces a failure mode during
HttpListener.Start(), but the existing exception path still reports onlyurlToListenTo(localhost) and recommends the Windows-onlynetshworkaround. When opt-in binding fails on Linux, this points users at the wrong URL and platform; report the actual configured prefix(es) and provide a Linux-appropriate diagnostic for this path.
if (usePortForwarding)
{
string portForwardingUrl = "http://*:" + port + path.TrimEnd('/') + "/";
httpListener.Prefixes.Add(portForwardingUrl);
TestBeforeStart?.Invoke(portForwardingUrl);
_logger.Warning(
"System browser port forwarding is enabled. The authorization response listener will accept " +
"requests on all IPv4 network interfaces. Restrict the forwarded host port to loopback.");
tests/Microsoft.Identity.Test.Unit/WebUITests/HttpListenerInterceptorTests.cs:227
- This test cancels from
TestBeforeStart, so it never reacheshttpListener.Start()for the IPv6-first case. The new dual-prefix configuration (localhostplus the IPv4 wildcard) is therefore only string-tested; a startup conflict or a failure to bind both address families would still pass. Please add an integration-style assertion that starts this branch and receives an IPv4 form POST before cancelling the listener.
if (url == $"http://*:{port}/TestPath/")
{
cts.Cancel();
cts.Token.ThrowIfCancellationRequested();
}
- Files reviewed: 3/3 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Bogdan Gavril (bgavrilMS)
approved these changes
Sep 15, 2026
Ashok Kumar Ramakrishnan (ashok672)
self-requested a review
September 28, 2026 20:45
Ashok Kumar Ramakrishnan (ashok672)
approved these changes
Sep 28, 2026
This was referenced Oct 12, 2026
Closed
Merged
This was referenced Oct 26, 2026
Closed
Steinar Hjellvik (shjellvik)
added a commit
to equinor/osdu-csharp-client
that referenced
this pull request
Oct 30, 2026
Updated [Microsoft.Extensions.Configuration](https://github.com/dotnet/dotnet) from 10.0.11 to 10.0.13. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration.Abstractions](https://github.com/dotnet/dotnet) from 10.0.11 to 10.0.13. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration.Abstractions's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration.Binder](https://github.com/dotnet/dotnet) from 10.0.11 to 10.0.13. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration.Binder's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration.EnvironmentVariables](https://github.com/dotnet/dotnet) from 10.0.11 to 10.0.13. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration.EnvironmentVariables's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration.Json](https://github.com/dotnet/dotnet) from 10.0.11 to 10.0.13. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration.Json's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Configuration.UserSecrets](https://github.com/dotnet/dotnet) from 10.0.11 to 10.0.13. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Configuration.UserSecrets's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/dotnet) from 10.0.11 to 10.0.13. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Extensions.Logging.Abstractions's releases](https://github.com/dotnet/dotnet/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/dotnet/dotnet/commits). </details> Updated [Microsoft.Identity.Client](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet) from 4.88.0 to 4.91.0. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Identity.Client's releases](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/releases)._ ## 4.91.0 ### New Features - Made the dynamic certificate provider and confidential-client callbacks (`OnMsalServiceFailure`, `OnCompletion`, and `OnBackgroundTokenRefreshCompleted`) generally available, removing the experimental feature opt-in requirement. [#6216](AzureAD/microsoft-authentication-library-for-dotnet#6216) ### Bug Fixes - Fixed built-in mTLS `HttpClient` caching to use certificate object identity, ensuring a new certificate instance with a reacquired private-key handle receives a new handler even when its thumbprint is unchanged. [#6217](AzureAD/microsoft-authentication-library-for-dotnet#6217) - Fixed managed identity `WithForceRefresh(true)` to re-mint the MSI v2 binding certificate before acquiring a new token, while reusing a valid cached attestation token for the current key. [#6215](AzureAD/microsoft-authentication-library-for-dotnet#6215) - Fixed system-browser authentication callbacks in Linux containers by adding opt-in IPv4 port-forwarding support through `MSAL_ALLOW_SYSTEM_BROWSER_PORT_FORWARDING`, disabled by default. [#6186](AzureAD/microsoft-authentication-library-for-dotnet#6186) ## 4.90.1 ### New Features - Added `IMsalWsTrustHttpClientFactory`, allowing custom HTTP client factories to provide redirect-disabled, credential-policy-aware clients for federation metadata (MEX) and WS-Trust requests. Added `MsalError.TooManyRedirects` and `MsalError.WsTrustCrossOriginRedirectNotSupported` for redirect failures. [#6165](AzureAD/microsoft-authentication-library-for-dotnet#6165) ### Bug Fixes - Hardened federation metadata and WS-Trust requests by requiring HTTPS, securely validating redirects, rejecting credential-bearing cross-origin redirects, and limiting redirect chains. [#6165](AzureAD/microsoft-authentication-library-for-dotnet#6165) - Fixed instance discovery so a custom authority port is not forwarded to the global discovery host, while preserving the port when discovery uses the authority host. [#6155](AzureAD/microsoft-authentication-library-for-dotnet#6155) - Fixed KeyGuard attestation to send the tenant ID as the MAA `client_id` metadata value without changing managed-identity client-ID handling or attestation-cache partitioning. [#6200](AzureAD/microsoft-authentication-library-for-dotnet#6200) ### Changes - Updated `Microsoft.Azure.Security.KeyGuardAttestation` from version 1.1.7 to 1.1.8. [#6202](AzureAD/microsoft-authentication-library-for-dotnet#6202) ## 4.90.0 ### Changes - Updated the KeyGuardAttestation package version to 1.1.7. [#6189](AzureAD/microsoft-authentication-library-for-dotnet#6189) ## 4.89.0 ## What's Changed * Add repository guidance for AI agents by @bgavrilMS in AzureAD/microsoft-authentication-library-for-dotnet#6158 * Add Linux Attested Managed Identity Flow documentation by @gladjohn in AzureAD/microsoft-authentication-library-for-dotnet#6149 * Remove internal authority example from API docs by @bgavrilMS in AzureAD/microsoft-authentication-library-for-dotnet#6170 * Update SNI MTLS PoP Token Design documentation by @bgavrilMS in AzureAD/microsoft-authentication-library-for-dotnet#6171 * Add SNI mTLS E2E coverage for a non-exportable VBS-protected certificate by @gladjohn in AzureAD/microsoft-authentication-library-for-dotnet#6167 * Revise mTLS PoP acceptance-test matrix structure by @gladjohn in AzureAD/microsoft-authentication-library-for-dotnet#6161 * Add ICloudConfiguration for cross-cloud metadata resolution by @Avery-Dunn in AzureAD/microsoft-authentication-library-for-dotnet#6104 * Fix IMDSv2 SCHANNEL failures bypassing certificate re-mint retry by @Robbie-Microsoft in AzureAD/microsoft-authentication-library-for-dotnet#6173 * Always record RawStsErrorCode on MsalFailure metric by @ssmelov in AzureAD/microsoft-authentication-library-for-dotnet#6175 * Add MSAL_MI_DISABLE_IMDS_V2 kill switch for managed identity by @Robbie-Microsoft in AzureAD/microsoft-authentication-library-for-dotnet#6178 * Add timeout for managed identity capability discovery by @Robbie-Microsoft in AzureAD/microsoft-authentication-library-for-dotnet#6181 * Pin GitHub Actions to full-length commit SHAs by @danfiedler-msft in AzureAD/microsoft-authentication-library-for-dotnet#6182 ## New Contributors * @danfiedler-msft made their first contribution in AzureAD/microsoft-authentication-library-for-dotnet#6182 **Full Changelog**: AzureAD/microsoft-authentication-library-for-dotnet@4.88.0...4.89.0 Commits viewable in [compare view](AzureAD/microsoft-authentication-library-for-dotnet@4.88.0...4.91.0). </details> Updated [Microsoft.Identity.Client.Extensions.Msal](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet) from 4.88.0 to 4.91.0. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Identity.Client.Extensions.Msal's releases](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/releases)._ ## 4.91.0 ### New Features - Made the dynamic certificate provider and confidential-client callbacks (`OnMsalServiceFailure`, `OnCompletion`, and `OnBackgroundTokenRefreshCompleted`) generally available, removing the experimental feature opt-in requirement. [#6216](AzureAD/microsoft-authentication-library-for-dotnet#6216) ### Bug Fixes - Fixed built-in mTLS `HttpClient` caching to use certificate object identity, ensuring a new certificate instance with a reacquired private-key handle receives a new handler even when its thumbprint is unchanged. [#6217](AzureAD/microsoft-authentication-library-for-dotnet#6217) - Fixed managed identity `WithForceRefresh(true)` to re-mint the MSI v2 binding certificate before acquiring a new token, while reusing a valid cached attestation token for the current key. [#6215](AzureAD/microsoft-authentication-library-for-dotnet#6215) - Fixed system-browser authentication callbacks in Linux containers by adding opt-in IPv4 port-forwarding support through `MSAL_ALLOW_SYSTEM_BROWSER_PORT_FORWARDING`, disabled by default. [#6186](AzureAD/microsoft-authentication-library-for-dotnet#6186) ## 4.90.1 ### New Features - Added `IMsalWsTrustHttpClientFactory`, allowing custom HTTP client factories to provide redirect-disabled, credential-policy-aware clients for federation metadata (MEX) and WS-Trust requests. Added `MsalError.TooManyRedirects` and `MsalError.WsTrustCrossOriginRedirectNotSupported` for redirect failures. [#6165](AzureAD/microsoft-authentication-library-for-dotnet#6165) ### Bug Fixes - Hardened federation metadata and WS-Trust requests by requiring HTTPS, securely validating redirects, rejecting credential-bearing cross-origin redirects, and limiting redirect chains. [#6165](AzureAD/microsoft-authentication-library-for-dotnet#6165) - Fixed instance discovery so a custom authority port is not forwarded to the global discovery host, while preserving the port when discovery uses the authority host. [#6155](AzureAD/microsoft-authentication-library-for-dotnet#6155) - Fixed KeyGuard attestation to send the tenant ID as the MAA `client_id` metadata value without changing managed-identity client-ID handling or attestation-cache partitioning. [#6200](AzureAD/microsoft-authentication-library-for-dotnet#6200) ### Changes - Updated `Microsoft.Azure.Security.KeyGuardAttestation` from version 1.1.7 to 1.1.8. [#6202](AzureAD/microsoft-authentication-library-for-dotnet#6202) ## 4.90.0 ### Changes - Updated the KeyGuardAttestation package version to 1.1.7. [#6189](AzureAD/microsoft-authentication-library-for-dotnet#6189) ## 4.89.0 ## What's Changed * Add repository guidance for AI agents by @bgavrilMS in AzureAD/microsoft-authentication-library-for-dotnet#6158 * Add Linux Attested Managed Identity Flow documentation by @gladjohn in AzureAD/microsoft-authentication-library-for-dotnet#6149 * Remove internal authority example from API docs by @bgavrilMS in AzureAD/microsoft-authentication-library-for-dotnet#6170 * Update SNI MTLS PoP Token Design documentation by @bgavrilMS in AzureAD/microsoft-authentication-library-for-dotnet#6171 * Add SNI mTLS E2E coverage for a non-exportable VBS-protected certificate by @gladjohn in AzureAD/microsoft-authentication-library-for-dotnet#6167 * Revise mTLS PoP acceptance-test matrix structure by @gladjohn in AzureAD/microsoft-authentication-library-for-dotnet#6161 * Add ICloudConfiguration for cross-cloud metadata resolution by @Avery-Dunn in AzureAD/microsoft-authentication-library-for-dotnet#6104 * Fix IMDSv2 SCHANNEL failures bypassing certificate re-mint retry by @Robbie-Microsoft in AzureAD/microsoft-authentication-library-for-dotnet#6173 * Always record RawStsErrorCode on MsalFailure metric by @ssmelov in AzureAD/microsoft-authentication-library-for-dotnet#6175 * Add MSAL_MI_DISABLE_IMDS_V2 kill switch for managed identity by @Robbie-Microsoft in AzureAD/microsoft-authentication-library-for-dotnet#6178 * Add timeout for managed identity capability discovery by @Robbie-Microsoft in AzureAD/microsoft-authentication-library-for-dotnet#6181 * Pin GitHub Actions to full-length commit SHAs by @danfiedler-msft in AzureAD/microsoft-authentication-library-for-dotnet#6182 ## New Contributors * @danfiedler-msft made their first contribution in AzureAD/microsoft-authentication-library-for-dotnet#6182 **Full Changelog**: AzureAD/microsoft-authentication-library-for-dotnet@4.88.0...4.89.0 Commits viewable in [compare view](AzureAD/microsoft-authentication-library-for-dotnet@4.88.0...4.91.0). </details> Updated [Microsoft.Kiota.Abstractions](https://github.com/microsoft/kiota-dotnet) from 2.1.1 to 2.1.2. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Kiota.Abstractions's releases](https://github.com/microsoft/kiota-dotnet/releases)._ ## 2.1.2 ## [2.1.2](microsoft/kiota-dotnet@v2.1.1...v2.1.2) (2026-09-08) ### Bug Fixes * **serialization-json:** honor custom TimeSpan converters ([#795](microsoft/kiota-dotnet#795)) ([e22c5ba](microsoft/kiota-dotnet@e22c5ba)) * **serialization-json:** honor DateTimeOffset converters ([802e20a](microsoft/kiota-dotnet@802e20a)) * **serialization-json:** honor guid converters before fallback parsing ([#794](microsoft/kiota-dotnet#794)) ([22cc1d3](microsoft/kiota-dotnet@22cc1d3)) Commits viewable in [compare view](microsoft/kiota-dotnet@v2.1.1...v2.1.2). </details> Updated [Microsoft.Kiota.Http.HttpClientLibrary](https://github.com/microsoft/kiota-dotnet) from 2.1.1 to 2.1.2. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Kiota.Http.HttpClientLibrary's releases](https://github.com/microsoft/kiota-dotnet/releases)._ ## 2.1.2 ## [2.1.2](microsoft/kiota-dotnet@v2.1.1...v2.1.2) (2026-09-08) ### Bug Fixes * **serialization-json:** honor custom TimeSpan converters ([#795](microsoft/kiota-dotnet#795)) ([e22c5ba](microsoft/kiota-dotnet@e22c5ba)) * **serialization-json:** honor DateTimeOffset converters ([802e20a](microsoft/kiota-dotnet@802e20a)) * **serialization-json:** honor guid converters before fallback parsing ([#794](microsoft/kiota-dotnet#794)) ([22cc1d3](microsoft/kiota-dotnet@22cc1d3)) Commits viewable in [compare view](microsoft/kiota-dotnet@v2.1.1...v2.1.2). </details> Updated [Microsoft.Kiota.Serialization.Form](https://github.com/microsoft/kiota-dotnet) from 2.1.1 to 2.1.2. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Kiota.Serialization.Form's releases](https://github.com/microsoft/kiota-dotnet/releases)._ ## 2.1.2 ## [2.1.2](microsoft/kiota-dotnet@v2.1.1...v2.1.2) (2026-09-08) ### Bug Fixes * **serialization-json:** honor custom TimeSpan converters ([#795](microsoft/kiota-dotnet#795)) ([e22c5ba](microsoft/kiota-dotnet@e22c5ba)) * **serialization-json:** honor DateTimeOffset converters ([802e20a](microsoft/kiota-dotnet@802e20a)) * **serialization-json:** honor guid converters before fallback parsing ([#794](microsoft/kiota-dotnet#794)) ([22cc1d3](microsoft/kiota-dotnet@22cc1d3)) Commits viewable in [compare view](microsoft/kiota-dotnet@v2.1.1...v2.1.2). </details> Updated [Microsoft.Kiota.Serialization.Json](https://github.com/microsoft/kiota-dotnet) from 2.1.1 to 2.1.2. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Kiota.Serialization.Json's releases](https://github.com/microsoft/kiota-dotnet/releases)._ ## 2.1.2 ## [2.1.2](microsoft/kiota-dotnet@v2.1.1...v2.1.2) (2026-09-08) ### Bug Fixes * **serialization-json:** honor custom TimeSpan converters ([#795](microsoft/kiota-dotnet#795)) ([e22c5ba](microsoft/kiota-dotnet@e22c5ba)) * **serialization-json:** honor DateTimeOffset converters ([802e20a](microsoft/kiota-dotnet@802e20a)) * **serialization-json:** honor guid converters before fallback parsing ([#794](microsoft/kiota-dotnet#794)) ([22cc1d3](microsoft/kiota-dotnet@22cc1d3)) Commits viewable in [compare view](microsoft/kiota-dotnet@v2.1.1...v2.1.2). </details> Updated [Microsoft.Kiota.Serialization.Multipart](https://github.com/microsoft/kiota-dotnet) from 2.1.1 to 2.1.2. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Kiota.Serialization.Multipart's releases](https://github.com/microsoft/kiota-dotnet/releases)._ ## 2.1.2 ## [2.1.2](microsoft/kiota-dotnet@v2.1.1...v2.1.2) (2026-09-08) ### Bug Fixes * **serialization-json:** honor custom TimeSpan converters ([#795](microsoft/kiota-dotnet#795)) ([e22c5ba](microsoft/kiota-dotnet@e22c5ba)) * **serialization-json:** honor DateTimeOffset converters ([802e20a](microsoft/kiota-dotnet@802e20a)) * **serialization-json:** honor guid converters before fallback parsing ([#794](microsoft/kiota-dotnet#794)) ([22cc1d3](microsoft/kiota-dotnet@22cc1d3)) Commits viewable in [compare view](microsoft/kiota-dotnet@v2.1.1...v2.1.2). </details> Updated [Microsoft.Kiota.Serialization.Text](https://github.com/microsoft/kiota-dotnet) from 2.1.1 to 2.1.2. <details> <summary>Release notes</summary> _Sourced from [Microsoft.Kiota.Serialization.Text's releases](https://github.com/microsoft/kiota-dotnet/releases)._ ## 2.1.2 ## [2.1.2](microsoft/kiota-dotnet@v2.1.1...v2.1.2) (2026-09-08) ### Bug Fixes * **serialization-json:** honor custom TimeSpan converters ([#795](microsoft/kiota-dotnet#795)) ([e22c5ba](microsoft/kiota-dotnet@e22c5ba)) * **serialization-json:** honor DateTimeOffset converters ([802e20a](microsoft/kiota-dotnet@802e20a)) * **serialization-json:** honor guid converters before fallback parsing ([#794](microsoft/kiota-dotnet#794)) ([22cc1d3](microsoft/kiota-dotnet@22cc1d3)) Commits viewable in [compare view](microsoft/kiota-dotnet@v2.1.1...v2.1.2). </details> Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 18.9.0 to 18.11.0. <details> <summary>Release notes</summary> _Sourced from [Microsoft.NET.Test.Sdk's releases](https://github.com/microsoft/vstest/releases)._ ## 18.11.0 <!-- Release notes generated using configuration in .github/release.yml at rel/18.11 --> ## What's Changed * Fix TRX logger mangling astral-plane (non-BMP) characters by @azat-msft in microsoft/vstest#16318 * Disable the MTP testhost by default by @nohwnd in microsoft/vstest#16337 * Fix OS-blind apphost probe in MTP bridge on Unix (regression from #16201) by @azat-msft in microsoft/vstest#16336 * Retarget the MTP client onto Microsoft.Testing.Platform.ServerMode.Client.Sources by @nohwnd in microsoft/vstest#16300 * Pass arguments to PowerShell with -File instead of -command by @nohwnd in microsoft/vstest#16363 * Respect console logger verbosity from a settings file by @nohwnd in microsoft/vstest#16044 * Fix backslash normalization in VSTestCLIRunSettings on Unix by @nohwnd in microsoft/vstest#15795 * Docs: fix typo explicitely -> explicitly by @vaibhav8a in microsoft/vstest#16397 * Copy acceptance test diagnostic logs into the test results directory by @nohwnd in microsoft/vstest#16403 ## New Contributors * @vaibhav8a made their first contribution in microsoft/vstest#16397 **Full Changelog**: microsoft/vstest@v18.10.1...v18.11.0 ## 18.10.1 ## What's Changed * Isolate code coverage files in published output by @azat-msft in microsoft/vstest#16476 **Full Changelog**: microsoft/vstest@v18.10.0...v18.10.1 ## 18.10.0 ## What's Changed * Drop Mono fallback, run .NET Framework tests on Windows only by @nohwnd in microsoft/vstest#16158 * Run Microsoft.Testing.Platform test apps under `vstest.console` and datacollector by @nohwnd in microsoft/vstest#16201 * Fix test output eaten by MSBuild terminal logger by @nohwnd in microsoft/vstest#16223 * Remove the experimental test session feature by @nohwnd in microsoft/vstest#16231 * Skip a single bad executor instead of failing all executor loading by @nohwnd in microsoft/vstest#16239 * Assert apartment state instead of using Clipboard in UI tests by @nohwnd in microsoft/vstest#16270 * Surface test host crashes during protocol negotiation by @nohwnd in microsoft/vstest#16285 * Pass the inferred target platform to the host in run settings by @nohwnd in microsoft/vstest#16271 * Report raw invalid IsTargetPlatformInferred value, cover host x64 forcing by @nohwnd in microsoft/vstest#16295 * Disable the MTP testhost by default (#16337) by @nohwnd in microsoft/vstest#16341 **Full Changelog**: microsoft/vstest@v18.9.0...v18.10.0 Commits viewable in [compare view](microsoft/vstest@v18.9.0...v18.11.0). </details> Updated [microsoft.openapi.kiota](https://github.com/microsoft/kiota) from 1.35.0 to 1.36.1. <details> <summary>Release notes</summary> _Sourced from [microsoft.openapi.kiota's releases](https://github.com/microsoft/kiota/releases)._ ## 1.36.1 ## Added ### Changed - Fixed small issues with release pipelines ## 1.36.0 ## Added - Ruby: an error's `message` returns the property the description marks with `x-ms-primary-error-message`, as the other languages do. An error property named `message` is renamed `message_escaped`, like `MessageEscaped` in C#; when it is a string, `message` still returns it. [kiota-ruby#63](microsoft/kiota-ruby#63) ### Changed - Fixed relative description paths when opening or selecting clients in the VS Code Kiota workspace. - Removed the retired lock-search command from the VS Code command palette. Lock-file migration remains available. - Preserve inherited properties when a single `oneOf` or `anyOf` member defines its properties only through `allOf`. Fixes [#6778](microsoft/kiota#6778). - Python: preserve false, zero, empty strings, and empty collections when parsing and serializing union type wrappers. - All language refiners accept a generation logger consistently, retaining configuration-only compatibility constructors hidden from IntelliSense. - Reject plugin-manifest file references whose path components become parent-directory traversal after Windows trims trailing spaces or dots. - Fixed a stack overflow when generating API plugins from descriptions with cyclic `allOf` schemas. - Dart: omit unsupported schema defaults with a generation warning, preserve supported literal and enum property and parameter defaults (including empty strings), initialize query parameters from schema defaults, and keep constructor initialization valid with or without backing stores. - Dart: preserve nullable optional request-builder constructor parameters, including UUIDs and collections, so cloning accepts null arguments without overwriting existing path parameters. - Dart: escape URL templates once at final emission to preserve literal dollar signs and backslashes in constructor defaults and method overrides. - Dart: preserve schema string defaults named `null`, including enum wire values, without treating them as JSON-null sentinels. - Dart: preserve query-parameter defaults inside single-member `allOf` wrappers, retaining outer-default precedence and explicit JSON-null defaults. - Dart: validate parser-backed date, time, and UUID defaults before emission, omitting unsupported values with a generation warning. - Ruby: a union of object types that no discriminator decides, such as a oneOf without a discriminator, now reads the payload into every object member, as TypeScript does, instead of returning an empty wrapper. A union whose discriminator matched no member does the same, and its array member is only read when no other member was picked. Requires the runtime gems at 0.24.0. - Ruby: enum members hold their wire value, so a value such as `incoming-payment` or `read` is sent and read as the description declares it instead of as `IncomingPayment` or `Read`. `Enum[:Name]` now returns the wire value as a string. Requires the runtime gems at 0.24.0. - Go: keep escaped namespace segments lowercase so imports match generated package directories on case-sensitive filesystems. Fixes [#7828](microsoft/kiota#7828). - TypeScript: import response enum objects for request builders reached through path parameters. [#6884](microsoft/kiota#6884) - Resolve enum query parameters wrapped in single-member `allOf` schemas, including enum array items. - Go: cast scalar enum values in union factories and avoid reading an empty discriminator name for undiscriminated unions. Addresses [#7808](microsoft/kiota#7808). - Preserve models for multipart properties with default content types when other properties specify an encoding. [#7342](microsoft/kiota#7342) - Dart: escape enum options named value or values to avoid conflicts with generated and built-in enum members. [#7807](microsoft/kiota#7807) - Ruby: the client's root module has an `eager_load!` method that loads every autoloaded model, for servers that preload before forking. - Ruby: generated files start with `# frozen_string_literal: true`, so string default values handed to user code are frozen. - Ruby: generated string literals are double quoted, the StandardRB convention. - Ruby: namespaces with nothing to autoload no longer get an empty barrel file, and generated files no longer require them (561 fewer files in a GitHub client). - Ruby: a client generated with a multi-segment `--namespace-name`, such as `integration_test.client`, failed to load because its root file was written one directory too deep. - Ruby: namespace barrels register their models and enums with `autoload` instead of requiring them, so a subclass no longer fails to load when its base class file is required first. Other files require the barrel rather than an individual model file, and models now load on first use. A type no barrel autoloads, such as a model named after its namespace, is now required directly: 1,315 constants referenced by a Meraki client never loaded, and a client generated from the current GitHub description failed to load because it required a file that is never written. [#7956](microsoft/kiota#7956) - Ruby: model properties are declared with `attr_accessor`, which removes the thousands of "possibly useless use of a variable" warnings `ruby -w` printed while loading a client. - Ruby: enum hashes are frozen. [kiota-ruby#68](microsoft/kiota-ruby#68) - C#: escape Unicode line and paragraph separators in generated string literals so generated clients remain valid C# source. - External reference allowlist wildcards no longer cross the URI authority boundary, so a wildcard in the scheme or host cannot match text in the path, the user information or the port. - Initialize inherited Dart model fields in constructor initializer lists. - Replace only unresolved binary types with a native stream type, and translate a resolved model by its definition rather than its name, so a model whose schema is named `binary`, `base64` or `base64url` keeps its own name across every language instead of being rendered as the native binary type. Generation no longer fails for C# and Java. - Avoid redundant parsing branches for equivalent binary alternatives in Dart and PHP composed models. - Preserve imports for distinct types from the same namespace when inlining error model inheritance. - Dart: qualify model fields named `node` or `deserializerMap` during deserialization so local variables do not shadow them; escape `override` model members to preserve Dart annotations. Fixes [#7822](microsoft/kiota#7822). - PHP: disambiguate enum constants that normalize to the same name while preserving wire values and existing constant names. - Java: omit unused discriminator-mapping imports for union/intersection wrappers, avoiding imports of nonexistent models while retaining member and inherited-factory imports. - Dart: omit unused discriminator-mapping imports for composed wrappers while preserving member and inherited-factory imports. Addresses [#7821](microsoft/kiota#7821). - Preserve endpoints whose static path segments collide after name sanitization, such as /v1.1 and /v11. [#7143](microsoft/kiota#7143) - Ruby: a path with an escaped suffix, such as `/domains/{domainName}!quote`, generated a request builder method that passed the raw path parameter name where the signature had snake cased it, and referenced the builder class without its namespace. Both raised `NameError` on first use. [#7956](microsoft/kiota#7956) ... (truncated) Commits viewable in [compare view](microsoft/kiota@v1.35.0...v1.36.1). </details> Updated [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 4.0.0 to 4.0.1. <details> <summary>Release notes</summary> _Sourced from [xunit.runner.visualstudio's releases](https://github.com/xunit/visualstudio.xunit/releases)._ ## 4.0.1 Release notes: https://xunit.net/releases/visualstudio/4.0.1 Commits viewable in [compare view](xunit/visualstudio.xunit@4.0.0...4.0.1). </details> Updated [xunit.v3](https://github.com/xunit/xunit) from 4.0.0 to 4.0.2. <details> <summary>Release notes</summary> _Sourced from [xunit.v3's releases](https://github.com/xunit/xunit/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/xunit/xunit/commits). </details> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Steinar Hjellvik <38071413+shjellvik@users.noreply.github.com>
This was referenced Nov 1, 2026
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.
Fixes #6072 through an explicit opt-in for Linux container deployments.
Changes proposed in this request
MSAL_ALLOW_SYSTEM_BROWSER_PORT_FORWARDING. Onlytrue(case-insensitive) or1enables the behavior; unset, empty, or other values leave it disabled.HttpListenerInterceptor.Testing
dotnet test tests/Microsoft.Identity.Test.Unit/Microsoft.Identity.Test.Unit.csproj --framework net8.0 --filter "FullyQualifiedName~HttpListenerInterceptorTests|FullyQualifiedName~DefaultOsBrowserWebUiTests" -p:EnableWindowsTargeting=truelocalhostHost header.Performance impact
One environment-variable read per listener construction. The additional localhost lookup and IPv4 listener are used only when forwarding is enabled on Linux. No performance benchmarks were run.
Documentation
Usage and network-exposure warnings are in
docs/system-browser-port-forwarding.md; the project README is unchanged. Enable only in an isolated container, restrict the published host port to loopback, and restrict access from other containers.