@azure/identity 4.5.0-beta.2 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
*/
|