Add device code authentication (#9097)

* Add device code authentication

* Change string
This commit is contained in:
Amir Omidi
2020-02-07 17:15:09 -08:00
committed by GitHub
parent 8e731c75c3
commit ba66305bb5
3 changed files with 16 additions and 4 deletions

View File

@@ -39,6 +39,11 @@
"type": "boolean",
"default": true,
"description": "%config.enablePublicCloudDescription%"
},
"accounts.azure.enableDeviceCodeLogin": {
"type": "boolean",
"default": false,
"description": "%config.enableDeviceCodeLogin%"
}
}
}

View File

@@ -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"
}

View File

@@ -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();