Skip to content

Commit ea54d9c

Browse files
authored
[Identity] Fix VisualStudioCodeCredential to use refresh token for AzureCloud by default (Azure#16775)
* [Identity] Fix VisualStudioCodeCredential to use refresh token for AzureCloud by default * fix GetAzureCloudInstance logic
1 parent dc47a89 commit ea54d9c

File tree

5 files changed

+19
-16
lines changed

5 files changed

+19
-16
lines changed

sdk/identity/Azure.Identity/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Release History
22
## 1.3.0-beta.3 (Unreleased)
33

4+
### Fixes and improvements
5+
- Prevent `VisualStudioCodeCredential` using invalid authentication data when no user is signed in to Visual Studio Code ([#15870](https://github.com/Azure/azure-sdk-for-net/issues/15870))
6+
47
### Breaking Changes
58
- Rename property `IncludeX5CClaimHeader` on `ClientCertificateCredentialOptions` to `SendCertificateChain`
69
- Removing Application Authentication APIs for GA release. These will be reintroduced in 1.4.0-beta.1.

sdk/identity/Azure.Identity/src/VisualStudioCodeCredential.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private void GetUserSettings(out string tenant, out string environmentName)
120120
{
121121
var path = _vscAdapter.GetUserSettingsPath();
122122
tenant = _tenantId;
123-
environmentName = "Azure";
123+
environmentName = "AzureCloud";
124124

125125
try
126126
{
@@ -164,7 +164,7 @@ private static IVisualStudioCodeAdapter GetVscAdapter()
164164
private static AzureCloudInstance GetAzureCloudInstance(string name) =>
165165
name switch
166166
{
167-
"Azure" => AzureCloudInstance.AzurePublic,
167+
"AzureCloud" => AzureCloudInstance.AzurePublic,
168168
"AzureChina" => AzureCloudInstance.AzureChina,
169169
"AzureGermanCloud" => AzureCloudInstance.AzureGermany,
170170
"AzureUSGovernment" => AzureCloudInstance.AzureUsGovernment,

sdk/identity/Azure.Identity/tests/ChainedTokenCredentialLiveTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public async Task ChainedTokenCredential_UseVisualStudioCodeCredential_ParallelC
117117
public async Task ChainedTokenCredential_UseAzureCliCredential()
118118
{
119119
var (expectedToken, expectedExpiresOn, processOutput) = CredentialTestHelpers.CreateTokenForAzureCli();
120-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null);
120+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", null);
121121
var fileSystem = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment);
122122
var processService = new TestProcessService(new TestProcess { Output = processOutput });
123123

@@ -148,7 +148,7 @@ public async Task ChainedTokenCredential_UseAzureCliCredential()
148148
public async Task ChainedTokenCredential_UseAzureCliCredential_ParallelCalls()
149149
{
150150
var (expectedToken, expectedExpiresOn, processOutput) = CredentialTestHelpers.CreateTokenForAzureCli();
151-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null);
151+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", null);
152152
var fileSystem = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment);
153153
var processService = new TestProcessService { CreateHandler = psi => new TestProcess { Output = processOutput }};
154154

@@ -177,7 +177,7 @@ public async Task ChainedTokenCredential_UseAzureCliCredential_ParallelCalls()
177177
[Test]
178178
public void ChainedTokenCredential_AllCredentialsHaveFailed_CredentialUnavailableException()
179179
{
180-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", "{}");
180+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", "{}");
181181

182182
var fileSystem = new TestFileSystemService();
183183
var processService = new TestProcessService(new TestProcess { Error = "'az' is not recognized" });
@@ -232,7 +232,7 @@ public void ChainedTokenCredential_AllCredentialsHaveFailed_FirstAuthenticationF
232232
[Test]
233233
public void ChainedTokenCredential_AllCredentialsHaveFailed_LastAuthenticationFailedException()
234234
{
235-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null);
235+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", null);
236236
var fileSystem = new TestFileSystemService();
237237
var processService = new TestProcessService(new TestProcess {Error = "Error"});
238238

sdk/identity/Azure.Identity/tests/DefaultAzureCredentialLiveTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public async Task DefaultAzureCredential_UseAzureCliCredential()
142142

143143
var (expectedToken, expectedExpiresOn, processOutput) = CredentialTestHelpers.CreateTokenForAzureCli();
144144
var testProcess = new TestProcess { Output = processOutput };
145-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null);
145+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", null);
146146
var fileSystem = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment);
147147

148148
var factory = new TestDefaultAzureCredentialFactory(options, fileSystem, new TestProcessService(testProcess), vscAdapter) { ManagedIdentitySourceFactory = () => default };
@@ -178,7 +178,7 @@ public async Task DefaultAzureCredential_UseAzureCliCredential_ParallelCalls()
178178

179179
var (expectedToken, expectedExpiresOn, processOutput) = CredentialTestHelpers.CreateTokenForAzureCli();
180180
var processService = new TestProcessService { CreateHandler = psi => new TestProcess { Output = processOutput }};
181-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null);
181+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", null);
182182
var fileSystem = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment);
183183

184184
var factory = new TestDefaultAzureCredentialFactory(options, fileSystem, processService, vscAdapter) { ManagedIdentitySourceFactory = () => default };
@@ -210,7 +210,7 @@ public void DefaultAzureCredential_AllCredentialsHaveFailed_CredentialUnavailabl
210210
ExcludeSharedTokenCacheCredential = true,
211211
});
212212

