From ba66305bb524a1b0220d7fb2cb17f6f5b0d164b2 Mon Sep 17 00:00:00 2001 From: Amir Omidi Date: Fri, 7 Feb 2020 17:15:09 -0800 Subject: [PATCH] Add device code authentication (#9097) * Add device code authentication * Change string --- extensions/azurecore/package.json | 5 +++++ extensions/azurecore/package.nls.json | 2 +- .../account-provider/azureAccountProviderService.ts | 13 ++++++++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/extensions/azurecore/package.json b/extensions/azurecore/package.json index 920057d5ef..0a6b6001e3 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 00cf99420a..db70d3e38a 100644 --- a/extensions/azurecore/package.nls.json +++ b/extensions/azurecore/package.nls.json @@ -19,5 +19,5 @@ "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.useNewSignInExperience": "Use the new Azure sign in experience" + "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 4b124a9e44..d7c36529d9 100644 --- a/extensions/azurecore/src/account-provider/azureAccountProviderService.ts +++ b/extensions/azurecore/src/account-provider/azureAccountProviderService.ts @@ -11,7 +11,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'; let localize = nls.loadMessageBundle(); @@ -133,12 +134,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();