@azure/msal-browser 3.20.0 → 3.22.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/dist/app/IPublicClientApplication.d.ts +53 -53
- package/dist/app/IPublicClientApplication.mjs +105 -105
- package/dist/app/PublicClientApplication.d.ts +293 -293
- package/dist/app/PublicClientApplication.mjs +364 -364
- package/dist/app/PublicClientNext.d.ts +276 -276
- package/dist/app/PublicClientNext.mjs +354 -354
- package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +62 -62
- package/dist/broker/nativeBroker/NativeMessageHandler.mjs +254 -254
- package/dist/broker/nativeBroker/NativeRequest.d.ts +45 -45
- package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
- package/dist/broker/nativeBroker/NativeStatusCodes.d.ts +7 -7
- package/dist/broker/nativeBroker/NativeStatusCodes.mjs +11 -11
- package/dist/cache/AccountManager.d.ts +48 -48
- package/dist/cache/AccountManager.mjs +126 -126
- package/dist/cache/AsyncMemoryStorage.d.ts +50 -50
- package/dist/cache/AsyncMemoryStorage.mjs +131 -131
- package/dist/cache/BrowserCacheManager.d.ts +385 -385
- package/dist/cache/BrowserCacheManager.mjs +1294 -1294
- package/dist/cache/BrowserStorage.d.ts +11 -11
- package/dist/cache/BrowserStorage.mjs +32 -32
- package/dist/cache/DatabaseStorage.d.ts +56 -56
- package/dist/cache/DatabaseStorage.mjs +200 -200
- package/dist/cache/IAsyncStorage.d.ts +27 -27
- package/dist/cache/ITokenCache.d.ts +11 -11
- package/dist/cache/IWindowStorage.d.ts +27 -27
- package/dist/cache/MemoryStorage.d.ts +11 -11
- package/dist/cache/MemoryStorage.mjs +31 -31
- package/dist/cache/TokenCache.d.ts +77 -77
- package/dist/cache/TokenCache.mjs +195 -195
- package/dist/config/Configuration.d.ts +213 -208
- package/dist/config/Configuration.d.ts.map +1 -1
- package/dist/config/Configuration.mjs +128 -128
- package/dist/config/Configuration.mjs.map +1 -1
- package/dist/controllers/ControllerFactory.d.ts +5 -5
- package/dist/controllers/ControllerFactory.mjs +25 -25
- package/dist/controllers/IController.d.ts +60 -60
- package/dist/controllers/NestedAppAuthController.d.ts +202 -202
- package/dist/controllers/NestedAppAuthController.mjs +473 -473
- package/dist/controllers/StandardController.d.ts +405 -405
- package/dist/controllers/StandardController.d.ts.map +1 -1
- package/dist/controllers/StandardController.mjs +1334 -1316
- package/dist/controllers/StandardController.mjs.map +1 -1
- package/dist/controllers/UnknownOperatingContextController.d.ts +86 -86
- package/dist/controllers/UnknownOperatingContextController.mjs +256 -256
- package/dist/crypto/BrowserCrypto.d.ts +52 -52
- package/dist/crypto/BrowserCrypto.mjs +151 -151
- package/dist/crypto/CryptoOps.d.ts +74 -74
- package/dist/crypto/CryptoOps.mjs +176 -176
- package/dist/crypto/PkceGenerator.d.ts +8 -8
- package/dist/crypto/PkceGenerator.mjs +54 -54
- package/dist/crypto/SignedHttpRequest.d.ts +30 -30
- package/dist/crypto/SignedHttpRequest.mjs +39 -39
- package/dist/encode/Base64Decode.d.ts +9 -9
- package/dist/encode/Base64Decode.mjs +36 -36
- package/dist/encode/Base64Encode.d.ts +19 -19
- package/dist/encode/Base64Encode.mjs +43 -43
- package/dist/error/BrowserAuthError.d.ts +255 -255
- package/dist/error/BrowserAuthError.mjs +263 -263
- package/dist/error/BrowserAuthErrorCodes.d.ts +46 -46
- package/dist/error/BrowserAuthErrorCodes.mjs +50 -50
- package/dist/error/BrowserConfigurationAuthError.d.ts +33 -33
- package/dist/error/BrowserConfigurationAuthError.mjs +40 -40
- package/dist/error/BrowserConfigurationAuthError.mjs.map +1 -1
- package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts +3 -3
- package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +7 -7
- package/dist/error/NativeAuthError.d.ts +29 -29
- package/dist/error/NativeAuthError.mjs +60 -60
- package/dist/error/NativeAuthErrorCodes.d.ts +2 -2
- package/dist/error/NativeAuthErrorCodes.mjs +6 -6
- package/dist/error/NestedAppAuthError.d.ts +14 -14
- package/dist/error/NestedAppAuthError.mjs +23 -23
- package/dist/event/EventHandler.d.ts +41 -41
- package/dist/event/EventHandler.mjs +125 -125
- package/dist/event/EventMessage.d.ts +25 -25
- package/dist/event/EventMessage.mjs +68 -68
- package/dist/event/EventType.d.ts +29 -29
- package/dist/event/EventType.mjs +32 -32
- package/dist/index.d.ts +40 -40
- package/dist/index.mjs +1 -1
- package/dist/interaction_client/BaseInteractionClient.d.ts +50 -50
- package/dist/interaction_client/BaseInteractionClient.mjs +106 -106
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +10 -10
- package/dist/interaction_client/NativeInteractionClient.d.ts +151 -151
- package/dist/interaction_client/NativeInteractionClient.mjs +621 -621
- package/dist/interaction_client/PopupClient.d.ts +105 -105
- package/dist/interaction_client/PopupClient.d.ts.map +1 -1
- package/dist/interaction_client/PopupClient.mjs +433 -433
- package/dist/interaction_client/PopupClient.mjs.map +1 -1
- package/dist/interaction_client/RedirectClient.d.ts +50 -50
- package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
- package/dist/interaction_client/RedirectClient.mjs +315 -314
- package/dist/interaction_client/RedirectClient.mjs.map +1 -1
- package/dist/interaction_client/SilentAuthCodeClient.d.ts +23 -23
- package/dist/interaction_client/SilentAuthCodeClient.mjs +57 -57
- package/dist/interaction_client/SilentCacheClient.d.ts +16 -16
- package/dist/interaction_client/SilentCacheClient.mjs +42 -42
- package/dist/interaction_client/SilentIframeClient.d.ts +32 -32
- package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
- package/dist/interaction_client/SilentIframeClient.mjs +110 -100
- package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
- package/dist/interaction_client/SilentRefreshClient.d.ts +20 -20
- package/dist/interaction_client/SilentRefreshClient.mjs +47 -47
- package/dist/interaction_client/StandardInteractionClient.d.ts +48 -48
- package/dist/interaction_client/StandardInteractionClient.mjs +199 -199
- package/dist/interaction_handler/InteractionHandler.d.ts +33 -33
- package/dist/interaction_handler/InteractionHandler.mjs +93 -93
- package/dist/interaction_handler/RedirectHandler.d.ts +32 -32
- package/dist/interaction_handler/RedirectHandler.mjs +134 -134
- package/dist/interaction_handler/SilentHandler.d.ts +13 -13
- package/dist/interaction_handler/SilentHandler.mjs +134 -134
- package/dist/naa/AccountInfo.d.ts +11 -11
- package/dist/naa/AuthBridge.d.ts +8 -8
- package/dist/naa/AuthResult.d.ts +6 -6
- package/dist/naa/BridgeAccountContext.d.ts +12 -12
- package/dist/naa/BridgeCapabilities.d.ts +3 -3
- package/dist/naa/BridgeError.d.ts +9 -9
- package/dist/naa/BridgeError.mjs +7 -7
- package/dist/naa/BridgeProxy.d.ts +67 -67
- package/dist/naa/BridgeProxy.mjs +148 -148
- package/dist/naa/BridgeRequest.d.ts +7 -7
- package/dist/naa/BridgeRequestEnvelope.d.ts +12 -12
- package/dist/naa/BridgeResponseEnvelope.d.ts +13 -13
- package/dist/naa/BridgeStatusCode.d.ts +11 -11
- package/dist/naa/BridgeStatusCode.mjs +14 -14
- package/dist/naa/IBridgeProxy.d.ts +10 -10
- package/dist/naa/InitContext.d.ts +8 -8
- package/dist/naa/TokenRequest.d.ts +18 -18
- package/dist/naa/TokenResponse.d.ts +13 -13
- package/dist/naa/mapping/NestedAppAuthAdapter.d.ts +35 -35
- package/dist/naa/mapping/NestedAppAuthAdapter.mjs +179 -179
- package/dist/navigation/INavigationClient.d.ts +16 -16
- package/dist/navigation/NavigationClient.d.ts +22 -22
- package/dist/navigation/NavigationClient.mjs +40 -40
- package/dist/navigation/NavigationOptions.d.ts +12 -12
- package/dist/network/FetchClient.d.ts +26 -26
- package/dist/network/FetchClient.mjs +99 -99
- package/dist/operatingcontext/BaseOperatingContext.d.ts +41 -41
- package/dist/operatingcontext/BaseOperatingContext.mjs +94 -94
- package/dist/operatingcontext/NestedAppOperatingContext.d.ts +34 -34
- package/dist/operatingcontext/NestedAppOperatingContext.mjs +71 -71
- package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
- package/dist/operatingcontext/StandardOperatingContext.mjs +43 -43
- package/dist/operatingcontext/UnknownOperatingContext.d.ts +25 -25
- package/dist/operatingcontext/UnknownOperatingContext.mjs +42 -42
- package/dist/packageMetadata.d.ts +2 -2
- package/dist/packageMetadata.mjs +4 -4
- package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
- package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
- package/dist/request/ClearCacheRequest.d.ts +10 -10
- package/dist/request/EndSessionPopupRequest.d.ts +18 -18
- package/dist/request/EndSessionRequest.d.ts +15 -15
- package/dist/request/InitializeApplicationRequest.d.ts +8 -8
- package/dist/request/PopupRequest.d.ts +34 -34
- package/dist/request/PopupWindowAttributes.d.ts +15 -15
- package/dist/request/RedirectRequest.d.ts +40 -35
- package/dist/request/RedirectRequest.d.ts.map +1 -1
- package/dist/request/RequestHelpers.d.ts +13 -13
- package/dist/request/RequestHelpers.mjs +53 -53
- package/dist/request/SilentRequest.d.ts +33 -33
- package/dist/request/SsoSilentRequest.d.ts +29 -29
- package/dist/response/AuthenticationResult.d.ts +4 -4
- package/dist/response/ResponseHandler.d.ts +7 -7
- package/dist/response/ResponseHandler.mjs +36 -36
- package/dist/telemetry/BrowserPerformanceClient.d.ts +34 -34
- package/dist/telemetry/BrowserPerformanceClient.mjs +162 -162
- package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
- package/dist/telemetry/BrowserPerformanceMeasurement.mjs +92 -92
- package/dist/utils/BrowserConstants.d.ts +180 -180
- package/dist/utils/BrowserConstants.mjs +212 -212
- package/dist/utils/BrowserProtocolUtils.d.ts +11 -11
- package/dist/utils/BrowserProtocolUtils.mjs +21 -21
- package/dist/utils/BrowserUtils.d.ts +75 -75
- package/dist/utils/BrowserUtils.mjs +157 -157
- package/lib/msal-browser.cjs +18884 -18855
- package/lib/msal-browser.cjs.map +1 -1
- package/lib/msal-browser.js +18884 -18855
- package/lib/msal-browser.js.map +1 -1
- package/lib/msal-browser.min.js +59 -59
- package/package.json +2 -2
- package/src/config/Configuration.ts +9 -1
- package/src/controllers/StandardController.ts +30 -12
- package/src/interaction_client/PopupClient.ts +1 -0
- package/src/interaction_client/RedirectClient.ts +4 -1
- package/src/interaction_client/SilentIframeClient.ts +40 -3
- package/src/packageMetadata.ts +1 -1
- package/src/request/RedirectRequest.ts +5 -0
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
/*! @azure/msal-browser v3.
|
|
1
|
+
/*! @azure/msal-browser v3.22.0 2024-08-28 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { PerformanceEvents, ServerError, invokeAsync, CcsCredentialType } from '@azure/msal-common';
|
|
4
4
|
import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
|
|
5
5
|
import { userCancelled } from '../error/BrowserAuthErrorCodes.mjs';
|
|
6
6
|
|
|
7
|
-
/*
|
|
8
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
9
|
-
* Licensed under the MIT License.
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Abstract class which defines operations for a browser interaction handling class.
|
|
13
|
-
*/
|
|
14
|
-
class InteractionHandler {
|
|
15
|
-
constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {
|
|
16
|
-
this.authModule = authCodeModule;
|
|
17
|
-
this.browserStorage = storageImpl;
|
|
18
|
-
this.authCodeRequest = authCodeRequest;
|
|
19
|
-
this.logger = logger;
|
|
20
|
-
this.performanceClient = performanceClient;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Function to handle response parameters from hash.
|
|
24
|
-
* @param locationHash
|
|
25
|
-
*/
|
|
26
|
-
async handleCodeResponse(response, request) {
|
|
27
|
-
this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponse, request.correlationId);
|
|
28
|
-
let authCodeResponse;
|
|
29
|
-
try {
|
|
30
|
-
authCodeResponse = this.authModule.handleFragmentResponse(response, request.state);
|
|
31
|
-
}
|
|
32
|
-
catch (e) {
|
|
33
|
-
if (e instanceof ServerError &&
|
|
34
|
-
e.subError === userCancelled) {
|
|
35
|
-
// Translate server error caused by user closing native prompt to corresponding first class MSAL error
|
|
36
|
-
throw createBrowserAuthError(userCancelled);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
throw e;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return invokeAsync(this.handleCodeResponseFromServer.bind(this), PerformanceEvents.HandleCodeResponseFromServer, this.logger, this.performanceClient, request.correlationId)(authCodeResponse, request);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Process auth code response from AAD
|
|
46
|
-
* @param authCodeResponse
|
|
47
|
-
* @param state
|
|
48
|
-
* @param authority
|
|
49
|
-
* @param networkModule
|
|
50
|
-
* @returns
|
|
51
|
-
*/
|
|
52
|
-
async handleCodeResponseFromServer(authCodeResponse, request, validateNonce = true) {
|
|
53
|
-
this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, request.correlationId);
|
|
54
|
-
this.logger.trace("InteractionHandler.handleCodeResponseFromServer called");
|
|
55
|
-
// Assign code to request
|
|
56
|
-
this.authCodeRequest.code = authCodeResponse.code;
|
|
57
|
-
// Check for new cloud instance
|
|
58
|
-
if (authCodeResponse.cloud_instance_host_name) {
|
|
59
|
-
await invokeAsync(this.authModule.updateAuthority.bind(this.authModule), PerformanceEvents.UpdateTokenEndpointAuthority, this.logger, this.performanceClient, request.correlationId)(authCodeResponse.cloud_instance_host_name, request.correlationId);
|
|
60
|
-
}
|
|
61
|
-
// Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)
|
|
62
|
-
if (validateNonce) {
|
|
63
|
-
// TODO: Assigning "response nonce" to "request nonce" is confusing. Refactor the function doing validation to accept request nonce directly
|
|
64
|
-
authCodeResponse.nonce = request.nonce || undefined;
|
|
65
|
-
}
|
|
66
|
-
authCodeResponse.state = request.state;
|
|
67
|
-
// Add CCS parameters if available
|
|
68
|
-
if (authCodeResponse.client_info) {
|
|
69
|
-
this.authCodeRequest.clientInfo = authCodeResponse.client_info;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
const ccsCred = this.createCcsCredentials(request);
|
|
73
|
-
if (ccsCred) {
|
|
74
|
-
this.authCodeRequest.ccsCredential = ccsCred;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Acquire token with retrieved code.
|
|
78
|
-
const tokenResponse = (await invokeAsync(this.authModule.acquireToken.bind(this.authModule), PerformanceEvents.AuthClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(this.authCodeRequest, authCodeResponse));
|
|
79
|
-
return tokenResponse;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Build ccs creds if available
|
|
83
|
-
*/
|
|
84
|
-
createCcsCredentials(request) {
|
|
85
|
-
if (request.account) {
|
|
86
|
-
return {
|
|
87
|
-
credential: request.account.homeAccountId,
|
|
88
|
-
type: CcsCredentialType.HOME_ACCOUNT_ID,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
else if (request.loginHint) {
|
|
92
|
-
return {
|
|
93
|
-
credential: request.loginHint,
|
|
94
|
-
type: CcsCredentialType.UPN,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
7
|
+
/*
|
|
8
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
9
|
+
* Licensed under the MIT License.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Abstract class which defines operations for a browser interaction handling class.
|
|
13
|
+
*/
|
|
14
|
+
class InteractionHandler {
|
|
15
|
+
constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {
|
|
16
|
+
this.authModule = authCodeModule;
|
|
17
|
+
this.browserStorage = storageImpl;
|
|
18
|
+
this.authCodeRequest = authCodeRequest;
|
|
19
|
+
this.logger = logger;
|
|
20
|
+
this.performanceClient = performanceClient;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Function to handle response parameters from hash.
|
|
24
|
+
* @param locationHash
|
|
25
|
+
*/
|
|
26
|
+
async handleCodeResponse(response, request) {
|
|
27
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponse, request.correlationId);
|
|
28
|
+
let authCodeResponse;
|
|
29
|
+
try {
|
|
30
|
+
authCodeResponse = this.authModule.handleFragmentResponse(response, request.state);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
if (e instanceof ServerError &&
|
|
34
|
+
e.subError === userCancelled) {
|
|
35
|
+
// Translate server error caused by user closing native prompt to corresponding first class MSAL error
|
|
36
|
+
throw createBrowserAuthError(userCancelled);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
throw e;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return invokeAsync(this.handleCodeResponseFromServer.bind(this), PerformanceEvents.HandleCodeResponseFromServer, this.logger, this.performanceClient, request.correlationId)(authCodeResponse, request);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Process auth code response from AAD
|
|
46
|
+
* @param authCodeResponse
|
|
47
|
+
* @param state
|
|
48
|
+
* @param authority
|
|
49
|
+
* @param networkModule
|
|
50
|
+
* @returns
|
|
51
|
+
*/
|
|
52
|
+
async handleCodeResponseFromServer(authCodeResponse, request, validateNonce = true) {
|
|
53
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, request.correlationId);
|
|
54
|
+
this.logger.trace("InteractionHandler.handleCodeResponseFromServer called");
|
|
55
|
+
// Assign code to request
|
|
56
|
+
this.authCodeRequest.code = authCodeResponse.code;
|
|
57
|
+
// Check for new cloud instance
|
|
58
|
+
if (authCodeResponse.cloud_instance_host_name) {
|
|
59
|
+
await invokeAsync(this.authModule.updateAuthority.bind(this.authModule), PerformanceEvents.UpdateTokenEndpointAuthority, this.logger, this.performanceClient, request.correlationId)(authCodeResponse.cloud_instance_host_name, request.correlationId);
|
|
60
|
+
}
|
|
61
|
+
// Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)
|
|
62
|
+
if (validateNonce) {
|
|
63
|
+
// TODO: Assigning "response nonce" to "request nonce" is confusing. Refactor the function doing validation to accept request nonce directly
|
|
64
|
+
authCodeResponse.nonce = request.nonce || undefined;
|
|
65
|
+
}
|
|
66
|
+
authCodeResponse.state = request.state;
|
|
67
|
+
// Add CCS parameters if available
|
|
68
|
+
if (authCodeResponse.client_info) {
|
|
69
|
+
this.authCodeRequest.clientInfo = authCodeResponse.client_info;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const ccsCred = this.createCcsCredentials(request);
|
|
73
|
+
if (ccsCred) {
|
|
74
|
+
this.authCodeRequest.ccsCredential = ccsCred;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Acquire token with retrieved code.
|
|
78
|
+
const tokenResponse = (await invokeAsync(this.authModule.acquireToken.bind(this.authModule), PerformanceEvents.AuthClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(this.authCodeRequest, authCodeResponse));
|
|
79
|
+
return tokenResponse;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build ccs creds if available
|
|
83
|
+
*/
|
|
84
|
+
createCcsCredentials(request) {
|
|
85
|
+
if (request.account) {
|
|
86
|
+
return {
|
|
87
|
+
credential: request.account.homeAccountId,
|
|
88
|
+
type: CcsCredentialType.HOME_ACCOUNT_ID,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else if (request.loginHint) {
|
|
92
|
+
return {
|
|
93
|
+
credential: request.loginHint,
|
|
94
|
+
type: CcsCredentialType.UPN,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
export { InteractionHandler };
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { AuthorizationCodeClient, CommonAuthorizationCodeRequest, Logger, IPerformanceClient, CcsCredential, ServerAuthorizationCodeResponse } from "@azure/msal-common";
|
|
2
|
-
import { BrowserCacheManager } from "../cache/BrowserCacheManager";
|
|
3
|
-
import { INavigationClient } from "../navigation/INavigationClient";
|
|
4
|
-
import { AuthenticationResult } from "../response/AuthenticationResult";
|
|
5
|
-
export type RedirectParams = {
|
|
6
|
-
navigationClient: INavigationClient;
|
|
7
|
-
redirectTimeout: number;
|
|
8
|
-
redirectStartPage: string;
|
|
9
|
-
onRedirectNavigate?: (url: string) => void | boolean;
|
|
10
|
-
};
|
|
11
|
-
export declare class RedirectHandler {
|
|
12
|
-
authModule: AuthorizationCodeClient;
|
|
13
|
-
browserStorage: BrowserCacheManager;
|
|
14
|
-
authCodeRequest: CommonAuthorizationCodeRequest;
|
|
15
|
-
logger: Logger;
|
|
16
|
-
performanceClient: IPerformanceClient;
|
|
17
|
-
constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, performanceClient: IPerformanceClient);
|
|
18
|
-
/**
|
|
19
|
-
* Redirects window to given URL.
|
|
20
|
-
* @param urlNavigate
|
|
21
|
-
*/
|
|
22
|
-
initiateAuthRequest(requestUrl: string, params: RedirectParams): Promise<void>;
|
|
23
|
-
/**
|
|
24
|
-
* Handle authorization code response in the window.
|
|
25
|
-
* @param hash
|
|
26
|
-
*/
|
|
27
|
-
handleCodeResponse(response: ServerAuthorizationCodeResponse, state: string): Promise<AuthenticationResult>;
|
|
28
|
-
/**
|
|
29
|
-
* Looks up ccs creds in the cache
|
|
30
|
-
*/
|
|
31
|
-
protected checkCcsCredentials(): CcsCredential | null;
|
|
32
|
-
}
|
|
1
|
+
import { AuthorizationCodeClient, CommonAuthorizationCodeRequest, Logger, IPerformanceClient, CcsCredential, ServerAuthorizationCodeResponse } from "@azure/msal-common";
|
|
2
|
+
import { BrowserCacheManager } from "../cache/BrowserCacheManager";
|
|
3
|
+
import { INavigationClient } from "../navigation/INavigationClient";
|
|
4
|
+
import { AuthenticationResult } from "../response/AuthenticationResult";
|
|
5
|
+
export type RedirectParams = {
|
|
6
|
+
navigationClient: INavigationClient;
|
|
7
|
+
redirectTimeout: number;
|
|
8
|
+
redirectStartPage: string;
|
|
9
|
+
onRedirectNavigate?: (url: string) => void | boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare class RedirectHandler {
|
|
12
|
+
authModule: AuthorizationCodeClient;
|
|
13
|
+
browserStorage: BrowserCacheManager;
|
|
14
|
+
authCodeRequest: CommonAuthorizationCodeRequest;
|
|
15
|
+
logger: Logger;
|
|
16
|
+
performanceClient: IPerformanceClient;
|
|
17
|
+
constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, performanceClient: IPerformanceClient);
|
|
18
|
+
/**
|
|
19
|
+
* Redirects window to given URL.
|
|
20
|
+
* @param urlNavigate
|
|
21
|
+
*/
|
|
22
|
+
initiateAuthRequest(requestUrl: string, params: RedirectParams): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Handle authorization code response in the window.
|
|
25
|
+
* @param hash
|
|
26
|
+
*/
|
|
27
|
+
handleCodeResponse(response: ServerAuthorizationCodeResponse, state: string): Promise<AuthenticationResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Looks up ccs creds in the cache
|
|
30
|
+
*/
|
|
31
|
+
protected checkCcsCredentials(): CcsCredential | null;
|
|
32
|
+
}
|
|
33
33
|
//# sourceMappingURL=RedirectHandler.d.ts.map
|
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
/*! @azure/msal-browser v3.
|
|
1
|
+
/*! @azure/msal-browser v3.22.0 2024-08-28 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { createClientAuthError, ClientAuthErrorCodes, ServerError, invokeAsync, PerformanceEvents } from '@azure/msal-common';
|
|
4
4
|
import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
|
|
5
5
|
import { TemporaryCacheKeys, ApiId } from '../utils/BrowserConstants.mjs';
|
|
6
6
|
import { emptyNavigateUri, userCancelled } from '../error/BrowserAuthErrorCodes.mjs';
|
|
7
7
|
|
|
8
|
-
/*
|
|
9
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
10
|
-
* Licensed under the MIT License.
|
|
11
|
-
*/
|
|
12
|
-
class RedirectHandler {
|
|
13
|
-
constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {
|
|
14
|
-
this.authModule = authCodeModule;
|
|
15
|
-
this.browserStorage = storageImpl;
|
|
16
|
-
this.authCodeRequest = authCodeRequest;
|
|
17
|
-
this.logger = logger;
|
|
18
|
-
this.performanceClient = performanceClient;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Redirects window to given URL.
|
|
22
|
-
* @param urlNavigate
|
|
23
|
-
*/
|
|
24
|
-
async initiateAuthRequest(requestUrl, params) {
|
|
25
|
-
this.logger.verbose("RedirectHandler.initiateAuthRequest called");
|
|
26
|
-
// Navigate if valid URL
|
|
27
|
-
if (requestUrl) {
|
|
28
|
-
// Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true
|
|
29
|
-
if (params.redirectStartPage) {
|
|
30
|
-
this.logger.verbose("RedirectHandler.initiateAuthRequest: redirectStartPage set, caching start page");
|
|
31
|
-
this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, params.redirectStartPage, true);
|
|
32
|
-
}
|
|
33
|
-
// Set interaction status in the library.
|
|
34
|
-
this.browserStorage.setTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, this.authCodeRequest.correlationId, true);
|
|
35
|
-
this.browserStorage.cacheCodeRequest(this.authCodeRequest);
|
|
36
|
-
this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);
|
|
37
|
-
const navigationOptions = {
|
|
38
|
-
apiId: ApiId.acquireTokenRedirect,
|
|
39
|
-
timeout: params.redirectTimeout,
|
|
40
|
-
noHistory: false,
|
|
41
|
-
};
|
|
42
|
-
// If onRedirectNavigate is implemented, invoke it and provide requestUrl
|
|
43
|
-
if (typeof params.onRedirectNavigate === "function") {
|
|
44
|
-
this.logger.verbose("RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback");
|
|
45
|
-
const navigate = params.onRedirectNavigate(requestUrl);
|
|
46
|
-
// Returning false from onRedirectNavigate will stop navigation
|
|
47
|
-
if (navigate !== false) {
|
|
48
|
-
this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating");
|
|
49
|
-
await params.navigationClient.navigateExternal(requestUrl, navigationOptions);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation");
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
// Navigate window to request URL
|
|
59
|
-
this.logger.verbose("RedirectHandler.initiateAuthRequest: Navigating window to navigate url");
|
|
60
|
-
await params.navigationClient.navigateExternal(requestUrl, navigationOptions);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// Throw error if request URL is empty.
|
|
66
|
-
this.logger.info("RedirectHandler.initiateAuthRequest: Navigate url is empty");
|
|
67
|
-
throw createBrowserAuthError(emptyNavigateUri);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Handle authorization code response in the window.
|
|
72
|
-
* @param hash
|
|
73
|
-
*/
|
|
74
|
-
async handleCodeResponse(response, state) {
|
|
75
|
-
this.logger.verbose("RedirectHandler.handleCodeResponse called");
|
|
76
|
-
// Interaction is completed - remove interaction status.
|
|
77
|
-
this.browserStorage.setInteractionInProgress(false);
|
|
78
|
-
// Handle code response.
|
|
79
|
-
const stateKey = this.browserStorage.generateStateKey(state);
|
|
80
|
-
const requestState = this.browserStorage.getTemporaryCache(stateKey);
|
|
81
|
-
if (!requestState) {
|
|
82
|
-
throw createClientAuthError(ClientAuthErrorCodes.stateNotFound, "Cached State");
|
|
83
|
-
}
|
|
84
|
-
let authCodeResponse;
|
|
85
|
-
try {
|
|
86
|
-
authCodeResponse = this.authModule.handleFragmentResponse(response, requestState);
|
|
87
|
-
}
|
|
88
|
-
catch (e) {
|
|
89
|
-
if (e instanceof ServerError &&
|
|
90
|
-
e.subError === userCancelled) {
|
|
91
|
-
// Translate server error caused by user closing native prompt to corresponding first class MSAL error
|
|
92
|
-
throw createBrowserAuthError(userCancelled);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
throw e;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Get cached items
|
|
99
|
-
const nonceKey = this.browserStorage.generateNonceKey(requestState);
|
|
100
|
-
const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);
|
|
101
|
-
// Assign code to request
|
|
102
|
-
this.authCodeRequest.code = authCodeResponse.code;
|
|
103
|
-
// Check for new cloud instance
|
|
104
|
-
if (authCodeResponse.cloud_instance_host_name) {
|
|
105
|
-
await invokeAsync(this.authModule.updateAuthority.bind(this.authModule), PerformanceEvents.UpdateTokenEndpointAuthority, this.logger, this.performanceClient, this.authCodeRequest.correlationId)(authCodeResponse.cloud_instance_host_name, this.authCodeRequest.correlationId);
|
|
106
|
-
}
|
|
107
|
-
authCodeResponse.nonce = cachedNonce || undefined;
|
|
108
|
-
authCodeResponse.state = requestState;
|
|
109
|
-
// Add CCS parameters if available
|
|
110
|
-
if (authCodeResponse.client_info) {
|
|
111
|
-
this.authCodeRequest.clientInfo = authCodeResponse.client_info;
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
const cachedCcsCred = this.checkCcsCredentials();
|
|
115
|
-
if (cachedCcsCred) {
|
|
116
|
-
this.authCodeRequest.ccsCredential = cachedCcsCred;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Acquire token with retrieved code.
|
|
120
|
-
const tokenResponse = (await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse));
|
|
121
|
-
this.browserStorage.cleanRequestByState(state);
|
|
122
|
-
return tokenResponse;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Looks up ccs creds in the cache
|
|
126
|
-
*/
|
|
127
|
-
checkCcsCredentials() {
|
|
128
|
-
// Look up ccs credential in temp cache
|
|
129
|
-
const cachedCcsCred = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, true);
|
|
130
|
-
if (cachedCcsCred) {
|
|
131
|
-
try {
|
|
132
|
-
return JSON.parse(cachedCcsCred);
|
|
133
|
-
}
|
|
134
|
-
catch (e) {
|
|
135
|
-
this.authModule.logger.error("Cache credential could not be parsed");
|
|
136
|
-
this.authModule.logger.errorPii(`Cache credential could not be parsed: ${cachedCcsCred}`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
8
|
+
/*
|
|
9
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
10
|
+
* Licensed under the MIT License.
|
|
11
|
+
*/
|
|
12
|
+
class RedirectHandler {
|
|
13
|
+
constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {
|
|
14
|
+
this.authModule = authCodeModule;
|
|
15
|
+
this.browserStorage = storageImpl;
|
|
16
|
+
this.authCodeRequest = authCodeRequest;
|
|
17
|
+
this.logger = logger;
|
|
18
|
+
this.performanceClient = performanceClient;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Redirects window to given URL.
|
|
22
|
+
* @param urlNavigate
|
|
23
|
+
*/
|
|
24
|
+
async initiateAuthRequest(requestUrl, params) {
|
|
25
|
+
this.logger.verbose("RedirectHandler.initiateAuthRequest called");
|
|
26
|
+
// Navigate if valid URL
|
|
27
|
+
if (requestUrl) {
|
|
28
|
+
// Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true
|
|
29
|
+
if (params.redirectStartPage) {
|
|
30
|
+
this.logger.verbose("RedirectHandler.initiateAuthRequest: redirectStartPage set, caching start page");
|
|
31
|
+
this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, params.redirectStartPage, true);
|
|
32
|
+
}
|
|
33
|
+
// Set interaction status in the library.
|
|
34
|
+
this.browserStorage.setTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, this.authCodeRequest.correlationId, true);
|
|
35
|
+
this.browserStorage.cacheCodeRequest(this.authCodeRequest);
|
|
36
|
+
this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);
|
|
37
|
+
const navigationOptions = {
|
|
38
|
+
apiId: ApiId.acquireTokenRedirect,
|
|
39
|
+
timeout: params.redirectTimeout,
|
|
40
|
+
noHistory: false,
|
|
41
|
+
};
|
|
42
|
+
// If onRedirectNavigate is implemented, invoke it and provide requestUrl
|
|
43
|
+
if (typeof params.onRedirectNavigate === "function") {
|
|
44
|
+
this.logger.verbose("RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback");
|
|
45
|
+
const navigate = params.onRedirectNavigate(requestUrl);
|
|
46
|
+
// Returning false from onRedirectNavigate will stop navigation
|
|
47
|
+
if (navigate !== false) {
|
|
48
|
+
this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating");
|
|
49
|
+
await params.navigationClient.navigateExternal(requestUrl, navigationOptions);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Navigate window to request URL
|
|
59
|
+
this.logger.verbose("RedirectHandler.initiateAuthRequest: Navigating window to navigate url");
|
|
60
|
+
await params.navigationClient.navigateExternal(requestUrl, navigationOptions);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// Throw error if request URL is empty.
|
|
66
|
+
this.logger.info("RedirectHandler.initiateAuthRequest: Navigate url is empty");
|
|
67
|
+
throw createBrowserAuthError(emptyNavigateUri);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Handle authorization code response in the window.
|
|
72
|
+
* @param hash
|
|
73
|
+
*/
|
|
74
|
+
async handleCodeResponse(response, state) {
|
|
75
|
+
this.logger.verbose("RedirectHandler.handleCodeResponse called");
|
|
76
|
+
// Interaction is completed - remove interaction status.
|
|
77
|
+
this.browserStorage.setInteractionInProgress(false);
|
|
78
|
+
// Handle code response.
|
|
79
|
+
const stateKey = this.browserStorage.generateStateKey(state);
|
|
80
|
+
const requestState = this.browserStorage.getTemporaryCache(stateKey);
|
|
81
|
+
if (!requestState) {
|
|
82
|
+
throw createClientAuthError(ClientAuthErrorCodes.stateNotFound, "Cached State");
|
|
83
|
+
}
|
|
84
|
+
let authCodeResponse;
|
|
85
|
+
try {
|
|
86
|
+
authCodeResponse = this.authModule.handleFragmentResponse(response, requestState);
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
if (e instanceof ServerError &&
|
|
90
|
+
e.subError === userCancelled) {
|
|
91
|
+
// Translate server error caused by user closing native prompt to corresponding first class MSAL error
|
|
92
|
+
throw createBrowserAuthError(userCancelled);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw e;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Get cached items
|
|
99
|
+
const nonceKey = this.browserStorage.generateNonceKey(requestState);
|
|
100
|
+
const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);
|
|
101
|
+
// Assign code to request
|
|
102
|
+
this.authCodeRequest.code = authCodeResponse.code;
|
|
103
|
+
// Check for new cloud instance
|
|
104
|
+
if (authCodeResponse.cloud_instance_host_name) {
|
|
105
|
+
await invokeAsync(this.authModule.updateAuthority.bind(this.authModule), PerformanceEvents.UpdateTokenEndpointAuthority, this.logger, this.performanceClient, this.authCodeRequest.correlationId)(authCodeResponse.cloud_instance_host_name, this.authCodeRequest.correlationId);
|
|
106
|
+
}
|
|
107
|
+
authCodeResponse.nonce = cachedNonce || undefined;
|
|
108
|
+
authCodeResponse.state = requestState;
|
|
109
|
+
// Add CCS parameters if available
|
|
110
|
+
if (authCodeResponse.client_info) {
|
|
111
|
+
this.authCodeRequest.clientInfo = authCodeResponse.client_info;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const cachedCcsCred = this.checkCcsCredentials();
|
|
115
|
+
if (cachedCcsCred) {
|
|
116
|
+
this.authCodeRequest.ccsCredential = cachedCcsCred;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Acquire token with retrieved code.
|
|
120
|
+
const tokenResponse = (await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse));
|
|
121
|
+
this.browserStorage.cleanRequestByState(state);
|
|
122
|
+
return tokenResponse;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Looks up ccs creds in the cache
|
|
126
|
+
*/
|
|
127
|
+
checkCcsCredentials() {
|
|
128
|
+
// Look up ccs credential in temp cache
|
|
129
|
+
const cachedCcsCred = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, true);
|
|
130
|
+
if (cachedCcsCred) {
|
|
131
|
+
try {
|
|
132
|
+
return JSON.parse(cachedCcsCred);
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
this.authModule.logger.error("Cache credential could not be parsed");
|
|
136
|
+
this.authModule.logger.errorPii(`Cache credential could not be parsed: ${cachedCcsCred}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
export { RedirectHandler };
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Logger, IPerformanceClient, ServerResponseType } from "@azure/msal-common";
|
|
2
|
-
/**
|
|
3
|
-
* Creates a hidden iframe to given URL using user-requested scopes as an id.
|
|
4
|
-
* @param urlNavigate
|
|
5
|
-
* @param userRequestScopes
|
|
6
|
-
*/
|
|
7
|
-
export declare function initiateAuthRequest(requestUrl: string, performanceClient: IPerformanceClient, logger: Logger, correlationId: string, navigateFrameWait?: number): Promise<HTMLIFrameElement>;
|
|
8
|
-
/**
|
|
9
|
-
* Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.
|
|
10
|
-
* @param iframe
|
|
11
|
-
* @param timeout
|
|
12
|
-
*/
|
|
13
|
-
export declare function monitorIframeForHash(iframe: HTMLIFrameElement, timeout: number, pollIntervalMilliseconds: number, performanceClient: IPerformanceClient, logger: Logger, correlationId: string, responseType: ServerResponseType): Promise<string>;
|
|
1
|
+
import { Logger, IPerformanceClient, ServerResponseType } from "@azure/msal-common";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a hidden iframe to given URL using user-requested scopes as an id.
|
|
4
|
+
* @param urlNavigate
|
|
5
|
+
* @param userRequestScopes
|
|
6
|
+
*/
|
|
7
|
+
export declare function initiateAuthRequest(requestUrl: string, performanceClient: IPerformanceClient, logger: Logger, correlationId: string, navigateFrameWait?: number): Promise<HTMLIFrameElement>;
|
|
8
|
+
/**
|
|
9
|
+
* Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.
|
|
10
|
+
* @param iframe
|
|
11
|
+
* @param timeout
|
|
12
|
+
*/
|
|
13
|
+
export declare function monitorIframeForHash(iframe: HTMLIFrameElement, timeout: number, pollIntervalMilliseconds: number, performanceClient: IPerformanceClient, logger: Logger, correlationId: string, responseType: ServerResponseType): Promise<string>;
|
|
14
14
|
//# sourceMappingURL=SilentHandler.d.ts.map
|