213-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", "{}");
213+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", "{}");
214214
var factory = new TestDefaultAzureCredentialFactory(options, new TestFileSystemService(), new TestProcessService(new TestProcess { Error = "'az' is not recognized" }), vscAdapter) { ManagedIdentitySourceFactory = () => default };
215215
var credential = InstrumentClient(new DefaultAzureCredential(factory, options));
216216

@@ -266,7 +266,7 @@ public void DefaultAzureCredential_AllCredentialsHaveFailed_LastAuthenticationFa
266266
ExcludeSharedTokenCacheCredential = true,
267267
});
268268

269-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null);
269+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", null);
270270
var factory = new TestDefaultAzureCredentialFactory(options, new TestFileSystemService(), new TestProcessService(new TestProcess { Error = "Error" }), vscAdapter) { ManagedIdentitySourceFactory = () => default };
271271
var credential = InstrumentClient(new DefaultAzureCredential(factory, options));
272272

sdk/identity/Azure.Identity/tests/VisualStudioCodeCredentialLiveTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public async Task AuthenticateWithVscCredential_NoSettingsFile()
3939
{
4040
var refreshToken = await CredentialTestHelpers.GetRefreshTokenAsync(TestEnvironment, Mode);
4141
var fileSystemService = new TestFileSystemService { ReadAllHandler = s => throw new FileNotFoundException() };
42-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", refreshToken);
42+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", refreshToken);
4343

4444
var options = InstrumentClientOptions(new VisualStudioCodeCredentialOptions { TenantId = TestEnvironment.TestTenantId });
4545
VisualStudioCodeCredential credential = InstrumentClient(new VisualStudioCodeCredential(options, default, default, fileSystemService, vscAdapter));
@@ -52,7 +52,7 @@ public async Task AuthenticateWithVscCredential_BrokenSettingsFile()
5252
{
5353
var refreshToken = await CredentialTestHelpers.GetRefreshTokenAsync(TestEnvironment, Mode);
5454
var fileSystemService = new TestFileSystemService { ReadAllHandler = s => "{a,}" };
55-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", refreshToken);
55+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", refreshToken);
5656

5757
var options = InstrumentClientOptions(new VisualStudioCodeCredentialOptions { TenantId = TestEnvironment.TestTenantId });
5858
VisualStudioCodeCredential credential = InstrumentClient(new VisualStudioCodeCredential(options, default, default, fileSystemService, vscAdapter));
@@ -65,7 +65,7 @@ public async Task AuthenticateWithVscCredential_EmptySettingsFile()
6565
{
6666
var refreshToken = await CredentialTestHelpers.GetRefreshTokenAsync(TestEnvironment, Mode);
6767
var fileSystemService = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment);
68-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", refreshToken);
68+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", refreshToken);
6969

7070
var options = InstrumentClientOptions(new VisualStudioCodeCredentialOptions { TenantId = TestEnvironment.TestTenantId });
7171
VisualStudioCodeCredential credential = InstrumentClient(new VisualStudioCodeCredential(options, default, default, fileSystemService, vscAdapter));
@@ -107,7 +107,7 @@ public void AuthenticateWithVscCredential_NoVscInstalled()
107107
public void AuthenticateWithVscCredential_NoRefreshToken()
108108
{
109109
var tenantId = TestEnvironment.TestTenantId;
110-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", null);
110+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", null);
111111
var fileSystem = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment);
112112

113113
var options = InstrumentClientOptions(new VisualStudioCodeCredentialOptions { TenantId = tenantId });
@@ -121,7 +121,7 @@ public void AuthenticateWithVscCredential_AuthenticationCodeInsteadOfRefreshToke
121121
{
122122
var tenantId = TestEnvironment.TestTenantId;
123123
var fileSystemService = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment);
124-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", "{}");
124+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", "{}");
125125

126126
var options = InstrumentClientOptions(new VisualStudioCodeCredentialOptions { TenantId = tenantId });
127127
VisualStudioCodeCredential credential = InstrumentClient(new VisualStudioCodeCredential(options, default, default, fileSystemService, vscAdapter));
@@ -134,7 +134,7 @@ public void AuthenticateWithVscCredential_InvalidRefreshToken()
134134
{
135135
var tenantId = TestEnvironment.TestTenantId;
136136
var fileSystemService = CredentialTestHelpers.CreateFileSystemForVisualStudioCode(TestEnvironment);
137-
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "Azure", Guid.NewGuid().ToString());
137+
var vscAdapter = new TestVscAdapter(ExpectedServiceName, "AzureCloud", Guid.NewGuid().ToString());
138138

139139
var options = InstrumentClientOptions(new VisualStudioCodeCredentialOptions { TenantId = tenantId });
140140
VisualStudioCodeCredential credential = InstrumentClient(new VisualStudioCodeCredential(options, default, default, fileSystemService, vscAdapter));

0 commit comments

Comments
 (0)