Skip to content

Replace CloudEnvironment with MSAL-aligned Instance property for sovereign cloud support#357

Draft
Copilot wants to merge 5 commits intofeature/sovereign-cloud-supportfrom
copilot/sub-pr-352
Draft

Replace CloudEnvironment with MSAL-aligned Instance property for sovereign cloud support#357
Copilot wants to merge 5 commits intofeature/sovereign-cloud-supportfrom
copilot/sub-pr-352

Conversation

Copy link
Contributor

Copilot AI commented Feb 27, 2026

CloudEnvironment duplicated configuration already offered by MSAL. Replaced with an Instance property following the Microsoft Identity Web configuration schema.

Removed

  • CloudEnvironment class and its tests
  • Cloud property from AppOptions, ClientCredentials, TeamsSettings
  • ResolveCloud() and per-endpoint override properties from TeamsSettings
  • Cloud resolution logic from both HostApplicationBuilder extensions

Added

  • Instance property on TeamsSettings, ClientCredentials, and TeamsValidationSettings
  • Defaults to https://login.microsoftonline.com (public cloud)
  • Flows from config → credentials → token validation automatically
  • Tests for ClientCredentials and TeamsValidationSettings Instance behavior

Usage

Override the Entra ID login endpoint for sovereign clouds via appsettings.json:

{
  "Teams": {
    "Instance": "https://login.microsoftonline.us",
    "TenantId": "...",
    "ClientId": "...",
    "ClientSecret": "..."
  }
}

Or programmatically:

var credentials = new ClientCredentials("client-id", "secret", "tenant-id")
{
    Instance = "https://login.microsoftonline.us"
};

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • token.botframework.com
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net8.0/Microsoft.Teams.Apps.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net8.0/Microsoft.Teams.Apps.Tests.deps.json /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net8.0/testhost.dll --port 42727 --endpoint 127.0.0.1:042727 --role client --parentprocessid 5673 --telemetryoptedin false (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/Microsoft.Teams.Apps.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/Microsoft.Teams.Apps.Tests.deps.json /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/testhost.dll --port 32931 --endpoint 127.0.0.1:032931 --role client --parentprocessid 5666 --telemetryoptedin false (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

…oach

Remove static preset instances (USGov, USGovDoD, China, Public) and
FromName() from CloudEnvironment. Make constructor use default parameter
values matching existing public cloud defaults. Remove Cloud string
property from TeamsSettings. All sovereign cloud configuration now
comes from appsettings.json endpoint properties or programmatic
CloudEnvironment construction.

Addresses review feedback from rido-min: don't hardcode Entra URLs
we don't own in the codebase.

Co-authored-by: rido-min <14916339+rido-min@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 27, 2026

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • token.botframework.com
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net8.0/Microsoft.Teams.Apps.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net8.0/Microsoft.Teams.Apps.Tests.deps.json /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net8.0/testhost.dll --port 37553 --endpoint 127.0.0.1:037553 --role client --parentprocessid 4898 --telemetryoptedin false (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/Microsoft.Teams.Apps.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/Microsoft.Teams.Apps.Tests.deps.json /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/testhost.dll --port 40135 --endpoint 127.0.0.1:040135 --role client --parentprocessid 4905 --telemetryoptedin false (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/Microsoft.Teams.Apps.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/Microsoft.Teams.Apps.Tests.deps.json /home/REDACTED/work/teams.net/teams.net/Tests/Microsoft.Teams.Apps.Tests/bin/Debug/net10.0/testhost.dll --port 41499 --endpoint 127.0.0.1:041499 --role client --parentprocessid 5823 --telemetryoptedin false (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Add sovereign cloud support for GCCH, DoD, and China Remove hardcoded sovereign cloud presets, use configuration-only approach Feb 27, 2026
Remove the CloudEnvironment class and all its usages across the
codebase. Revert ClientCredentials, App, AppOptions, TeamsSettings,
TeamsValidationSettings, BotTokenClient, UserTokenClient, BotSignInClient,
and both HostApplicationBuilder files to their original state with
hardcoded public cloud defaults.

The SDK should not duplicate the configuration schema offered by
MSAL/Microsoft Identity Web. Cloud endpoint configuration should
follow the AzureAd configuration pattern described in the Microsoft
Identity Web wiki.

Co-authored-by: rido-min <14916339+rido-min@users.noreply.github.com>
Copilot AI changed the title Remove hardcoded sovereign cloud presets, use configuration-only approach Remove CloudEnvironment class — duplicates MSAL configuration Feb 27, 2026
Copilot AI and others added 2 commits February 27, 2026 15:58
Follow the Microsoft Identity Web configuration schema by adding an
Instance property to TeamsSettings and ClientCredentials. This allows
overriding the Entra ID login endpoint for sovereign clouds (e.g.,
https://login.microsoftonline.us for US Gov) through appsettings.json:

  "Teams": {
    "Instance": "https://login.microsoftonline.us",
    "TenantId": "...",
    "ClientId": "...",
    "ClientSecret": "..."
  }

The Instance property flows through to:
- ClientCredentials.Resolve() for token acquisition
- TeamsValidationSettings for issuer and OpenID metadata URLs

Co-authored-by: rido-min <14916339+rido-min@users.noreply.github.com>
Co-authored-by: rido-min <14916339+rido-min@users.noreply.github.com>
Copilot AI changed the title Remove CloudEnvironment class — duplicates MSAL configuration Replace CloudEnvironment with MSAL-aligned Instance property for sovereign cloud support Feb 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants