diff --git a/extensions/azurecore/package.json b/extensions/azurecore/package.json index ae2192d6b1..a899d7873d 100644 --- a/extensions/azurecore/package.json +++ b/extensions/azurecore/package.json @@ -39,6 +39,11 @@ "type": "boolean", "default": true, "description": "%config.enablePublicCloudDescription%" + }, + "accounts.azure.enableDeviceCodeLogin": { + "type": "boolean", + "default": false, + "description": "%config.enableDeviceCodeLogin%" } } }, diff --git a/extensions/azurecore/package.nls.json b/extensions/azurecore/package.nls.json index c7083e86fc..5ce74b1569 100644 --- a/extensions/azurecore/package.nls.json +++ b/extensions/azurecore/package.nls.json @@ -21,5 +21,6 @@ "config.enableUsGovCloudDescription": "Should US Government Azure cloud (Fairfax) integration be enabled", "config.enableChinaCloudDescription": "Should Azure China integration be enabled", "config.enableGermanyCloudDescription": "Should Azure Germany integration be enabled", - "config.enableArcFeatures": "Should features related to Azure Arc be enabled (preview)" + "config.enableArcFeatures": "Should features related to Azure Arc be enabled (preview)", + "config.enableDeviceCodeLogin": "Enable Azure Active Directory device code login mechanism" } diff --git a/extensions/azurecore/src/account-provider/azureAccountProviderService.ts b/extensions/azurecore/src/account-provider/azureAccountProviderService.ts index 613f94bcb1..6f43464505 100644 --- a/extensions/azurecore/src/account-provider/azureAccountProviderService.ts +++ b/extensions/azurecore/src/account-provider/azureAccountProviderService.ts @@ -10,7 +10,8 @@ import * as path from 'path'; import * as vscode from 'vscode'; import CredentialServiceTokenCache from './tokenCache'; import providerSettings from './providerSettings'; -import { AzureAccountProvider as AzureAccountProvider } from './azureAccountProvider2'; +import { AzureAccountProvider as OAuthAzureAccountProvider } from './azureAccountProvider2'; +import { AzureAccountProvider as DeviceCodeAzureAccountProvider } from './azureAccountProvider'; import { AzureAccountProviderMetadata, ProviderSettings } from './interfaces'; import * as loc from '../localizedConstants'; @@ -132,12 +133,18 @@ export class AzureAccountProviderService implements vscode.Disposable { return new Promise((resolve, reject) => { try { - //let config = vscode.workspace.getConfiguration(AzureAccountProviderService.ConfigurationSection); + let config = vscode.workspace.getConfiguration(AzureAccountProviderService.ConfigurationSection); let tokenCacheKey = `azureTokenCache-${provider.metadata.id}`; let tokenCachePath = path.join(this._userStoragePath, tokenCacheKey); let tokenCache = new CredentialServiceTokenCache(self._credentialProvider, tokenCacheKey, tokenCachePath); - let accountProvider = new AzureAccountProvider(provider.metadata as AzureAccountProviderMetadata, tokenCache, this._context); + const enableDeviceCode = config.get('enableDeviceCodeLogin'); + let accountProvider: azdata.AccountProvider; + if (enableDeviceCode === undefined || enableDeviceCode === false) { + accountProvider = new OAuthAzureAccountProvider(provider.metadata as AzureAccountProviderMetadata, tokenCache, this._context); + } else { + accountProvider = new DeviceCodeAzureAccountProvider(provider.metadata as AzureAccountProviderMetadata, tokenCache); + } self._accountProviders[provider.metadata.id] = accountProvider; self._accountDisposals[provider.metadata.id] = azdata.accounts.registerAccountProvider(provider.metadata, accountProvider); resolve();