@azure/msal-browser 3.20.0 → 3.21.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 +410 -385
- package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
- package/dist/cache/BrowserCacheManager.mjs +1364 -1294
- package/dist/cache/BrowserCacheManager.mjs.map +1 -1
- 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 +256 -255
- package/dist/error/BrowserAuthError.d.ts.map +1 -1
- package/dist/error/BrowserAuthError.mjs +265 -264
- package/dist/error/BrowserAuthError.mjs.map +1 -1
- package/dist/error/BrowserAuthErrorCodes.d.ts +47 -46
- package/dist/error/BrowserAuthErrorCodes.d.ts.map +1 -1
- package/dist/error/BrowserAuthErrorCodes.mjs +53 -52
- package/dist/error/BrowserAuthErrorCodes.mjs.map +1 -1
- 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 +118 -105
- package/dist/interaction_client/PopupClient.d.ts.map +1 -1
- package/dist/interaction_client/PopupClient.mjs +460 -434
- 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 +349 -317
- 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 +111 -101
- 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.d.ts.map +1 -1
- package/dist/interaction_handler/RedirectHandler.mjs +135 -134
- package/dist/interaction_handler/RedirectHandler.mjs.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/naa/BridgeProxy.mjs +153 -148
- package/dist/naa/BridgeProxy.mjs.map +1 -1
- 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 +38 -34
- package/dist/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
- package/dist/telemetry/BrowserPerformanceClient.mjs +163 -163
- package/dist/telemetry/BrowserPerformanceClient.mjs.map +1 -1
- package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
- package/dist/telemetry/BrowserPerformanceMeasurement.mjs +92 -92
- package/dist/utils/BrowserConstants.d.ts +182 -180
- package/dist/utils/BrowserConstants.d.ts.map +1 -1
- package/dist/utils/BrowserConstants.mjs +214 -212
- package/dist/utils/BrowserConstants.mjs.map +1 -1
- 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 +19027 -18857
- package/lib/msal-browser.cjs.map +1 -1
- package/lib/msal-browser.js +19027 -18857
- package/lib/msal-browser.js.map +1 -1
- package/lib/msal-browser.min.js +62 -62
- package/package.json +2 -2
- package/src/cache/BrowserCacheManager.ts +95 -0
- package/src/config/Configuration.ts +9 -1
- package/src/controllers/StandardController.ts +30 -12
- package/src/error/BrowserAuthError.ts +2 -0
- package/src/error/BrowserAuthErrorCodes.ts +1 -0
- package/src/interaction_client/PopupClient.ts +202 -117
- package/src/interaction_client/RedirectClient.ts +62 -2
- package/src/interaction_client/SilentIframeClient.ts +41 -3
- package/src/interaction_handler/RedirectHandler.ts +1 -0
- package/src/naa/BridgeProxy.ts +7 -2
- package/src/packageMetadata.ts +1 -1
- package/src/request/RedirectRequest.ts +5 -0
- package/src/telemetry/BrowserPerformanceClient.ts +1 -1
- package/src/utils/BrowserConstants.ts +2 -0
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { ICrypto, Logger, ExternalTokenResponse } from "@azure/msal-common";
|
|
2
|
-
import { BrowserConfiguration } from "../config/Configuration";
|
|
3
|
-
import { SilentRequest } from "../request/SilentRequest";
|
|
4
|
-
import { BrowserCacheManager } from "./BrowserCacheManager";
|
|
5
|
-
import { ITokenCache } from "./ITokenCache";
|
|
6
|
-
import { AuthenticationResult } from "../response/AuthenticationResult";
|
|
7
|
-
export type LoadTokenOptions = {
|
|
8
|
-
clientInfo?: string;
|
|
9
|
-
expiresOn?: number;
|
|
10
|
-
extendedExpiresOn?: number;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Token cache manager
|
|
14
|
-
*/
|
|
15
|
-
export declare class TokenCache implements ITokenCache {
|
|
16
|
-
isBrowserEnvironment: boolean;
|
|
17
|
-
protected config: BrowserConfiguration;
|
|
18
|
-
private storage;
|
|
19
|
-
private logger;
|
|
20
|
-
private cryptoObj;
|
|
21
|
-
constructor(configuration: BrowserConfiguration, storage: BrowserCacheManager, logger: Logger, cryptoObj: ICrypto);
|
|
22
|
-
/**
|
|
23
|
-
* API to load tokens to msal-browser cache.
|
|
24
|
-
* @param request
|
|
25
|
-
* @param response
|
|
26
|
-
* @param options
|
|
27
|
-
* @returns `AuthenticationResult` for the response that was loaded.
|
|
28
|
-
*/
|
|
29
|
-
loadExternalTokens(request: SilentRequest, response: ExternalTokenResponse, options: LoadTokenOptions): AuthenticationResult;
|
|
30
|
-
/**
|
|
31
|
-
* Helper function to load account to msal-browser cache
|
|
32
|
-
* @param idToken
|
|
33
|
-
* @param environment
|
|
34
|
-
* @param clientInfo
|
|
35
|
-
* @param authorityType
|
|
36
|
-
* @param requestHomeAccountId
|
|
37
|
-
* @returns `AccountEntity`
|
|
38
|
-
*/
|
|
39
|
-
private loadAccount;
|
|
40
|
-
/**
|
|
41
|
-
* Helper function to load id tokens to msal-browser cache
|
|
42
|
-
* @param idToken
|
|
43
|
-
* @param homeAccountId
|
|
44
|
-
* @param environment
|
|
45
|
-
* @param tenantId
|
|
46
|
-
* @returns `IdTokenEntity`
|
|
47
|
-
*/
|
|
48
|
-
private loadIdToken;
|
|
49
|
-
/**
|
|
50
|
-
* Helper function to load access tokens to msal-browser cache
|
|
51
|
-
* @param request
|
|
52
|
-
* @param response
|
|
53
|
-
* @param homeAccountId
|
|
54
|
-
* @param environment
|
|
55
|
-
* @param tenantId
|
|
56
|
-
* @returns `AccessTokenEntity`
|
|
57
|
-
*/
|
|
58
|
-
private loadAccessToken;
|
|
59
|
-
/**
|
|
60
|
-
* Helper function to load refresh tokens to msal-browser cache
|
|
61
|
-
* @param request
|
|
62
|
-
* @param response
|
|
63
|
-
* @param homeAccountId
|
|
64
|
-
* @param environment
|
|
65
|
-
* @returns `RefreshTokenEntity`
|
|
66
|
-
*/
|
|
67
|
-
private loadRefreshToken;
|
|
68
|
-
/**
|
|
69
|
-
* Helper function to generate an `AuthenticationResult` for the result.
|
|
70
|
-
* @param request
|
|
71
|
-
* @param idTokenObj
|
|
72
|
-
* @param cacheRecord
|
|
73
|
-
* @param authority
|
|
74
|
-
* @returns `AuthenticationResult`
|
|
75
|
-
*/
|
|
76
|
-
private generateAuthenticationResult;
|
|
77
|
-
}
|
|
1
|
+
import { ICrypto, Logger, ExternalTokenResponse } from "@azure/msal-common";
|
|
2
|
+
import { BrowserConfiguration } from "../config/Configuration";
|
|
3
|
+
import { SilentRequest } from "../request/SilentRequest";
|
|
4
|
+
import { BrowserCacheManager } from "./BrowserCacheManager";
|
|
5
|
+
import { ITokenCache } from "./ITokenCache";
|
|
6
|
+
import { AuthenticationResult } from "../response/AuthenticationResult";
|
|
7
|
+
export type LoadTokenOptions = {
|
|
8
|
+
clientInfo?: string;
|
|
9
|
+
expiresOn?: number;
|
|
10
|
+
extendedExpiresOn?: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Token cache manager
|
|
14
|
+
*/
|
|
15
|
+
export declare class TokenCache implements ITokenCache {
|
|
16
|
+
isBrowserEnvironment: boolean;
|
|
17
|
+
protected config: BrowserConfiguration;
|
|
18
|
+
private storage;
|
|
19
|
+
private logger;
|
|
20
|
+
private cryptoObj;
|
|
21
|
+
constructor(configuration: BrowserConfiguration, storage: BrowserCacheManager, logger: Logger, cryptoObj: ICrypto);
|
|
22
|
+
/**
|
|
23
|
+
* API to load tokens to msal-browser cache.
|
|
24
|
+
* @param request
|
|
25
|
+
* @param response
|
|
26
|
+
* @param options
|
|
27
|
+
* @returns `AuthenticationResult` for the response that was loaded.
|
|
28
|
+
*/
|
|
29
|
+
loadExternalTokens(request: SilentRequest, response: ExternalTokenResponse, options: LoadTokenOptions): AuthenticationResult;
|
|
30
|
+
/**
|
|
31
|
+
* Helper function to load account to msal-browser cache
|
|
32
|
+
* @param idToken
|
|
33
|
+
* @param environment
|
|
34
|
+
* @param clientInfo
|
|
35
|
+
* @param authorityType
|
|
36
|
+
* @param requestHomeAccountId
|
|
37
|
+
* @returns `AccountEntity`
|
|
38
|
+
*/
|
|
39
|
+
private loadAccount;
|
|
40
|
+
/**
|
|
41
|
+
* Helper function to load id tokens to msal-browser cache
|
|
42
|
+
* @param idToken
|
|
43
|
+
* @param homeAccountId
|
|
44
|
+
* @param environment
|
|
45
|
+
* @param tenantId
|
|
46
|
+
* @returns `IdTokenEntity`
|
|
47
|
+
*/
|
|
48
|
+
private loadIdToken;
|
|
49
|
+
/**
|
|
50
|
+
* Helper function to load access tokens to msal-browser cache
|
|
51
|
+
* @param request
|
|
52
|
+
* @param response
|
|
53
|
+
* @param homeAccountId
|
|
54
|
+
* @param environment
|
|
55
|
+
* @param tenantId
|
|
56
|
+
* @returns `AccessTokenEntity`
|
|
57
|
+
*/
|
|
58
|
+
private loadAccessToken;
|
|
59
|
+
/**
|
|
60
|
+
* Helper function to load refresh tokens to msal-browser cache
|
|
61
|
+
* @param request
|
|
62
|
+
* @param response
|
|
63
|
+
* @param homeAccountId
|
|
64
|
+
* @param environment
|
|
65
|
+
* @returns `RefreshTokenEntity`
|
|
66
|
+
*/
|
|
67
|
+
private loadRefreshToken;
|
|
68
|
+
/**
|
|
69
|
+
* Helper function to generate an `AuthenticationResult` for the result.
|
|
70
|
+
* @param request
|
|
71
|
+
* @param idTokenObj
|
|
72
|
+
* @param cacheRecord
|
|
73
|
+
* @param authority
|
|
74
|
+
* @returns `AuthenticationResult`
|
|
75
|
+
*/
|
|
76
|
+
private generateAuthenticationResult;
|
|
77
|
+
}
|
|
78
78
|
//# sourceMappingURL=TokenCache.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @azure/msal-browser v3.
|
|
1
|
+
/*! @azure/msal-browser v3.21.0 2024-08-13 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { AuthToken, Authority, AccountEntity, buildAccountToCache, CacheHelpers, ScopeSet } from '@azure/msal-common';
|
|
4
4
|
import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
|
|
@@ -6,200 +6,200 @@ import { base64Decode } from '../encode/Base64Decode.mjs';
|
|
|
6
6
|
import { createNewGuid } from '../crypto/BrowserCrypto.mjs';
|
|
7
7
|
import { nonBrowserEnvironment, unableToLoadToken } from '../error/BrowserAuthErrorCodes.mjs';
|
|
8
8
|
|
|
9
|
-
/*
|
|
10
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
11
|
-
* Licensed under the MIT License.
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* Token cache manager
|
|
15
|
-
*/
|
|
16
|
-
class TokenCache {
|
|
17
|
-
constructor(configuration, storage, logger, cryptoObj) {
|
|
18
|
-
this.isBrowserEnvironment = typeof window !== "undefined";
|
|
19
|
-
this.config = configuration;
|
|
20
|
-
this.storage = storage;
|
|
21
|
-
this.logger = logger;
|
|
22
|
-
this.cryptoObj = cryptoObj;
|
|
23
|
-
}
|
|
24
|
-
// Move getAllAccounts here and cache utility APIs
|
|
25
|
-
/**
|
|
26
|
-
* API to load tokens to msal-browser cache.
|
|
27
|
-
* @param request
|
|
28
|
-
* @param response
|
|
29
|
-
* @param options
|
|
30
|
-
* @returns `AuthenticationResult` for the response that was loaded.
|
|
31
|
-
*/
|
|
32
|
-
loadExternalTokens(request, response, options) {
|
|
33
|
-
if (!this.isBrowserEnvironment) {
|
|
34
|
-
throw createBrowserAuthError(nonBrowserEnvironment);
|
|
35
|
-
}
|
|
36
|
-
const idTokenClaims = response.id_token
|
|
37
|
-
? AuthToken.extractTokenClaims(response.id_token, base64Decode)
|
|
38
|
-
: undefined;
|
|
39
|
-
const authorityOptions = {
|
|
40
|
-
protocolMode: this.config.auth.protocolMode,
|
|
41
|
-
knownAuthorities: this.config.auth.knownAuthorities,
|
|
42
|
-
cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,
|
|
43
|
-
authorityMetadata: this.config.auth.authorityMetadata,
|
|
44
|
-
skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,
|
|
45
|
-
};
|
|
46
|
-
const authority = request.authority
|
|
47
|
-
? new Authority(Authority.generateAuthority(request.authority, request.azureCloudOptions), this.config.system.networkClient, this.storage, authorityOptions, this.logger, request.correlationId || createNewGuid())
|
|
48
|
-
: undefined;
|
|
49
|
-
const cacheRecordAccount = this.loadAccount(request, options.clientInfo || response.client_info || "", idTokenClaims, authority);
|
|
50
|
-
const idToken = this.loadIdToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm);
|
|
51
|
-
const accessToken = this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, options);
|
|
52
|
-
const refreshToken = this.loadRefreshToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment);
|
|
53
|
-
return this.generateAuthenticationResult(request, {
|
|
54
|
-
account: cacheRecordAccount,
|
|
55
|
-
idToken,
|
|
56
|
-
accessToken,
|
|
57
|
-
refreshToken,
|
|
58
|
-
}, idTokenClaims, authority);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Helper function to load account to msal-browser cache
|
|
62
|
-
* @param idToken
|
|
63
|
-
* @param environment
|
|
64
|
-
* @param clientInfo
|
|
65
|
-
* @param authorityType
|
|
66
|
-
* @param requestHomeAccountId
|
|
67
|
-
* @returns `AccountEntity`
|
|
68
|
-
*/
|
|
69
|
-
loadAccount(request, clientInfo, idTokenClaims, authority) {
|
|
70
|
-
this.logger.verbose("TokenCache - loading account");
|
|
71
|
-
if (request.account) {
|
|
72
|
-
const accountEntity = AccountEntity.createFromAccountInfo(request.account);
|
|
73
|
-
this.storage.setAccount(accountEntity);
|
|
74
|
-
return accountEntity;
|
|
75
|
-
}
|
|
76
|
-
else if (!authority || (!clientInfo && !idTokenClaims)) {
|
|
77
|
-
this.logger.error("TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead.");
|
|
78
|
-
throw createBrowserAuthError(unableToLoadToken);
|
|
79
|
-
}
|
|
80
|
-
const homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims);
|
|
81
|
-
const claimsTenantId = idTokenClaims?.tid;
|
|
82
|
-
const cachedAccount = buildAccountToCache(this.storage, authority, homeAccountId, base64Decode, idTokenClaims, clientInfo, authority.hostnameAndPort, claimsTenantId, undefined, // authCodePayload
|
|
83
|
-
undefined, // nativeAccountId
|
|
84
|
-
this.logger);
|
|
85
|
-
this.storage.setAccount(cachedAccount);
|
|
86
|
-
return cachedAccount;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Helper function to load id tokens to msal-browser cache
|
|
90
|
-
* @param idToken
|
|
91
|
-
* @param homeAccountId
|
|
92
|
-
* @param environment
|
|
93
|
-
* @param tenantId
|
|
94
|
-
* @returns `IdTokenEntity`
|
|
95
|
-
*/
|
|
96
|
-
loadIdToken(response, homeAccountId, environment, tenantId) {
|
|
97
|
-
if (!response.id_token) {
|
|
98
|
-
this.logger.verbose("TokenCache - no id token found in response");
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
this.logger.verbose("TokenCache - loading id token");
|
|
102
|
-
const idTokenEntity = CacheHelpers.createIdTokenEntity(homeAccountId, environment, response.id_token, this.config.auth.clientId, tenantId);
|
|
103
|
-
this.storage.setIdTokenCredential(idTokenEntity);
|
|
104
|
-
return idTokenEntity;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Helper function to load access tokens to msal-browser cache
|
|
108
|
-
* @param request
|
|
109
|
-
* @param response
|
|
110
|
-
* @param homeAccountId
|
|
111
|
-
* @param environment
|
|
112
|
-
* @param tenantId
|
|
113
|
-
* @returns `AccessTokenEntity`
|
|
114
|
-
*/
|
|
115
|
-
loadAccessToken(request, response, homeAccountId, environment, tenantId, options) {
|
|
116
|
-
if (!response.access_token) {
|
|
117
|
-
this.logger.verbose("TokenCache - no access token found in response");
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
else if (!response.expires_in) {
|
|
121
|
-
this.logger.error("TokenCache - no expiration set on the access token. Cannot add it to the cache.");
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
else if (!response.scope &&
|
|
125
|
-
(!request.scopes || !request.scopes.length)) {
|
|
126
|
-
this.logger.error("TokenCache - scopes not specified in the request or response. Cannot add token to the cache.");
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
this.logger.verbose("TokenCache - loading access token");
|
|
130
|
-
const scopes = response.scope
|
|
131
|
-
? ScopeSet.fromString(response.scope)
|
|
132
|
-
: new ScopeSet(request.scopes);
|
|
133
|
-
const expiresOn = options.expiresOn ||
|
|
134
|
-
response.expires_in + new Date().getTime() / 1000;
|
|
135
|
-
const extendedExpiresOn = options.extendedExpiresOn ||
|
|
136
|
-
(response.ext_expires_in || response.expires_in) +
|
|
137
|
-
new Date().getTime() / 1000;
|
|
138
|
-
const accessTokenEntity = CacheHelpers.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes.printScopes(), expiresOn, extendedExpiresOn, base64Decode);
|
|
139
|
-
this.storage.setAccessTokenCredential(accessTokenEntity);
|
|
140
|
-
return accessTokenEntity;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Helper function to load refresh tokens to msal-browser cache
|
|
144
|
-
* @param request
|
|
145
|
-
* @param response
|
|
146
|
-
* @param homeAccountId
|
|
147
|
-
* @param environment
|
|
148
|
-
* @returns `RefreshTokenEntity`
|
|
149
|
-
*/
|
|
150
|
-
loadRefreshToken(response, homeAccountId, environment) {
|
|
151
|
-
if (!response.refresh_token) {
|
|
152
|
-
this.logger.verbose("TokenCache - no refresh token found in response");
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
this.logger.verbose("TokenCache - loading refresh token");
|
|
156
|
-
const refreshTokenEntity = CacheHelpers.createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId, response.foci, undefined, // userAssertionHash
|
|
157
|
-
response.refresh_token_expires_in);
|
|
158
|
-
this.storage.setRefreshTokenCredential(refreshTokenEntity);
|
|
159
|
-
return refreshTokenEntity;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Helper function to generate an `AuthenticationResult` for the result.
|
|
163
|
-
* @param request
|
|
164
|
-
* @param idTokenObj
|
|
165
|
-
* @param cacheRecord
|
|
166
|
-
* @param authority
|
|
167
|
-
* @returns `AuthenticationResult`
|
|
168
|
-
*/
|
|
169
|
-
generateAuthenticationResult(request, cacheRecord, idTokenClaims, authority) {
|
|
170
|
-
let accessToken = "";
|
|
171
|
-
let responseScopes = [];
|
|
172
|
-
let expiresOn = null;
|
|
173
|
-
let extExpiresOn;
|
|
174
|
-
if (cacheRecord?.accessToken) {
|
|
175
|
-
accessToken = cacheRecord.accessToken.secret;
|
|
176
|
-
responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();
|
|
177
|
-
expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);
|
|
178
|
-
extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);
|
|
179
|
-
}
|
|
180
|
-
const accountEntity = cacheRecord.account;
|
|
181
|
-
return {
|
|
182
|
-
authority: authority ? authority.canonicalAuthority : "",
|
|
183
|
-
uniqueId: cacheRecord.account.localAccountId,
|
|
184
|
-
tenantId: cacheRecord.account.realm,
|
|
185
|
-
scopes: responseScopes,
|
|
186
|
-
account: accountEntity.getAccountInfo(),
|
|
187
|
-
idToken: cacheRecord.idToken?.secret || "",
|
|
188
|
-
idTokenClaims: idTokenClaims || {},
|
|
189
|
-
accessToken: accessToken,
|
|
190
|
-
fromCache: true,
|
|
191
|
-
expiresOn: expiresOn,
|
|
192
|
-
correlationId: request.correlationId || "",
|
|
193
|
-
requestId: "",
|
|
194
|
-
extExpiresOn: extExpiresOn,
|
|
195
|
-
familyId: cacheRecord.refreshToken?.familyId || "",
|
|
196
|
-
tokenType: cacheRecord?.accessToken?.tokenType || "",
|
|
197
|
-
state: request.state || "",
|
|
198
|
-
cloudGraphHostName: accountEntity.cloudGraphHostName || "",
|
|
199
|
-
msGraphHost: accountEntity.msGraphHost || "",
|
|
200
|
-
fromNativeBroker: false,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
9
|
+
/*
|
|
10
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
11
|
+
* Licensed under the MIT License.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Token cache manager
|
|
15
|
+
*/
|
|
16
|
+
class TokenCache {
|
|
17
|
+
constructor(configuration, storage, logger, cryptoObj) {
|
|
18
|
+
this.isBrowserEnvironment = typeof window !== "undefined";
|
|
19
|
+
this.config = configuration;
|
|
20
|
+
this.storage = storage;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
this.cryptoObj = cryptoObj;
|
|
23
|
+
}
|
|
24
|
+
// Move getAllAccounts here and cache utility APIs
|
|
25
|
+
/**
|
|
26
|
+
* API to load tokens to msal-browser cache.
|
|
27
|
+
* @param request
|
|
28
|
+
* @param response
|
|
29
|
+
* @param options
|
|
30
|
+
* @returns `AuthenticationResult` for the response that was loaded.
|
|
31
|
+
*/
|
|
32
|
+
loadExternalTokens(request, response, options) {
|
|
33
|
+
if (!this.isBrowserEnvironment) {
|
|
34
|
+
throw createBrowserAuthError(nonBrowserEnvironment);
|
|
35
|
+
}
|
|
36
|
+
const idTokenClaims = response.id_token
|
|
37
|
+
? AuthToken.extractTokenClaims(response.id_token, base64Decode)
|
|
38
|
+
: undefined;
|
|
39
|
+
const authorityOptions = {
|
|
40
|
+
protocolMode: this.config.auth.protocolMode,
|
|
41
|
+
knownAuthorities: this.config.auth.knownAuthorities,
|
|
42
|
+
cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,
|
|
43
|
+
authorityMetadata: this.config.auth.authorityMetadata,
|
|
44
|
+
skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,
|
|
45
|
+
};
|
|
46
|
+
const authority = request.authority
|
|
47
|
+
? new Authority(Authority.generateAuthority(request.authority, request.azureCloudOptions), this.config.system.networkClient, this.storage, authorityOptions, this.logger, request.correlationId || createNewGuid())
|
|
48
|
+
: undefined;
|
|
49
|
+
const cacheRecordAccount = this.loadAccount(request, options.clientInfo || response.client_info || "", idTokenClaims, authority);
|
|
50
|
+
const idToken = this.loadIdToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm);
|
|
51
|
+
const accessToken = this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, options);
|
|
52
|
+
const refreshToken = this.loadRefreshToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment);
|
|
53
|
+
return this.generateAuthenticationResult(request, {
|
|
54
|
+
account: cacheRecordAccount,
|
|
55
|
+
idToken,
|
|
56
|
+
accessToken,
|
|
57
|
+
refreshToken,
|
|
58
|
+
}, idTokenClaims, authority);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Helper function to load account to msal-browser cache
|
|
62
|
+
* @param idToken
|
|
63
|
+
* @param environment
|
|
64
|
+
* @param clientInfo
|
|
65
|
+
* @param authorityType
|
|
66
|
+
* @param requestHomeAccountId
|
|
67
|
+
* @returns `AccountEntity`
|
|
68
|
+
*/
|
|
69
|
+
loadAccount(request, clientInfo, idTokenClaims, authority) {
|
|
70
|
+
this.logger.verbose("TokenCache - loading account");
|
|
71
|
+
if (request.account) {
|
|
72
|
+
const accountEntity = AccountEntity.createFromAccountInfo(request.account);
|
|
73
|
+
this.storage.setAccount(accountEntity);
|
|
74
|
+
return accountEntity;
|
|
75
|
+
}
|
|
76
|
+
else if (!authority || (!clientInfo && !idTokenClaims)) {
|
|
77
|
+
this.logger.error("TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead.");
|
|
78
|
+
throw createBrowserAuthError(unableToLoadToken);
|
|
79
|
+
}
|
|
80
|
+
const homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims);
|
|
81
|
+
const claimsTenantId = idTokenClaims?.tid;
|
|
82
|
+
const cachedAccount = buildAccountToCache(this.storage, authority, homeAccountId, base64Decode, idTokenClaims, clientInfo, authority.hostnameAndPort, claimsTenantId, undefined, // authCodePayload
|
|
83
|
+
undefined, // nativeAccountId
|
|
84
|
+
this.logger);
|
|
85
|
+
this.storage.setAccount(cachedAccount);
|
|
86
|
+
return cachedAccount;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Helper function to load id tokens to msal-browser cache
|
|
90
|
+
* @param idToken
|
|
91
|
+
* @param homeAccountId
|
|
92
|
+
* @param environment
|
|
93
|
+
* @param tenantId
|
|
94
|
+
* @returns `IdTokenEntity`
|
|
95
|
+
*/
|
|
96
|
+
loadIdToken(response, homeAccountId, environment, tenantId) {
|
|
97
|
+
if (!response.id_token) {
|
|
98
|
+
this.logger.verbose("TokenCache - no id token found in response");
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
this.logger.verbose("TokenCache - loading id token");
|
|
102
|
+
const idTokenEntity = CacheHelpers.createIdTokenEntity(homeAccountId, environment, response.id_token, this.config.auth.clientId, tenantId);
|
|
103
|
+
this.storage.setIdTokenCredential(idTokenEntity);
|
|
104
|
+
return idTokenEntity;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Helper function to load access tokens to msal-browser cache
|
|
108
|
+
* @param request
|
|
109
|
+
* @param response
|
|
110
|
+
* @param homeAccountId
|
|
111
|
+
* @param environment
|
|
112
|
+
* @param tenantId
|
|
113
|
+
* @returns `AccessTokenEntity`
|
|
114
|
+
*/
|
|
115
|
+
loadAccessToken(request, response, homeAccountId, environment, tenantId, options) {
|
|
116
|
+
if (!response.access_token) {
|
|
117
|
+
this.logger.verbose("TokenCache - no access token found in response");
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
else if (!response.expires_in) {
|
|
121
|
+
this.logger.error("TokenCache - no expiration set on the access token. Cannot add it to the cache.");
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
else if (!response.scope &&
|
|
125
|
+
(!request.scopes || !request.scopes.length)) {
|
|
126
|
+
this.logger.error("TokenCache - scopes not specified in the request or response. Cannot add token to the cache.");
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
this.logger.verbose("TokenCache - loading access token");
|
|
130
|
+
const scopes = response.scope
|
|
131
|
+
? ScopeSet.fromString(response.scope)
|
|
132
|
+
: new ScopeSet(request.scopes);
|
|
133
|
+
const expiresOn = options.expiresOn ||
|
|
134
|
+
response.expires_in + new Date().getTime() / 1000;
|
|
135
|
+
const extendedExpiresOn = options.extendedExpiresOn ||
|
|
136
|
+
(response.ext_expires_in || response.expires_in) +
|
|
137
|
+
new Date().getTime() / 1000;
|
|
138
|
+
const accessTokenEntity = CacheHelpers.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes.printScopes(), expiresOn, extendedExpiresOn, base64Decode);
|
|
139
|
+
this.storage.setAccessTokenCredential(accessTokenEntity);
|
|
140
|
+
return accessTokenEntity;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Helper function to load refresh tokens to msal-browser cache
|
|
144
|
+
* @param request
|
|
145
|
+
* @param response
|
|
146
|
+
* @param homeAccountId
|
|
147
|
+
* @param environment
|
|
148
|
+
* @returns `RefreshTokenEntity`
|
|
149
|
+
*/
|
|
150
|
+
loadRefreshToken(response, homeAccountId, environment) {
|
|
151
|
+
if (!response.refresh_token) {
|
|
152
|
+
this.logger.verbose("TokenCache - no refresh token found in response");
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
this.logger.verbose("TokenCache - loading refresh token");
|
|
156
|
+
const refreshTokenEntity = CacheHelpers.createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId, response.foci, undefined, // userAssertionHash
|
|
157
|
+
response.refresh_token_expires_in);
|
|
158
|
+
this.storage.setRefreshTokenCredential(refreshTokenEntity);
|
|
159
|
+
return refreshTokenEntity;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Helper function to generate an `AuthenticationResult` for the result.
|
|
163
|
+
* @param request
|
|
164
|
+
* @param idTokenObj
|
|
165
|
+
* @param cacheRecord
|
|
166
|
+
* @param authority
|
|
167
|
+
* @returns `AuthenticationResult`
|
|
168
|
+
*/
|
|
169
|
+
generateAuthenticationResult(request, cacheRecord, idTokenClaims, authority) {
|
|
170
|
+
let accessToken = "";
|
|
171
|
+
let responseScopes = [];
|
|
172
|
+
let expiresOn = null;
|
|
173
|
+
let extExpiresOn;
|
|
174
|
+
if (cacheRecord?.accessToken) {
|
|
175
|
+
accessToken = cacheRecord.accessToken.secret;
|
|
176
|
+
responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();
|
|
177
|
+
expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);
|
|
178
|
+
extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);
|
|
179
|
+
}
|
|
180
|
+
const accountEntity = cacheRecord.account;
|
|
181
|
+
return {
|
|
182
|
+
authority: authority ? authority.canonicalAuthority : "",
|
|
183
|
+
uniqueId: cacheRecord.account.localAccountId,
|
|
184
|
+
tenantId: cacheRecord.account.realm,
|
|
185
|
+
scopes: responseScopes,
|
|
186
|
+
account: accountEntity.getAccountInfo(),
|
|
187
|
+
idToken: cacheRecord.idToken?.secret || "",
|
|
188
|
+
idTokenClaims: idTokenClaims || {},
|
|
189
|
+
accessToken: accessToken,
|
|
190
|
+
fromCache: true,
|
|
191
|
+
expiresOn: expiresOn,
|
|
192
|
+
correlationId: request.correlationId || "",
|
|
193
|
+
requestId: "",
|
|
194
|
+
extExpiresOn: extExpiresOn,
|
|
195
|
+
familyId: cacheRecord.refreshToken?.familyId || "",
|
|
196
|
+
tokenType: cacheRecord?.accessToken?.tokenType || "",
|
|
197
|
+
state: request.state || "",
|
|
198
|
+
cloudGraphHostName: accountEntity.cloudGraphHostName || "",
|
|
199
|
+
msGraphHost: accountEntity.msGraphHost || "",
|
|
200
|
+
fromNativeBroker: false,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
export { TokenCache };
|