@azure/identity 4.5.0-beta.2 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -74
- package/dist/index.js +190 -81
- package/dist/index.js.map +1 -1
- package/dist-esm/src/client/identityClient.js +4 -2
- package/dist-esm/src/client/identityClient.js.map +1 -1
- package/dist-esm/src/constants.js +2 -2
- package/dist-esm/src/constants.js.map +1 -1
- package/dist-esm/src/credentials/authorityValidationOptions.js +1 -1
- package/dist-esm/src/credentials/authorityValidationOptions.js.map +1 -1
- package/dist-esm/src/credentials/authorizationCodeCredential.browser.js +1 -1
- package/dist-esm/src/credentials/authorizationCodeCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/authorizationCodeCredential.js +1 -1
- package/dist-esm/src/credentials/authorizationCodeCredential.js.map +1 -1
- package/dist-esm/src/credentials/authorizationCodeCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/authorizationCodeCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/azureApplicationCredential.browser.js +1 -1
- package/dist-esm/src/credentials/azureApplicationCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/azureApplicationCredential.js +1 -1
- package/dist-esm/src/credentials/azureApplicationCredential.js.map +1 -1
- package/dist-esm/src/credentials/azureApplicationCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/azureApplicationCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/azureCliCredential.browser.js +1 -1
- package/dist-esm/src/credentials/azureCliCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/azureCliCredential.js +3 -1
- package/dist-esm/src/credentials/azureCliCredential.js.map +1 -1
- package/dist-esm/src/credentials/azureCliCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/azureCliCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/azureDeveloperCliCredential.browser.js +1 -1
- package/dist-esm/src/credentials/azureDeveloperCliCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/azureDeveloperCliCredential.js +2 -1
- package/dist-esm/src/credentials/azureDeveloperCliCredential.js.map +1 -1
- package/dist-esm/src/credentials/azureDeveloperCliCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/azureDeveloperCliCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/azurePipelinesCredential.browser.js +1 -1
- package/dist-esm/src/credentials/azurePipelinesCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/azurePipelinesCredential.js +16 -5
- package/dist-esm/src/credentials/azurePipelinesCredential.js.map +1 -1
- package/dist-esm/src/credentials/azurePipelinesCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/azurePipelinesCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/azurePowerShellCredential.browser.js +1 -1
- package/dist-esm/src/credentials/azurePowerShellCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/azurePowerShellCredential.js +2 -1
- package/dist-esm/src/credentials/azurePowerShellCredential.js.map +1 -1
- package/dist-esm/src/credentials/azurePowerShellCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/azurePowerShellCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/brokerAuthOptions.js.map +1 -1
- package/dist-esm/src/credentials/browserCustomizationOptions.js +1 -1
- package/dist-esm/src/credentials/browserCustomizationOptions.js.map +1 -1
- package/dist-esm/src/credentials/chainedTokenCredential.js +9 -2
- package/dist-esm/src/credentials/chainedTokenCredential.js.map +1 -1
- package/dist-esm/src/credentials/clientAssertionCredential.browser.js +1 -1
- package/dist-esm/src/credentials/clientAssertionCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/clientAssertionCredential.js +1 -1
- package/dist-esm/src/credentials/clientAssertionCredential.js.map +1 -1
- package/dist-esm/src/credentials/clientAssertionCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/clientAssertionCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/clientCertificateCredential.browser.js +1 -1
- package/dist-esm/src/credentials/clientCertificateCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/clientCertificateCredential.js +1 -1
- package/dist-esm/src/credentials/clientCertificateCredential.js.map +1 -1
- package/dist-esm/src/credentials/clientCertificateCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/clientCertificateCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/clientSecretCredential.browser.js +1 -1
- package/dist-esm/src/credentials/clientSecretCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/clientSecretCredential.js +1 -1
- package/dist-esm/src/credentials/clientSecretCredential.js.map +1 -1
- package/dist-esm/src/credentials/clientSecretCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/clientSecretCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/credentialPersistenceOptions.js +1 -1
- package/dist-esm/src/credentials/credentialPersistenceOptions.js.map +1 -1
- package/dist-esm/src/credentials/defaultAzureCredential.browser.js +1 -1
- package/dist-esm/src/credentials/defaultAzureCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/defaultAzureCredential.js +1 -1
- package/dist-esm/src/credentials/defaultAzureCredential.js.map +1 -1
- package/dist-esm/src/credentials/defaultAzureCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/defaultAzureCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/deviceCodeCredential.browser.js +1 -1
- package/dist-esm/src/credentials/deviceCodeCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/deviceCodeCredential.js +7 -5
- package/dist-esm/src/credentials/deviceCodeCredential.js.map +1 -1
- package/dist-esm/src/credentials/deviceCodeCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/deviceCodeCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/environmentCredential.browser.js +1 -1
- package/dist-esm/src/credentials/environmentCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/environmentCredential.js +1 -1
- package/dist-esm/src/credentials/environmentCredential.js.map +1 -1
- package/dist-esm/src/credentials/environmentCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/environmentCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/interactiveBrowserCredential.browser.js +1 -1
- package/dist-esm/src/credentials/interactiveBrowserCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/interactiveBrowserCredential.js +1 -1
- package/dist-esm/src/credentials/interactiveBrowserCredential.js.map +1 -1
- package/dist-esm/src/credentials/interactiveBrowserCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/interactiveBrowserCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/interactiveCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/interactiveCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/appServiceMsi2017.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/appServiceMsi2017.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/appServiceMsi2019.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/appServiceMsi2019.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/arcMsi.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/arcMsi.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/cloudShellMsi.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/cloudShellMsi.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/constants.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/constants.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/fabricMsi.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/fabricMsi.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/imdsMsi.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/imdsMsi.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/imdsRetryPolicy.js +6 -10
- package/dist-esm/src/credentials/managedIdentityCredential/imdsRetryPolicy.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/index.browser.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/index.browser.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/index.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/index.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/legacyMsiProvider.js +8 -1
- package/dist-esm/src/credentials/managedIdentityCredential/legacyMsiProvider.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/models.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/models.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/msalMsiProvider.js +21 -4
- package/dist-esm/src/credentials/managedIdentityCredential/msalMsiProvider.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/tokenExchangeMsi.js +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/tokenExchangeMsi.js.map +1 -1
- package/dist-esm/src/credentials/managedIdentityCredential/utils.js +26 -1
- package/dist-esm/src/credentials/managedIdentityCredential/utils.js.map +1 -1
- package/dist-esm/src/credentials/multiTenantTokenCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/multiTenantTokenCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/onBehalfOfCredential.browser.js +1 -1
- package/dist-esm/src/credentials/onBehalfOfCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/onBehalfOfCredential.js +1 -1
- package/dist-esm/src/credentials/onBehalfOfCredential.js.map +1 -1
- package/dist-esm/src/credentials/onBehalfOfCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/onBehalfOfCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/usernamePasswordCredential.browser.js +1 -1
- package/dist-esm/src/credentials/usernamePasswordCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/usernamePasswordCredential.js +1 -1
- package/dist-esm/src/credentials/usernamePasswordCredential.js.map +1 -1
- package/dist-esm/src/credentials/usernamePasswordCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/usernamePasswordCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/visualStudioCodeCredential.browser.js +1 -1
- package/dist-esm/src/credentials/visualStudioCodeCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/visualStudioCodeCredential.js +1 -1
- package/dist-esm/src/credentials/visualStudioCodeCredential.js.map +1 -1
- package/dist-esm/src/credentials/visualStudioCodeCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/visualStudioCodeCredentialOptions.js.map +1 -1
- package/dist-esm/src/credentials/visualStudioCodeCredentialPlugin.js +1 -1
- package/dist-esm/src/credentials/visualStudioCodeCredentialPlugin.js.map +1 -1
- package/dist-esm/src/credentials/workloadIdentityCredential.browser.js +1 -1
- package/dist-esm/src/credentials/workloadIdentityCredential.browser.js.map +1 -1
- package/dist-esm/src/credentials/workloadIdentityCredential.js +1 -1
- package/dist-esm/src/credentials/workloadIdentityCredential.js.map +1 -1
- package/dist-esm/src/credentials/workloadIdentityCredentialOptions.js +1 -1
- package/dist-esm/src/credentials/workloadIdentityCredentialOptions.js.map +1 -1
- package/dist-esm/src/errors.js +1 -2
- package/dist-esm/src/errors.js.map +1 -1
- package/dist-esm/src/index.js +1 -1
- package/dist-esm/src/index.js.map +1 -1
- package/dist-esm/src/msal/browserFlows/flows.js +1 -1
- package/dist-esm/src/msal/browserFlows/flows.js.map +1 -1
- package/dist-esm/src/msal/browserFlows/msalAuthCode.js +2 -2
- package/dist-esm/src/msal/browserFlows/msalAuthCode.js.map +1 -1
- package/dist-esm/src/msal/browserFlows/msalBrowserCommon.js +4 -1
- package/dist-esm/src/msal/browserFlows/msalBrowserCommon.js.map +1 -1
- package/dist-esm/src/msal/credentials.js +1 -1
- package/dist-esm/src/msal/credentials.js.map +1 -1
- package/dist-esm/src/msal/msal.browser.js +1 -1
- package/dist-esm/src/msal/msal.browser.js.map +1 -1
- package/dist-esm/src/msal/msal.js +1 -1
- package/dist-esm/src/msal/msal.js.map +1 -1
- package/dist-esm/src/msal/nodeFlows/brokerOptions.js.map +1 -1
- package/dist-esm/src/msal/nodeFlows/msalClient.js +42 -8
- package/dist-esm/src/msal/nodeFlows/msalClient.js.map +1 -1
- package/dist-esm/src/msal/nodeFlows/msalPlugins.js +1 -1
- package/dist-esm/src/msal/nodeFlows/msalPlugins.js.map +1 -1
- package/dist-esm/src/msal/nodeFlows/tokenCachePersistenceOptions.js +1 -1
- package/dist-esm/src/msal/nodeFlows/tokenCachePersistenceOptions.js.map +1 -1
- package/dist-esm/src/msal/types.js +1 -1
- package/dist-esm/src/msal/types.js.map +1 -1
- package/dist-esm/src/msal/utils.js +17 -3
- package/dist-esm/src/msal/utils.js.map +1 -1
- package/dist-esm/src/plugins/consumer.browser.js +1 -1
- package/dist-esm/src/plugins/consumer.browser.js.map +1 -1
- package/dist-esm/src/plugins/consumer.js +7 -9
- package/dist-esm/src/plugins/consumer.js.map +1 -1
- package/dist-esm/src/plugins/provider.js +1 -1
- package/dist-esm/src/plugins/provider.js.map +1 -1
- package/dist-esm/src/regionalAuthority.js +1 -1
- package/dist-esm/src/regionalAuthority.js.map +1 -1
- package/dist-esm/src/tokenCredentialOptions.js +1 -1
- package/dist-esm/src/tokenCredentialOptions.js.map +1 -1
- package/dist-esm/src/tokenProvider.js +4 -4
- package/dist-esm/src/tokenProvider.js.map +1 -1
- package/dist-esm/src/util/authHostEnv.browser.js +1 -1
- package/dist-esm/src/util/authHostEnv.browser.js.map +1 -1
- package/dist-esm/src/util/identityTokenEndpoint.js +1 -1
- package/dist-esm/src/util/identityTokenEndpoint.js.map +1 -1
- package/dist-esm/src/util/logging.js +1 -1
- package/dist-esm/src/util/logging.js.map +1 -1
- package/dist-esm/src/util/processMultiTenantRequest.browser.js +1 -1
- package/dist-esm/src/util/processMultiTenantRequest.browser.js.map +1 -1
- package/dist-esm/src/util/processMultiTenantRequest.js +1 -1
- package/dist-esm/src/util/processMultiTenantRequest.js.map +1 -1
- package/dist-esm/src/util/processUtils.js +1 -1
- package/dist-esm/src/util/processUtils.js.map +1 -1
- package/dist-esm/src/util/scopeUtils.js +1 -1
- package/dist-esm/src/util/scopeUtils.js.map +1 -1
- package/dist-esm/src/util/tenantIdUtils.js +1 -1
- package/dist-esm/src/util/tenantIdUtils.js.map +1 -1
- package/dist-esm/src/util/tracing.js +1 -1
- package/dist-esm/src/util/tracing.js.map +1 -1
- package/package.json +20 -19
- package/types/identity.d.ts +74 -50
package/dist/index.js
CHANGED
|
@@ -40,11 +40,11 @@ var msalCommon__namespace = /*#__PURE__*/_interopNamespaceDefault(msalCommon);
|
|
|
40
40
|
var child_process__namespace = /*#__PURE__*/_interopNamespaceDefault(child_process);
|
|
41
41
|
|
|
42
42
|
// Copyright (c) Microsoft Corporation.
|
|
43
|
-
// Licensed under the MIT
|
|
43
|
+
// Licensed under the MIT License.
|
|
44
44
|
/**
|
|
45
45
|
* Current version of the `@azure/identity` package.
|
|
46
46
|
*/
|
|
47
|
-
const SDK_VERSION = `4.5.0
|
|
47
|
+
const SDK_VERSION = `4.5.0`;
|
|
48
48
|
/**
|
|
49
49
|
* The default client ID for authentication
|
|
50
50
|
* @internal
|
|
@@ -107,7 +107,7 @@ const CACHE_NON_CAE_SUFFIX = "nocae";
|
|
|
107
107
|
const DEFAULT_TOKEN_CACHE_NAME = "msal.cache";
|
|
108
108
|
|
|
109
109
|
// Copyright (c) Microsoft Corporation.
|
|
110
|
-
// Licensed under the MIT
|
|
110
|
+
// Licensed under the MIT License.
|
|
111
111
|
/**
|
|
112
112
|
* The current persistence provider, undefined by default.
|
|
113
113
|
* @internal
|
|
@@ -190,7 +190,7 @@ const msalPlugins = {
|
|
|
190
190
|
};
|
|
191
191
|
|
|
192
192
|
// Copyright (c) Microsoft Corporation.
|
|
193
|
-
// Licensed under the MIT
|
|
193
|
+
// Licensed under the MIT License.
|
|
194
194
|
/**
|
|
195
195
|
* The AzureLogger used for all clients within the identity package
|
|
196
196
|
*/
|
|
@@ -273,7 +273,7 @@ function credentialLogger(title, log = logger$l) {
|
|
|
273
273
|
}
|
|
274
274
|
|
|
275
275
|
// Copyright (c) Microsoft Corporation.
|
|
276
|
-
// Licensed under the MIT
|
|
276
|
+
// Licensed under the MIT License.
|
|
277
277
|
function isErrorResponse(errorResponse) {
|
|
278
278
|
return (errorResponse &&
|
|
279
279
|
typeof errorResponse.error === "string" &&
|
|
@@ -305,7 +305,6 @@ const AuthenticationErrorName = "AuthenticationError";
|
|
|
305
305
|
* the specific failure.
|
|
306
306
|
*/
|
|
307
307
|
class AuthenticationError extends Error {
|
|
308
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
309
308
|
constructor(statusCode, errorBody, options) {
|
|
310
309
|
let errorResponse = {
|
|
311
310
|
error: "unknown",
|
|
@@ -397,7 +396,7 @@ class AuthenticationRequiredError extends Error {
|
|
|
397
396
|
}
|
|
398
397
|
|
|
399
398
|
// Copyright (c) Microsoft Corporation.
|
|
400
|
-
// Licensed under the MIT
|
|
399
|
+
// Licensed under the MIT License.
|
|
401
400
|
function createConfigurationErrorMessage(tenantId) {
|
|
402
401
|
return `The current credential is not configured to acquire tokens for tenant ${tenantId}. To enable acquiring tokens for this tenant add it to the AdditionallyAllowedTenants on the credential options, or add "*" to AdditionallyAllowedTenants to allow acquiring tokens for any tenant.`;
|
|
403
402
|
}
|
|
@@ -431,7 +430,7 @@ function processMultiTenantRequest(tenantId, getTokenOptions, additionallyAllowe
|
|
|
431
430
|
}
|
|
432
431
|
|
|
433
432
|
// Copyright (c) Microsoft Corporation.
|
|
434
|
-
// Licensed under the MIT
|
|
433
|
+
// Licensed under the MIT License.
|
|
435
434
|
/**
|
|
436
435
|
* @internal
|
|
437
436
|
*/
|
|
@@ -472,7 +471,7 @@ function resolveAdditionallyAllowedTenantIds(additionallyAllowedTenants) {
|
|
|
472
471
|
}
|
|
473
472
|
|
|
474
473
|
// Copyright (c) Microsoft Corporation.
|
|
475
|
-
// Licensed under the MIT
|
|
474
|
+
// Licensed under the MIT License.
|
|
476
475
|
function getIdentityTokenEndpointSuffix(tenantId) {
|
|
477
476
|
if (tenantId === "adfs") {
|
|
478
477
|
return "oauth2/token";
|
|
@@ -483,7 +482,7 @@ function getIdentityTokenEndpointSuffix(tenantId) {
|
|
|
483
482
|
}
|
|
484
483
|
|
|
485
484
|
// Copyright (c) Microsoft Corporation.
|
|
486
|
-
// Licensed under the MIT
|
|
485
|
+
// Licensed under the MIT License.
|
|
487
486
|
/**
|
|
488
487
|
* Creates a span using the global tracer.
|
|
489
488
|
* @internal
|
|
@@ -495,14 +494,14 @@ const tracingClient = coreTracing.createTracingClient({
|
|
|
495
494
|
});
|
|
496
495
|
|
|
497
496
|
// Copyright (c) Microsoft Corporation.
|
|
498
|
-
// Licensed under the MIT
|
|
497
|
+
// Licensed under the MIT License.
|
|
499
498
|
const DefaultScopeSuffix = "/.default";
|
|
500
499
|
const imdsHost = "http://169.254.169.254";
|
|
501
500
|
const imdsEndpointPath = "/metadata/identity/oauth2/token";
|
|
502
501
|
const imdsApiVersion = "2018-02-01";
|
|
503
502
|
|
|
504
503
|
// Copyright (c) Microsoft Corporation.
|
|
505
|
-
// Licensed under the MIT
|
|
504
|
+
// Licensed under the MIT License.
|
|
506
505
|
/**
|
|
507
506
|
* Most MSIs send requests to the IMDS endpoint, or a similar endpoint.
|
|
508
507
|
* These are GET requests that require sending a `resource` parameter on the query.
|
|
@@ -551,9 +550,34 @@ function parseExpirationTimestamp(body) {
|
|
|
551
550
|
}
|
|
552
551
|
throw new Error(`Failed to parse token expiration from body. expires_in="${body.expires_in}", expires_on="${body.expires_on}"`);
|
|
553
552
|
}
|
|
553
|
+
/**
|
|
554
|
+
* Given a token response, return the expiration timestamp as the number of milliseconds from the Unix epoch.
|
|
555
|
+
* @param body - A parsed response body from the authentication endpoint.
|
|
556
|
+
*/
|
|
557
|
+
function parseRefreshTimestamp(body) {
|
|
558
|
+
if (body.refresh_on) {
|
|
559
|
+
if (typeof body.refresh_on === "number") {
|
|
560
|
+
return body.refresh_on * 1000;
|
|
561
|
+
}
|
|
562
|
+
if (typeof body.refresh_on === "string") {
|
|
563
|
+
const asNumber = +body.refresh_on;
|
|
564
|
+
if (!isNaN(asNumber)) {
|
|
565
|
+
return asNumber * 1000;
|
|
566
|
+
}
|
|
567
|
+
const asDate = Date.parse(body.refresh_on);
|
|
568
|
+
if (!isNaN(asDate)) {
|
|
569
|
+
return asDate;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
throw new Error(`Failed to parse refresh_on from body. refresh_on="${body.refresh_on}"`);
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
return undefined;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
554
578
|
|
|
555
579
|
// Copyright (c) Microsoft Corporation.
|
|
556
|
-
// Licensed under the MIT
|
|
580
|
+
// Licensed under the MIT License.
|
|
557
581
|
const noCorrelationId = "noCorrelationId";
|
|
558
582
|
/**
|
|
559
583
|
* @internal
|
|
@@ -615,6 +639,8 @@ class IdentityClient extends coreClient.ServiceClient {
|
|
|
615
639
|
accessToken: {
|
|
616
640
|
token: parsedBody.access_token,
|
|
617
641
|
expiresOnTimestamp: parseExpirationTimestamp(parsedBody),
|
|
642
|
+
refreshAfterTimestamp: parseRefreshTimestamp(parsedBody),
|
|
643
|
+
tokenType: "Bearer",
|
|
618
644
|
},
|
|
619
645
|
refreshToken: parsedBody.refresh_token,
|
|
620
646
|
};
|
|
@@ -790,7 +816,7 @@ class IdentityClient extends coreClient.ServiceClient {
|
|
|
790
816
|
}
|
|
791
817
|
|
|
792
818
|
// Copyright (c) Microsoft Corporation.
|
|
793
|
-
// Licensed under the MIT
|
|
819
|
+
// Licensed under the MIT License.
|
|
794
820
|
const CommonTenantId = "common";
|
|
795
821
|
const AzureAccountClientId = "aebc6443-996d-45c2-90f0-388ff96faa56"; // VSC: 'aebc6443-996d-45c2-90f0-388ff96faa56'
|
|
796
822
|
const logger$k = credentialLogger("VisualStudioCodeCredential");
|
|
@@ -971,7 +997,7 @@ class VisualStudioCodeCredential {
|
|
|
971
997
|
}
|
|
972
998
|
|
|
973
999
|
// Copyright (c) Microsoft Corporation.
|
|
974
|
-
// Licensed under the MIT
|
|
1000
|
+
// Licensed under the MIT License.
|
|
975
1001
|
/**
|
|
976
1002
|
* The context passed to an Identity plugin. This contains objects that
|
|
977
1003
|
* plugins can use to set backend implementations.
|
|
@@ -992,18 +1018,16 @@ const pluginContext = {
|
|
|
992
1018
|
*
|
|
993
1019
|
* Example:
|
|
994
1020
|
*
|
|
995
|
-
* ```
|
|
996
|
-
* import {
|
|
1021
|
+
* ```ts snippet:consumer_example
|
|
1022
|
+
* import { useIdentityPlugin, DeviceCodeCredential } from "@azure/identity";
|
|
997
1023
|
*
|
|
998
|
-
* import { useIdentityPlugin, DefaultAzureCredential } from "@azure/identity";
|
|
999
1024
|
* useIdentityPlugin(cachePersistencePlugin);
|
|
1000
|
-
*
|
|
1001
|
-
* // The plugin has the capability to extend `DefaultAzureCredential` and to
|
|
1025
|
+
* // The plugin has the capability to extend `DeviceCodeCredential` and to
|
|
1002
1026
|
* // add middleware to the underlying credentials, such as persistence.
|
|
1003
|
-
* const credential = new
|
|
1027
|
+
* const credential = new DeviceCodeCredential({
|
|
1004
1028
|
* tokenCachePersistenceOptions: {
|
|
1005
|
-
* enabled: true
|
|
1006
|
-
* }
|
|
1029
|
+
* enabled: true,
|
|
1030
|
+
* },
|
|
1007
1031
|
* });
|
|
1008
1032
|
* ```
|
|
1009
1033
|
*
|
|
@@ -1014,7 +1038,7 @@ function useIdentityPlugin(plugin) {
|
|
|
1014
1038
|
}
|
|
1015
1039
|
|
|
1016
1040
|
// Copyright (c) Microsoft Corporation.
|
|
1017
|
-
// Licensed under the MIT
|
|
1041
|
+
// Licensed under the MIT License.
|
|
1018
1042
|
/**
|
|
1019
1043
|
* @internal
|
|
1020
1044
|
*/
|
|
@@ -1047,6 +1071,19 @@ function ensureValidMsalToken(scopes, msalToken, getTokenOptions) {
|
|
|
1047
1071
|
throw error(`Response had no "accessToken" property.`);
|
|
1048
1072
|
}
|
|
1049
1073
|
}
|
|
1074
|
+
/**
|
|
1075
|
+
* Returns the authority host from either the options bag or the AZURE_AUTHORITY_HOST environment variable.
|
|
1076
|
+
*
|
|
1077
|
+
* Defaults to {@link DefaultAuthorityHost}.
|
|
1078
|
+
* @internal
|
|
1079
|
+
*/
|
|
1080
|
+
function getAuthorityHost(options) {
|
|
1081
|
+
let authorityHost = options === null || options === void 0 ? void 0 : options.authorityHost;
|
|
1082
|
+
if (!authorityHost && coreUtil.isNodeLike) {
|
|
1083
|
+
authorityHost = process.env.AZURE_AUTHORITY_HOST;
|
|
1084
|
+
}
|
|
1085
|
+
return authorityHost !== null && authorityHost !== void 0 ? authorityHost : DefaultAuthorityHost;
|
|
1086
|
+
}
|
|
1050
1087
|
/**
|
|
1051
1088
|
* Generates a valid authority by combining a host with a tenantId.
|
|
1052
1089
|
* @internal
|
|
@@ -1146,7 +1183,8 @@ function handleMsalError(scopes, error, getTokenOptions) {
|
|
|
1146
1183
|
}
|
|
1147
1184
|
if (error.name === "ClientConfigurationError" ||
|
|
1148
1185
|
error.name === "BrowserConfigurationAuthError" ||
|
|
1149
|
-
error.name === "AbortError"
|
|
1186
|
+
error.name === "AbortError" ||
|
|
1187
|
+
error.name === "AuthenticationError") {
|
|
1150
1188
|
return error;
|
|
1151
1189
|
}
|
|
1152
1190
|
if (error.name === "NativeAuthError") {
|
|
@@ -1216,7 +1254,7 @@ function deserializeAuthenticationRecord(serializedRecord) {
|
|
|
1216
1254
|
}
|
|
1217
1255
|
|
|
1218
1256
|
// Copyright (c) Microsoft Corporation.
|
|
1219
|
-
// Licensed under the MIT
|
|
1257
|
+
// Licensed under the MIT License.
|
|
1220
1258
|
const msiName$1 = "ManagedIdentityCredential - IMDS";
|
|
1221
1259
|
const logger$i = credentialLogger(msiName$1);
|
|
1222
1260
|
/**
|
|
@@ -1353,7 +1391,7 @@ const imdsMsi = {
|
|
|
1353
1391
|
};
|
|
1354
1392
|
|
|
1355
1393
|
// Copyright (c) Microsoft Corporation.
|
|
1356
|
-
// Licensed under the MIT
|
|
1394
|
+
// Licensed under the MIT License.
|
|
1357
1395
|
// Matches the default retry configuration in expontentialRetryStrategy.ts
|
|
1358
1396
|
const DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 64;
|
|
1359
1397
|
/**
|
|
@@ -1372,14 +1410,10 @@ function imdsRetryPolicy(msiRetryConfig) {
|
|
|
1372
1410
|
if ((response === null || response === void 0 ? void 0 : response.status) !== 404) {
|
|
1373
1411
|
return { skipStrategy: true };
|
|
1374
1412
|
}
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
// Allow the final value to have some "jitter" (within 50% of the delay size) so
|
|
1380
|
-
// that retries across multiple clients don't occur simultaneously.
|
|
1381
|
-
const retryAfterInMs = clampedExponentialDelay / 2 + coreUtil.getRandomIntegerInclusive(0, clampedExponentialDelay / 2);
|
|
1382
|
-
return { retryAfterInMs };
|
|
1413
|
+
return coreUtil.calculateRetryDelay(retryCount, {
|
|
1414
|
+
retryDelayInMs: msiRetryConfig.startDelayInMs,
|
|
1415
|
+
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL,
|
|
1416
|
+
});
|
|
1383
1417
|
},
|
|
1384
1418
|
},
|
|
1385
1419
|
], {
|
|
@@ -1388,7 +1422,7 @@ function imdsRetryPolicy(msiRetryConfig) {
|
|
|
1388
1422
|
}
|
|
1389
1423
|
|
|
1390
1424
|
// Copyright (c) Microsoft Corporation.
|
|
1391
|
-
// Licensed under the MIT
|
|
1425
|
+
// Licensed under the MIT License.
|
|
1392
1426
|
/**
|
|
1393
1427
|
* Helps specify a regional authority, or "AutoDiscoverRegion" to auto-detect the region.
|
|
1394
1428
|
*/
|
|
@@ -1528,7 +1562,7 @@ function calculateRegionalAuthority(regionalAuthority) {
|
|
|
1528
1562
|
}
|
|
1529
1563
|
|
|
1530
1564
|
// Copyright (c) Microsoft Corporation.
|
|
1531
|
-
// Licensed under the MIT
|
|
1565
|
+
// Licensed under the MIT License.
|
|
1532
1566
|
/**
|
|
1533
1567
|
* The default logger used if no logger was passed in by the credential.
|
|
1534
1568
|
*/
|
|
@@ -1549,10 +1583,10 @@ const interactiveBrowserMockable = {
|
|
|
1549
1583
|
* @returns The MSAL configuration object.
|
|
1550
1584
|
*/
|
|
1551
1585
|
function generateMsalConfiguration(clientId, tenantId, msalClientOptions = {}) {
|
|
1552
|
-
var _a, _b, _c
|
|
1586
|
+
var _a, _b, _c;
|
|
1553
1587
|
const resolvedTenant = resolveTenantId((_a = msalClientOptions.logger) !== null && _a !== void 0 ? _a : msalLogger, tenantId, clientId);
|
|
1554
1588
|
// TODO: move and reuse getIdentityClientAuthorityHost
|
|
1555
|
-
const authority = getAuthority(resolvedTenant, (
|
|
1589
|
+
const authority = getAuthority(resolvedTenant, getAuthorityHost(msalClientOptions));
|
|
1556
1590
|
const httpClient = new IdentityClient(Object.assign(Object.assign({}, msalClientOptions.tokenCredentialOptions), { authorityHost: authority, loggingOptions: msalClientOptions.loggingOptions }));
|
|
1557
1591
|
const msalConfig = {
|
|
1558
1592
|
auth: {
|
|
@@ -1563,9 +1597,9 @@ function generateMsalConfiguration(clientId, tenantId, msalClientOptions = {}) {
|
|
|
1563
1597
|
system: {
|
|
1564
1598
|
networkClient: httpClient,
|
|
1565
1599
|
loggerOptions: {
|
|
1566
|
-
loggerCallback: defaultLoggerCallback((
|
|
1600
|
+
loggerCallback: defaultLoggerCallback((_b = msalClientOptions.logger) !== null && _b !== void 0 ? _b : msalLogger),
|
|
1567
1601
|
logLevel: getMSALLogLevel(logger$m.getLogLevel()),
|
|
1568
|
-
piiLoggingEnabled: (
|
|
1602
|
+
piiLoggingEnabled: (_c = msalClientOptions.loggingOptions) === null || _c === void 0 ? void 0 : _c.enableUnsafeSupportLogging,
|
|
1569
1603
|
},
|
|
1570
1604
|
},
|
|
1571
1605
|
};
|
|
@@ -1661,6 +1695,12 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1661
1695
|
silentRequest.tokenQueryParameters["msal_request_type"] = "consumer_passthrough";
|
|
1662
1696
|
}
|
|
1663
1697
|
}
|
|
1698
|
+
if (options.proofOfPossessionOptions) {
|
|
1699
|
+
silentRequest.shrNonce = options.proofOfPossessionOptions.nonce;
|
|
1700
|
+
silentRequest.authenticationScheme = "pop";
|
|
1701
|
+
silentRequest.resourceRequestMethod = options.proofOfPossessionOptions.resourceRequestMethod;
|
|
1702
|
+
silentRequest.resourceRequestUri = options.proofOfPossessionOptions.resourceRequestUrl;
|
|
1703
|
+
}
|
|
1664
1704
|
state.logger.getToken.info("Attempting to acquire token silently");
|
|
1665
1705
|
return app.acquireTokenSilent(silentRequest);
|
|
1666
1706
|
}
|
|
@@ -1670,7 +1710,7 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1670
1710
|
*/
|
|
1671
1711
|
function calculateRequestAuthority(options) {
|
|
1672
1712
|
if (options === null || options === void 0 ? void 0 : options.tenantId) {
|
|
1673
|
-
return getAuthority(options.tenantId, createMsalClientOptions
|
|
1713
|
+
return getAuthority(options.tenantId, getAuthorityHost(createMsalClientOptions));
|
|
1674
1714
|
}
|
|
1675
1715
|
return state.msalConfig.auth.authority;
|
|
1676
1716
|
}
|
|
@@ -1685,7 +1725,7 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1685
1725
|
* @returns A promise that resolves to an AccessToken object containing the access token and its expiration timestamp.
|
|
1686
1726
|
*/
|
|
1687
1727
|
async function withSilentAuthentication(msalApp, scopes, options, onAuthenticationRequired) {
|
|
1688
|
-
var _a;
|
|
1728
|
+
var _a, _b;
|
|
1689
1729
|
let response = null;
|
|
1690
1730
|
try {
|
|
1691
1731
|
response = await getTokenSilent(msalApp, scopes, options);
|
|
@@ -1718,9 +1758,12 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1718
1758
|
return {
|
|
1719
1759
|
token: response.accessToken,
|
|
1720
1760
|
expiresOnTimestamp: response.expiresOn.getTime(),
|
|
1761
|
+
refreshAfterTimestamp: (_b = response.refreshOn) === null || _b === void 0 ? void 0 : _b.getTime(),
|
|
1762
|
+
tokenType: response.tokenType,
|
|
1721
1763
|
};
|
|
1722
1764
|
}
|
|
1723
1765
|
async function getTokenByClientSecret(scopes, clientSecret, options = {}) {
|
|
1766
|
+
var _a;
|
|
1724
1767
|
state.logger.getToken.info(`Attempting to acquire token using client secret`);
|
|
1725
1768
|
state.msalConfig.auth.clientSecret = clientSecret;
|
|
1726
1769
|
const msalApp = await getConfidentialApp(options);
|
|
@@ -1736,6 +1779,8 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1736
1779
|
return {
|
|
1737
1780
|
token: response.accessToken,
|
|
1738
1781
|
expiresOnTimestamp: response.expiresOn.getTime(),
|
|
1782
|
+
refreshAfterTimestamp: (_a = response.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(),
|
|
1783
|
+
tokenType: response.tokenType,
|
|
1739
1784
|
};
|
|
1740
1785
|
}
|
|
1741
1786
|
catch (err) {
|
|
@@ -1743,6 +1788,7 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1743
1788
|
}
|
|
1744
1789
|
}
|
|
1745
1790
|
async function getTokenByClientAssertion(scopes, clientAssertion, options = {}) {
|
|
1791
|
+
var _a;
|
|
1746
1792
|
state.logger.getToken.info(`Attempting to acquire token using client assertion`);
|
|
1747
1793
|
state.msalConfig.auth.clientAssertion = clientAssertion;
|
|
1748
1794
|
const msalApp = await getConfidentialApp(options);
|
|
@@ -1759,6 +1805,8 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1759
1805
|
return {
|
|
1760
1806
|
token: response.accessToken,
|
|
1761
1807
|
expiresOnTimestamp: response.expiresOn.getTime(),
|
|
1808
|
+
refreshAfterTimestamp: (_a = response.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(),
|
|
1809
|
+
tokenType: response.tokenType,
|
|
1762
1810
|
};
|
|
1763
1811
|
}
|
|
1764
1812
|
catch (err) {
|
|
@@ -1766,6 +1814,7 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1766
1814
|
}
|
|
1767
1815
|
}
|
|
1768
1816
|
async function getTokenByClientCertificate(scopes, certificate, options = {}) {
|
|
1817
|
+
var _a;
|
|
1769
1818
|
state.logger.getToken.info(`Attempting to acquire token using client certificate`);
|
|
1770
1819
|
state.msalConfig.auth.clientCertificate = certificate;
|
|
1771
1820
|
const msalApp = await getConfidentialApp(options);
|
|
@@ -1781,6 +1830,8 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1781
1830
|
return {
|
|
1782
1831
|
token: response.accessToken,
|
|
1783
1832
|
expiresOnTimestamp: response.expiresOn.getTime(),
|
|
1833
|
+
refreshAfterTimestamp: (_a = response.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(),
|
|
1834
|
+
tokenType: response.tokenType,
|
|
1784
1835
|
};
|
|
1785
1836
|
}
|
|
1786
1837
|
catch (err) {
|
|
@@ -1851,6 +1902,7 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1851
1902
|
});
|
|
1852
1903
|
}
|
|
1853
1904
|
async function getTokenOnBehalfOf(scopes, userAssertionToken, clientCredentials, options = {}) {
|
|
1905
|
+
var _a;
|
|
1854
1906
|
msalLogger.getToken.info(`Attempting to acquire token on behalf of another user`);
|
|
1855
1907
|
if (typeof clientCredentials === "string") {
|
|
1856
1908
|
// Client secret
|
|
@@ -1880,6 +1932,8 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1880
1932
|
return {
|
|
1881
1933
|
token: response.accessToken,
|
|
1882
1934
|
expiresOnTimestamp: response.expiresOn.getTime(),
|
|
1935
|
+
refreshAfterTimestamp: (_a = response.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(),
|
|
1936
|
+
tokenType: response.tokenType,
|
|
1883
1937
|
};
|
|
1884
1938
|
}
|
|
1885
1939
|
catch (err) {
|
|
@@ -1917,6 +1971,13 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1917
1971
|
else {
|
|
1918
1972
|
msalLogger.verbose("Attempting broker authentication without the default broker account");
|
|
1919
1973
|
}
|
|
1974
|
+
if (options.proofOfPossessionOptions) {
|
|
1975
|
+
interactiveRequest.shrNonce = options.proofOfPossessionOptions.nonce;
|
|
1976
|
+
interactiveRequest.authenticationScheme = "pop";
|
|
1977
|
+
interactiveRequest.resourceRequestMethod =
|
|
1978
|
+
options.proofOfPossessionOptions.resourceRequestMethod;
|
|
1979
|
+
interactiveRequest.resourceRequestUri = options.proofOfPossessionOptions.resourceRequestUrl;
|
|
1980
|
+
}
|
|
1920
1981
|
try {
|
|
1921
1982
|
return await app.acquireTokenInteractive(interactiveRequest);
|
|
1922
1983
|
}
|
|
@@ -1951,6 +2012,13 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1951
2012
|
if (state.pluginConfiguration.broker.isEnabled) {
|
|
1952
2013
|
return getBrokeredToken((_a = state.pluginConfiguration.broker.useDefaultBrokerAccount) !== null && _a !== void 0 ? _a : false);
|
|
1953
2014
|
}
|
|
2015
|
+
if (options.proofOfPossessionOptions) {
|
|
2016
|
+
interactiveRequest.shrNonce = options.proofOfPossessionOptions.nonce;
|
|
2017
|
+
interactiveRequest.authenticationScheme = "pop";
|
|
2018
|
+
interactiveRequest.resourceRequestMethod =
|
|
2019
|
+
options.proofOfPossessionOptions.resourceRequestMethod;
|
|
2020
|
+
interactiveRequest.resourceRequestUri = options.proofOfPossessionOptions.resourceRequestUrl;
|
|
2021
|
+
}
|
|
1954
2022
|
return app.acquireTokenInteractive(interactiveRequest);
|
|
1955
2023
|
});
|
|
1956
2024
|
}
|
|
@@ -1968,7 +2036,7 @@ To work with multiple accounts for the same Client ID and Tenant ID, please prov
|
|
|
1968
2036
|
}
|
|
1969
2037
|
|
|
1970
2038
|
// Copyright (c) Microsoft Corporation.
|
|
1971
|
-
// Licensed under the MIT
|
|
2039
|
+
// Licensed under the MIT License.
|
|
1972
2040
|
const logger$h = credentialLogger("ClientAssertionCredential");
|
|
1973
2041
|
/**
|
|
1974
2042
|
* Authenticates a service principal with a JWT assertion.
|
|
@@ -2018,7 +2086,7 @@ class ClientAssertionCredential {
|
|
|
2018
2086
|
}
|
|
2019
2087
|
|
|
2020
2088
|
// Copyright (c) Microsoft Corporation.
|
|
2021
|
-
// Licensed under the MIT
|
|
2089
|
+
// Licensed under the MIT License.
|
|
2022
2090
|
const credentialName$4 = "WorkloadIdentityCredential";
|
|
2023
2091
|
/**
|
|
2024
2092
|
* Contains the list of all supported environment variable names so that an
|
|
@@ -2127,7 +2195,7 @@ class WorkloadIdentityCredential {
|
|
|
2127
2195
|
}
|
|
2128
2196
|
|
|
2129
2197
|
// Copyright (c) Microsoft Corporation.
|
|
2130
|
-
// Licensed under the MIT
|
|
2198
|
+
// Licensed under the MIT License.
|
|
2131
2199
|
const msiName = "ManagedIdentityCredential - Token Exchange";
|
|
2132
2200
|
const logger$f = credentialLogger(msiName);
|
|
2133
2201
|
/**
|
|
@@ -2154,7 +2222,7 @@ const tokenExchangeMsi = {
|
|
|
2154
2222
|
};
|
|
2155
2223
|
|
|
2156
2224
|
// Copyright (c) Microsoft Corporation.
|
|
2157
|
-
// Licensed under the MIT
|
|
2225
|
+
// Licensed under the MIT License.
|
|
2158
2226
|
const logger$e = credentialLogger("ManagedIdentityCredential(MSAL)");
|
|
2159
2227
|
class MsalMsiProvider {
|
|
2160
2228
|
constructor(clientIdOrOptions, options = {}) {
|
|
@@ -2174,9 +2242,11 @@ class MsalMsiProvider {
|
|
|
2174
2242
|
_options = clientIdOrOptions !== null && clientIdOrOptions !== void 0 ? clientIdOrOptions : {};
|
|
2175
2243
|
}
|
|
2176
2244
|
this.resourceId = _options === null || _options === void 0 ? void 0 : _options.resourceId;
|
|
2245
|
+
this.objectId = _options === null || _options === void 0 ? void 0 : _options.objectId;
|
|
2177
2246
|
// For JavaScript users.
|
|
2178
|
-
|
|
2179
|
-
|
|
2247
|
+
const providedIds = [this.clientId, this.resourceId, this.objectId].filter(Boolean);
|
|
2248
|
+
if (providedIds.length > 1) {
|
|
2249
|
+
throw new Error(`ManagedIdentityCredential: only one of 'clientId', 'resourceId', or 'objectId' can be provided. Received values: ${JSON.stringify({ clientId: this.clientId, resourceId: this.resourceId, objectId: this.objectId })}`);
|
|
2180
2250
|
}
|
|
2181
2251
|
// ManagedIdentity uses http for local requests
|
|
2182
2252
|
_options.allowInsecureConnection = true;
|
|
@@ -2188,6 +2258,7 @@ class MsalMsiProvider {
|
|
|
2188
2258
|
managedIdentityIdParams: {
|
|
2189
2259
|
userAssignedClientId: this.clientId,
|
|
2190
2260
|
userAssignedResourceId: this.resourceId,
|
|
2261
|
+
userAssignedObjectId: this.objectId,
|
|
2191
2262
|
},
|
|
2192
2263
|
system: {
|
|
2193
2264
|
// todo: proxyUrl?
|
|
@@ -2203,6 +2274,17 @@ class MsalMsiProvider {
|
|
|
2203
2274
|
this.isAvailableIdentityClient = new IdentityClient(Object.assign(Object.assign({}, _options), { retryOptions: {
|
|
2204
2275
|
maxRetries: 0,
|
|
2205
2276
|
} }));
|
|
2277
|
+
// CloudShell MSI will ignore any user-assigned identity passed as parameters. To avoid confusion, we prevent this from happening as early as possible.
|
|
2278
|
+
if (this.managedIdentityApp.getManagedIdentitySource() === "CloudShell") {
|
|
2279
|
+
if (this.clientId || this.resourceId || this.objectId) {
|
|
2280
|
+
logger$e.warning(`CloudShell MSI detected with user-provided IDs - throwing. Received values: ${JSON.stringify({
|
|
2281
|
+
clientId: this.clientId,
|
|
2282
|
+
resourceId: this.resourceId,
|
|
2283
|
+
objectId: this.objectId,
|
|
2284
|
+
})}.`);
|
|
2285
|
+
throw new CredentialUnavailableError("ManagedIdentityCredential: Specifying a user-assigned managed identity is not supported for CloudShell at runtime. When using Managed Identity in CloudShell, omit the clientId, resourceId, and objectId parameters.");
|
|
2286
|
+
}
|
|
2287
|
+
}
|
|
2206
2288
|
}
|
|
2207
2289
|
/**
|
|
2208
2290
|
* Authenticates with Microsoft Entra ID and returns an access token if successful.
|
|
@@ -2220,6 +2302,7 @@ class MsalMsiProvider {
|
|
|
2220
2302
|
throw new CredentialUnavailableError(`ManagedIdentityCredential: Multiple scopes are not supported. Scopes: ${JSON.stringify(scopes)}`);
|
|
2221
2303
|
}
|
|
2222
2304
|
return tracingClient.withSpan("ManagedIdentityCredential.getToken", options, async () => {
|
|
2305
|
+
var _a;
|
|
2223
2306
|
try {
|
|
2224
2307
|
const isTokenExchangeMsi = await tokenExchangeMsi.isAvailable({
|
|
2225
2308
|
scopes,
|
|
@@ -2263,7 +2346,7 @@ class MsalMsiProvider {
|
|
|
2263
2346
|
resourceId: this.resourceId,
|
|
2264
2347
|
});
|
|
2265
2348
|
if (!isAvailable) {
|
|
2266
|
-
throw new CredentialUnavailableError(`
|
|
2349
|
+
throw new CredentialUnavailableError(`Attempted to use the IMDS endpoint, but it is not available.`);
|
|
2267
2350
|
}
|
|
2268
2351
|
}
|
|
2269
2352
|
// If we got this far, it means:
|
|
@@ -2279,6 +2362,8 @@ class MsalMsiProvider {
|
|
|
2279
2362
|
return {
|
|
2280
2363
|
expiresOnTimestamp: token.expiresOn.getTime(),
|
|
2281
2364
|
token: token.accessToken,
|
|
2365
|
+
refreshAfterTimestamp: (_a = token.refreshOn) === null || _a === void 0 ? void 0 : _a.getTime(),
|
|
2366
|
+
tokenType: "Bearer",
|
|
2282
2367
|
};
|
|
2283
2368
|
}
|
|
2284
2369
|
catch (err) {
|
|
@@ -2338,7 +2423,7 @@ function isNetworkError(err) {
|
|
|
2338
2423
|
}
|
|
2339
2424
|
|
|
2340
2425
|
// Copyright (c) Microsoft Corporation.
|
|
2341
|
-
// Licensed under the MIT
|
|
2426
|
+
// Licensed under the MIT License.
|
|
2342
2427
|
/**
|
|
2343
2428
|
* Attempts authentication using a managed identity available at the deployment environment.
|
|
2344
2429
|
* This authentication type works in Azure VMs, App Service instances, Azure Functions applications,
|
|
@@ -2374,7 +2459,7 @@ class ManagedIdentityCredential {
|
|
|
2374
2459
|
}
|
|
2375
2460
|
|
|
2376
2461
|
// Copyright (c) Microsoft Corporation.
|
|
2377
|
-
// Licensed under the MIT
|
|
2462
|
+
// Licensed under the MIT License.
|
|
2378
2463
|
/**
|
|
2379
2464
|
* Ensures the scopes value is an array.
|
|
2380
2465
|
* @internal
|
|
@@ -2402,7 +2487,7 @@ function getScopeResource(scope) {
|
|
|
2402
2487
|
}
|
|
2403
2488
|
|
|
2404
2489
|
// Copyright (c) Microsoft Corporation.
|
|
2405
|
-
// Licensed under the MIT
|
|
2490
|
+
// Licensed under the MIT License.
|
|
2406
2491
|
/**
|
|
2407
2492
|
* Mockable reference to the CLI credential cliCredentialFunctions
|
|
2408
2493
|
* @internal
|
|
@@ -2553,6 +2638,7 @@ class AzureCliCredential {
|
|
|
2553
2638
|
return {
|
|
2554
2639
|
token,
|
|
2555
2640
|
expiresOnTimestamp,
|
|
2641
|
+
tokenType: "Bearer",
|
|
2556
2642
|
};
|
|
2557
2643
|
}
|
|
2558
2644
|
// fallback to the older expiresOn - an RFC3339 date string
|
|
@@ -2564,12 +2650,13 @@ class AzureCliCredential {
|
|
|
2564
2650
|
return {
|
|
2565
2651
|
token,
|
|
2566
2652
|
expiresOnTimestamp,
|
|
2653
|
+
tokenType: "Bearer",
|
|
2567
2654
|
};
|
|
2568
2655
|
}
|
|
2569
2656
|
}
|
|
2570
2657
|
|
|
2571
2658
|
// Copyright (c) Microsoft Corporation.
|
|
2572
|
-
// Licensed under the MIT
|
|
2659
|
+
// Licensed under the MIT License.
|
|
2573
2660
|
/**
|
|
2574
2661
|
* Mockable reference to the Developer CLI credential cliCredentialFunctions
|
|
2575
2662
|
* @internal
|
|
@@ -2712,6 +2799,7 @@ class AzureDeveloperCliCredential {
|
|
|
2712
2799
|
return {
|
|
2713
2800
|
token: resp.token,
|
|
2714
2801
|
expiresOnTimestamp: new Date(resp.expiresOn).getTime(),
|
|
2802
|
+
tokenType: "Bearer",
|
|
2715
2803
|
};
|
|
2716
2804
|
}
|
|
2717
2805
|
catch (e) {
|
|
@@ -2733,7 +2821,7 @@ class AzureDeveloperCliCredential {
|
|
|
2733
2821
|
}
|
|
2734
2822
|
|
|
2735
2823
|
// Copyright (c) Microsoft Corporation.
|
|
2736
|
-
// Licensed under the MIT
|
|
2824
|
+
// Licensed under the MIT License.
|
|
2737
2825
|
/**
|
|
2738
2826
|
* Easy to mock childProcess utils.
|
|
2739
2827
|
* @internal
|
|
@@ -2764,7 +2852,7 @@ const processUtils = {
|
|
|
2764
2852
|
};
|
|
2765
2853
|
|
|
2766
2854
|
// Copyright (c) Microsoft Corporation.
|
|
2767
|
-
// Licensed under the MIT
|
|
2855
|
+
// Licensed under the MIT License.
|
|
2768
2856
|
const logger$b = credentialLogger("AzurePowerShellCredential");
|
|
2769
2857
|
const isWindows = process.platform === "win32";
|
|
2770
2858
|
/**
|
|
@@ -2932,6 +3020,7 @@ class AzurePowerShellCredential {
|
|
|
2932
3020
|
return {
|
|
2933
3021
|
token: response.Token,
|
|
2934
3022
|
expiresOnTimestamp: new Date(response.ExpiresOn).getTime(),
|
|
3023
|
+
tokenType: "Bearer",
|
|
2935
3024
|
};
|
|
2936
3025
|
}
|
|
2937
3026
|
catch (err) {
|
|
@@ -2986,7 +3075,7 @@ async function parseJsonToken(result) {
|
|
|
2986
3075
|
}
|
|
2987
3076
|
|
|
2988
3077
|
// Copyright (c) Microsoft Corporation.
|
|
2989
|
-
// Licensed under the MIT
|
|
3078
|
+
// Licensed under the MIT License.
|
|
2990
3079
|
/**
|
|
2991
3080
|
* @internal
|
|
2992
3081
|
*/
|
|
@@ -3002,7 +3091,14 @@ class ChainedTokenCredential {
|
|
|
3002
3091
|
* @param sources - `TokenCredential` implementations to be tried in order.
|
|
3003
3092
|
*
|
|
3004
3093
|
* Example usage:
|
|
3005
|
-
* ```
|
|
3094
|
+
* ```ts snippet:chained_token_credential_example
|
|
3095
|
+
* import { ClientSecretCredential, ChainedTokenCredential } from "@azure/identity";
|
|
3096
|
+
*
|
|
3097
|
+
* const tenantId = "<tenant-id>";
|
|
3098
|
+
* const clientId = "<client-id>";
|
|
3099
|
+
* const clientSecret = "<client-secret>";
|
|
3100
|
+
* const anotherClientId = "<another-client-id>";
|
|
3101
|
+
* const anotherSecret = "<another-client-secret>";
|
|
3006
3102
|
* const firstCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
|
|
3007
3103
|
* const secondCredential = new ClientSecretCredential(tenantId, anotherClientId, anotherSecret);
|
|
3008
3104
|
* const credentialChain = new ChainedTokenCredential(firstCredential, secondCredential);
|
|
@@ -3065,7 +3161,7 @@ class ChainedTokenCredential {
|
|
|
3065
3161
|
}
|
|
3066
3162
|
|
|
3067
3163
|
// Copyright (c) Microsoft Corporation.
|
|
3068
|
-
// Licensed under the MIT
|
|
3164
|
+
// Licensed under the MIT License.
|
|
3069
3165
|
const credentialName$3 = "ClientCertificateCredential";
|
|
3070
3166
|
const logger$9 = credentialLogger(credentialName$3);
|
|
3071
3167
|
/**
|
|
@@ -3178,7 +3274,7 @@ async function parseCertificate(certificateConfiguration, sendCertificateChain)
|
|
|
3178
3274
|
}
|
|
3179
3275
|
|
|
3180
3276
|
// Copyright (c) Microsoft Corporation.
|
|
3181
|
-
// Licensed under the MIT
|
|
3277
|
+
// Licensed under the MIT License.
|
|
3182
3278
|
const logger$8 = credentialLogger("ClientSecretCredential");
|
|
3183
3279
|
/**
|
|
3184
3280
|
* Enables authentication to Microsoft Entra ID using a client secret
|
|
@@ -3232,7 +3328,7 @@ class ClientSecretCredential {
|
|
|
3232
3328
|
}
|
|
3233
3329
|
|
|
3234
3330
|
// Copyright (c) Microsoft Corporation.
|
|
3235
|
-
// Licensed under the MIT
|
|
3331
|
+
// Licensed under the MIT License.
|
|
3236
3332
|
const logger$7 = credentialLogger("UsernamePasswordCredential");
|
|
3237
3333
|
/**
|
|
3238
3334
|
* Enables authentication to Microsoft Entra ID with a user's
|
|
@@ -3293,7 +3389,7 @@ class UsernamePasswordCredential {
|
|
|
3293
3389
|
}
|
|
3294
3390
|
|
|
3295
3391
|
// Copyright (c) Microsoft Corporation.
|
|
3296
|
-
// Licensed under the MIT
|
|
3392
|
+
// Licensed under the MIT License.
|
|
3297
3393
|
/**
|
|
3298
3394
|
* Contains the list of all supported environment variable names so that an
|
|
3299
3395
|
* appropriate error message can be generated when no credentials can be
|
|
@@ -3416,7 +3512,7 @@ class EnvironmentCredential {
|
|
|
3416
3512
|
}
|
|
3417
3513
|
|
|
3418
3514
|
// Copyright (c) Microsoft Corporation.
|
|
3419
|
-
// Licensed under the MIT
|
|
3515
|
+
// Licensed under the MIT License.
|
|
3420
3516
|
const logger$5 = credentialLogger("DefaultAzureCredential");
|
|
3421
3517
|
/**
|
|
3422
3518
|
* Creates a {@link ManagedIdentityCredential} from the provided options.
|
|
@@ -3559,7 +3655,7 @@ class DefaultAzureCredential extends ChainedTokenCredential {
|
|
|
3559
3655
|
}
|
|
3560
3656
|
|
|
3561
3657
|
// Copyright (c) Microsoft Corporation.
|
|
3562
|
-
// Licensed under the MIT
|
|
3658
|
+
// Licensed under the MIT License.
|
|
3563
3659
|
const logger$4 = credentialLogger("InteractiveBrowserCredential");
|
|
3564
3660
|
/**
|
|
3565
3661
|
* Enables authentication to Microsoft Entra ID inside of the web browser
|
|
@@ -3644,7 +3740,7 @@ class InteractiveBrowserCredential {
|
|
|
3644
3740
|
}
|
|
3645
3741
|
|
|
3646
3742
|
// Copyright (c) Microsoft Corporation.
|
|
3647
|
-
// Licensed under the MIT
|
|
3743
|
+
// Licensed under the MIT License.
|
|
3648
3744
|
const logger$3 = credentialLogger("DeviceCodeCredential");
|
|
3649
3745
|
/**
|
|
3650
3746
|
* Method that logs the user code from the DeviceCodeCredential.
|
|
@@ -3666,13 +3762,15 @@ class DeviceCodeCredential {
|
|
|
3666
3762
|
*
|
|
3667
3763
|
* Developers can configure how this message is shown by passing a custom `userPromptCallback`:
|
|
3668
3764
|
*
|
|
3669
|
-
* ```
|
|
3765
|
+
* ```ts snippet:device_code_credential_example
|
|
3766
|
+
* import { DeviceCodeCredential } from "@azure/identity";
|
|
3767
|
+
*
|
|
3670
3768
|
* const credential = new DeviceCodeCredential({
|
|
3671
|
-
* tenantId: env.AZURE_TENANT_ID,
|
|
3672
|
-
* clientId: env.AZURE_CLIENT_ID,
|
|
3769
|
+
* tenantId: process.env.AZURE_TENANT_ID,
|
|
3770
|
+
* clientId: process.env.AZURE_CLIENT_ID,
|
|
3673
3771
|
* userPromptCallback: (info) => {
|
|
3674
3772
|
* console.log("CUSTOMIZED PROMPT CALLBACK", info.message);
|
|
3675
|
-
* }
|
|
3773
|
+
* },
|
|
3676
3774
|
* });
|
|
3677
3775
|
* ```
|
|
3678
3776
|
*
|
|
@@ -3727,7 +3825,7 @@ class DeviceCodeCredential {
|
|
|
3727
3825
|
}
|
|
3728
3826
|
|
|
3729
3827
|
// Copyright (c) Microsoft Corporation.
|
|
3730
|
-
// Licensed under the MIT
|
|
3828
|
+
// Licensed under the MIT License.
|
|
3731
3829
|
const credentialName$1 = "AzurePipelinesCredential";
|
|
3732
3830
|
const logger$2 = credentialLogger(credentialName$1);
|
|
3733
3831
|
const OIDC_API_VERSION = "7.1";
|
|
@@ -3744,7 +3842,8 @@ class AzurePipelinesCredential {
|
|
|
3744
3842
|
* @param systemAccessToken - The pipeline's <see href="https://learn.microsoft.com/azure/devops/pipelines/build/variables?view=azure-devops%26tabs=yaml#systemaccesstoken">System.AccessToken</see> value.
|
|
3745
3843
|
* @param options - The identity client options to use for authentication.
|
|
3746
3844
|
*/
|
|
3747
|
-
constructor(tenantId, clientId, serviceConnectionId, systemAccessToken, options) {
|
|
3845
|
+
constructor(tenantId, clientId, serviceConnectionId, systemAccessToken, options = {}) {
|
|
3846
|
+
var _a, _b;
|
|
3748
3847
|
if (!clientId) {
|
|
3749
3848
|
throw new CredentialUnavailableError(`${credentialName$1}: is unavailable. clientId is a required parameter.`);
|
|
3750
3849
|
}
|
|
@@ -3757,6 +3856,12 @@ class AzurePipelinesCredential {
|
|
|
3757
3856
|
if (!systemAccessToken) {
|
|
3758
3857
|
throw new CredentialUnavailableError(`${credentialName$1}: is unavailable. systemAccessToken is a required parameter.`);
|
|
3759
3858
|
}
|
|
3859
|
+
// Allow these headers to be logged for troubleshooting by AzurePipelines.
|
|
3860
|
+
options.loggingOptions = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.loggingOptions), { additionalAllowedHeaderNames: [
|
|
3861
|
+
...((_b = (_a = options.loggingOptions) === null || _a === void 0 ? void 0 : _a.additionalAllowedHeaderNames) !== null && _b !== void 0 ? _b : []),
|
|
3862
|
+
"x-vss-e2eid",
|
|
3863
|
+
"x-msedge-ref",
|
|
3864
|
+
] });
|
|
3760
3865
|
this.identityClient = new IdentityClient(options);
|
|
3761
3866
|
checkTenantId(logger$2, tenantId);
|
|
3762
3867
|
logger$2.info(`Invoking AzurePipelinesCredential with tenant ID: ${tenantId}, client ID: ${clientId}, and service connection ID: ${serviceConnectionId}`);
|
|
@@ -3805,6 +3910,8 @@ class AzurePipelinesCredential {
|
|
|
3805
3910
|
headers: coreRestPipeline.createHttpHeaders({
|
|
3806
3911
|
"Content-Type": "application/json",
|
|
3807
3912
|
Authorization: `Bearer ${systemAccessToken}`,
|
|
3913
|
+
// Prevents the service from responding with a redirect HTTP status code (useful for automation).
|
|
3914
|
+
"X-TFS-FedAuthRedirect": "Suppress",
|
|
3808
3915
|
}),
|
|
3809
3916
|
});
|
|
3810
3917
|
const response = await this.identityClient.sendRequest(request);
|
|
@@ -3812,6 +3919,7 @@ class AzurePipelinesCredential {
|
|
|
3812
3919
|
}
|
|
3813
3920
|
}
|
|
3814
3921
|
function handleOidcResponse(response) {
|
|
3922
|
+
// OIDC token is present in `bodyAsText` field
|
|
3815
3923
|
const text = response.bodyAsText;
|
|
3816
3924
|
if (!text) {
|
|
3817
3925
|
logger$2.error(`${credentialName$1}: Authentication Failed. Received null token from OIDC request. Response status- ${response.status}. Complete response - ${JSON.stringify(response)}`);
|
|
@@ -3829,7 +3937,7 @@ function handleOidcResponse(response) {
|
|
|
3829
3937
|
const errorMessage = `${credentialName$1}: Authentication Failed. oidcToken field not detected in the response.`;
|
|
3830
3938
|
let errorDescription = ``;
|
|
3831
3939
|
if (response.status !== 200) {
|
|
3832
|
-
errorDescription = `
|
|
3940
|
+
errorDescription = `Response body = ${text}. Response Headers ["x-vss-e2eid"] = ${response.headers.get("x-vss-e2eid")} and ["x-msedge-ref"] = ${response.headers.get("x-msedge-ref")}. See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/azurepipelinescredential/troubleshoot`;
|
|
3833
3941
|
}
|
|
3834
3942
|
logger$2.error(errorMessage);
|
|
3835
3943
|
logger$2.error(errorDescription);
|
|
@@ -3841,17 +3949,18 @@ function handleOidcResponse(response) {
|
|
|
3841
3949
|
}
|
|
3842
3950
|
catch (e) {
|
|
3843
3951
|
const errorDetails = `${credentialName$1}: Authentication Failed. oidcToken field not detected in the response.`;
|
|
3844
|
-
logger$2.error(`Response from service = ${text}
|
|
3952
|
+
logger$2.error(`Response from service = ${text}, Response Headers ["x-vss-e2eid"] = ${response.headers.get("x-vss-e2eid")}
|
|
3953
|
+
and ["x-msedge-ref"] = ${response.headers.get("x-msedge-ref")}, error message = ${e.message}`);
|
|
3845
3954
|
logger$2.error(errorDetails);
|
|
3846
3955
|
throw new AuthenticationError(response.status, {
|
|
3847
3956
|
error: errorDetails,
|
|
3848
|
-
error_description: `Response = ${text}. See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/azurepipelinescredential/troubleshoot`,
|
|
3957
|
+
error_description: `Response = ${text}. Response headers ["x-vss-e2eid"] = ${response.headers.get("x-vss-e2eid")} and ["x-msedge-ref"] = ${response.headers.get("x-msedge-ref")}. See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/azurepipelinescredential/troubleshoot`,
|
|
3849
3958
|
});
|
|
3850
3959
|
}
|
|
3851
3960
|
}
|
|
3852
3961
|
|
|
3853
3962
|
// Copyright (c) Microsoft Corporation.
|
|
3854
|
-
// Licensed under the MIT
|
|
3963
|
+
// Licensed under the MIT License.
|
|
3855
3964
|
const logger$1 = credentialLogger("AuthorizationCodeCredential");
|
|
3856
3965
|
/**
|
|
3857
3966
|
* Enables authentication to Microsoft Entra ID using an authorization code
|
|
@@ -3905,7 +4014,7 @@ class AuthorizationCodeCredential {
|
|
|
3905
4014
|
}
|
|
3906
4015
|
|
|
3907
4016
|
// Copyright (c) Microsoft Corporation.
|
|
3908
|
-
// Licensed under the MIT
|
|
4017
|
+
// Licensed under the MIT License.
|
|
3909
4018
|
const credentialName = "OnBehalfOfCredential";
|
|
3910
4019
|
const logger = credentialLogger(credentialName);
|
|
3911
4020
|
/**
|
|
@@ -4009,18 +4118,18 @@ class OnBehalfOfCredential {
|
|
|
4009
4118
|
}
|
|
4010
4119
|
|
|
4011
4120
|
// Copyright (c) Microsoft Corporation.
|
|
4012
|
-
// Licensed under the MIT
|
|
4121
|
+
// Licensed under the MIT License.
|
|
4013
4122
|
/**
|
|
4014
4123
|
* Returns a callback that provides a bearer token.
|
|
4015
4124
|
* For example, the bearer token can be used to authenticate a request as follows:
|
|
4016
|
-
* ```
|
|
4017
|
-
* import { DefaultAzureCredential } from "@azure/identity";
|
|
4125
|
+
* ```ts snippet:token_provider_example
|
|
4126
|
+
* import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
|
|
4127
|
+
* import { createPipelineRequest } from "@azure/core-rest-pipeline";
|
|
4018
4128
|
*
|
|
4019
4129
|
* const credential = new DefaultAzureCredential();
|
|
4020
4130
|
* const scope = "https://cognitiveservices.azure.com/.default";
|
|
4021
4131
|
* const getAccessToken = getBearerTokenProvider(credential, scope);
|
|
4022
4132
|
* const token = await getAccessToken();
|
|
4023
|
-
*
|
|
4024
4133
|
* // usage
|
|
4025
4134
|
* const request = createPipelineRequest({ url: "https://example.com" });
|
|
4026
4135
|
* request.headers.set("Authorization", `Bearer ${token}`);
|
|
@@ -4060,7 +4169,7 @@ function getBearerTokenProvider(credential, scopes, options) {
|
|
|
4060
4169
|
}
|
|
4061
4170
|
|
|
4062
4171
|
// Copyright (c) Microsoft Corporation.
|
|
4063
|
-
// Licensed under the MIT
|
|
4172
|
+
// Licensed under the MIT License.
|
|
4064
4173
|
/**
|
|
4065
4174
|
* Returns a new instance of the {@link DefaultAzureCredential}.
|
|
4066
4175
|
*/
|