@azure/msal-browser 3.0.0-alpha.1 → 3.0.0-alpha.2
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/LICENSE +21 -21
- package/README.md +213 -213
- package/dist/app/IPublicClientApplication.d.ts +45 -45
- package/dist/app/IPublicClientApplication.js +96 -96
- package/dist/app/PublicClientApplication.d.ts +244 -244
- package/dist/app/PublicClientApplication.js +307 -307
- package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +63 -63
- package/dist/broker/nativeBroker/NativeMessageHandler.js +255 -255
- package/dist/broker/nativeBroker/NativeRequest.d.ts +43 -43
- package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
- package/dist/cache/AsyncMemoryStorage.d.ts +51 -51
- package/dist/cache/AsyncMemoryStorage.js +132 -132
- package/dist/cache/BrowserCacheManager.d.ts +377 -377
- package/dist/cache/BrowserCacheManager.js +1276 -1276
- package/dist/cache/BrowserStorage.d.ts +11 -11
- package/dist/cache/BrowserStorage.js +35 -35
- package/dist/cache/CryptoKeyStore.d.ts +17 -17
- package/dist/cache/CryptoKeyStore.js +41 -41
- package/dist/cache/DatabaseStorage.d.ts +56 -56
- package/dist/cache/DatabaseStorage.js +190 -190
- package/dist/cache/IAsyncMemoryStorage.d.ts +27 -27
- package/dist/cache/ITokenCache.d.ts +10 -10
- package/dist/cache/IWindowStorage.d.ts +27 -27
- package/dist/cache/MemoryStorage.d.ts +11 -11
- package/dist/cache/MemoryStorage.js +31 -31
- package/dist/cache/TokenCache.d.ts +76 -76
- package/dist/cache/TokenCache.js +225 -225
- package/dist/config/Configuration.d.ts +203 -203
- package/dist/config/Configuration.js +101 -101
- package/dist/controllers/ControllerFactory.d.ts +9 -9
- package/dist/controllers/ControllerFactory.js +37 -37
- package/dist/controllers/IController.d.ts +66 -66
- package/dist/controllers/StandardController.d.ts +413 -413
- package/dist/controllers/StandardController.js +1272 -1272
- package/dist/crypto/BrowserCrypto.d.ts +61 -61
- package/dist/crypto/BrowserCrypto.js +131 -131
- package/dist/crypto/CryptoOps.d.ts +73 -73
- package/dist/crypto/CryptoOps.js +150 -150
- package/dist/crypto/GuidGenerator.d.ts +12 -12
- package/dist/crypto/GuidGenerator.js +96 -96
- package/dist/crypto/ISubtleCrypto.d.ts +9 -9
- package/dist/crypto/ModernBrowserCrypto.d.ts +9 -9
- package/dist/crypto/ModernBrowserCrypto.js +24 -24
- package/dist/crypto/MsBrowserCrypto.d.ts +9 -9
- package/dist/crypto/MsBrowserCrypto.js +79 -79
- package/dist/crypto/MsrBrowserCrypto.d.ts +17 -17
- package/dist/crypto/MsrBrowserCrypto.js +28 -28
- package/dist/crypto/PkceGenerator.d.ts +24 -24
- package/dist/crypto/PkceGenerator.js +58 -58
- package/dist/crypto/SignedHttpRequest.d.ts +30 -30
- package/dist/crypto/SignedHttpRequest.js +39 -39
- package/dist/encode/Base64Decode.d.ts +22 -22
- package/dist/encode/Base64Decode.js +73 -73
- package/dist/encode/Base64Encode.d.ts +31 -31
- package/dist/encode/Base64Encode.js +79 -79
- package/dist/error/BrowserAuthError.d.ts +382 -382
- package/dist/error/BrowserAuthError.js +483 -483
- package/dist/error/BrowserConfigurationAuthError.d.ts +70 -70
- package/dist/error/BrowserConfigurationAuthError.js +96 -96
- package/dist/error/NativeAuthError.d.ts +56 -56
- package/dist/error/NativeAuthError.js +88 -88
- package/dist/event/EventHandler.d.ts +41 -41
- package/dist/event/EventHandler.js +119 -119
- package/dist/event/EventMessage.d.ts +25 -25
- package/dist/event/EventMessage.js +67 -67
- package/dist/event/EventType.d.ts +26 -26
- package/dist/event/EventType.js +31 -31
- package/dist/index.d.ts +35 -35
- package/dist/index.js +1 -1
- package/dist/interaction_client/BaseInteractionClient.d.ts +52 -52
- package/dist/interaction_client/BaseInteractionClient.js +138 -138
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.js +10 -10
- package/dist/interaction_client/NativeInteractionClient.d.ts +148 -148
- package/dist/interaction_client/NativeInteractionClient.js +516 -516
- package/dist/interaction_client/PopupClient.d.ts +111 -111
- package/dist/interaction_client/PopupClient.js +476 -476
- package/dist/interaction_client/RedirectClient.d.ts +48 -48
- package/dist/interaction_client/RedirectClient.js +290 -290
- package/dist/interaction_client/SilentAuthCodeClient.d.ts +22 -22
- package/dist/interaction_client/SilentAuthCodeClient.js +62 -62
- package/dist/interaction_client/SilentCacheClient.d.ts +21 -21
- package/dist/interaction_client/SilentCacheClient.js +67 -67
- package/dist/interaction_client/SilentIframeClient.d.ts +31 -31
- package/dist/interaction_client/SilentIframeClient.js +127 -127
- package/dist/interaction_client/SilentRefreshClient.d.ts +19 -19
- package/dist/interaction_client/SilentRefreshClient.js +62 -62
- package/dist/interaction_client/StandardInteractionClient.d.ts +59 -59
- package/dist/interaction_client/StandardInteractionClient.js +259 -259
- package/dist/interaction_handler/InteractionHandler.d.ts +39 -39
- package/dist/interaction_handler/InteractionHandler.js +127 -127
- package/dist/interaction_handler/RedirectHandler.d.ts +24 -24
- package/dist/interaction_handler/RedirectHandler.js +118 -118
- package/dist/interaction_handler/SilentHandler.d.ts +47 -47
- package/dist/interaction_handler/SilentHandler.js +162 -162
- package/dist/internals.d.ts +23 -23
- package/dist/internals.js +4 -4
- package/dist/navigation/INavigationClient.d.ts +16 -16
- package/dist/navigation/NavigationClient.d.ts +22 -22
- package/dist/navigation/NavigationClient.js +40 -40
- package/dist/navigation/NavigationOptions.d.ts +12 -12
- package/dist/network/FetchClient.d.ts +26 -26
- package/dist/network/FetchClient.js +99 -99
- package/dist/network/XhrClient.d.ts +40 -40
- package/dist/network/XhrClient.js +117 -117
- package/dist/operatingcontext/BaseOperatingContext.d.ts +40 -40
- package/dist/operatingcontext/BaseOperatingContext.js +44 -44
- package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
- package/dist/operatingcontext/StandardOperatingContext.js +43 -43
- package/dist/operatingcontext/TeamsAppOperatingContext.d.ts +25 -25
- package/dist/operatingcontext/TeamsAppOperatingContext.js +42 -42
- package/dist/packageMetadata.d.ts +2 -2
- package/dist/packageMetadata.js +4 -4
- package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
- package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
- package/dist/request/EndSessionPopupRequest.d.ts +18 -18
- package/dist/request/EndSessionRequest.d.ts +15 -15
- package/dist/request/PopupRequest.d.ts +32 -32
- package/dist/request/PopupWindowAttributes.d.ts +15 -15
- package/dist/request/RedirectRequest.d.ts +33 -33
- package/dist/request/SilentRequest.d.ts +30 -30
- package/dist/request/SsoSilentRequest.d.ts +26 -26
- package/dist/telemetry/BrowserPerformanceClient.d.ts +38 -38
- package/dist/telemetry/BrowserPerformanceClient.js +124 -124
- package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
- package/dist/telemetry/BrowserPerformanceMeasurement.js +92 -92
- package/dist/utils/BrowserConstants.d.ts +166 -166
- package/dist/utils/BrowserConstants.js +214 -214
- package/dist/utils/BrowserProtocolUtils.d.ts +18 -18
- package/dist/utils/BrowserProtocolUtils.js +34 -34
- package/dist/utils/BrowserStringUtils.d.ts +26 -26
- package/dist/utils/BrowserStringUtils.js +149 -149
- package/dist/utils/BrowserUtils.d.ts +65 -65
- package/dist/utils/BrowserUtils.js +138 -138
- package/dist/utils/MathUtils.d.ts +11 -11
- package/dist/utils/MathUtils.js +21 -21
- package/lib/msal-browser.cjs.js +18383 -0
- package/lib/msal-browser.cjs.js.map +1 -0
- package/lib/msal-browser.js +18389 -0
- package/lib/msal-browser.js.map +1 -0
- package/lib/msal-browser.min.js +74 -0
- package/package.json +97 -95
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
import { Logger } from "@azure/msal-common";
|
|
2
|
-
import { CryptoOptions } from "../config/Configuration";
|
|
3
|
-
/**
|
|
4
|
-
* This class implements functions used by the browser library to perform cryptography operations such as
|
|
5
|
-
* hashing and encoding. It also has helper functions to validate the availability of specific APIs.
|
|
6
|
-
*/
|
|
7
|
-
export declare class BrowserCrypto {
|
|
8
|
-
private keygenAlgorithmOptions;
|
|
9
|
-
private subtleCrypto;
|
|
10
|
-
private logger;
|
|
11
|
-
private cryptoOptions?;
|
|
12
|
-
constructor(logger: Logger, cryptoOptions?: CryptoOptions);
|
|
13
|
-
/**
|
|
14
|
-
* Check whether IE crypto or other browser cryptography is available.
|
|
15
|
-
*/
|
|
16
|
-
private hasIECrypto;
|
|
17
|
-
/**
|
|
18
|
-
* Check whether browser crypto is available.
|
|
19
|
-
*/
|
|
20
|
-
private hasBrowserCrypto;
|
|
21
|
-
/**
|
|
22
|
-
* Check whether MSR crypto polyfill is available
|
|
23
|
-
*/
|
|
24
|
-
private hasMsrCrypto;
|
|
25
|
-
/**
|
|
26
|
-
* Returns a sha-256 hash of the given dataString as an ArrayBuffer.
|
|
27
|
-
* @param dataString
|
|
28
|
-
*/
|
|
29
|
-
sha256Digest(dataString: string): Promise<ArrayBuffer>;
|
|
30
|
-
/**
|
|
31
|
-
* Populates buffer with cryptographically random values.
|
|
32
|
-
* @param dataBuffer
|
|
33
|
-
*/
|
|
34
|
-
getRandomValues(dataBuffer: Uint8Array): Uint8Array;
|
|
35
|
-
/**
|
|
36
|
-
* Generates a keypair based on current keygen algorithm config.
|
|
37
|
-
* @param extractable
|
|
38
|
-
* @param usages
|
|
39
|
-
*/
|
|
40
|
-
generateKeyPair(extractable: boolean, usages: Array<KeyUsage>): Promise<CryptoKeyPair>;
|
|
41
|
-
/**
|
|
42
|
-
* Export key as Json Web Key (JWK)
|
|
43
|
-
* @param key
|
|
44
|
-
* @param format
|
|
45
|
-
*/
|
|
46
|
-
exportJwk(key: CryptoKey): Promise<JsonWebKey>;
|
|
47
|
-
/**
|
|
48
|
-
* Imports key as Json Web Key (JWK), can set extractable and usages.
|
|
49
|
-
* @param key
|
|
50
|
-
* @param format
|
|
51
|
-
* @param extractable
|
|
52
|
-
* @param usages
|
|
53
|
-
*/
|
|
54
|
-
importJwk(key: JsonWebKey, extractable: boolean, usages: Array<KeyUsage>): Promise<CryptoKey>;
|
|
55
|
-
/**
|
|
56
|
-
* Signs given data with given key
|
|
57
|
-
* @param key
|
|
58
|
-
* @param data
|
|
59
|
-
*/
|
|
60
|
-
sign(key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
|
|
61
|
-
}
|
|
1
|
+
import { Logger } from "@azure/msal-common";
|
|
2
|
+
import { CryptoOptions } from "../config/Configuration";
|
|
3
|
+
/**
|
|
4
|
+
* This class implements functions used by the browser library to perform cryptography operations such as
|
|
5
|
+
* hashing and encoding. It also has helper functions to validate the availability of specific APIs.
|
|
6
|
+
*/
|
|
7
|
+
export declare class BrowserCrypto {
|
|
8
|
+
private keygenAlgorithmOptions;
|
|
9
|
+
private subtleCrypto;
|
|
10
|
+
private logger;
|
|
11
|
+
private cryptoOptions?;
|
|
12
|
+
constructor(logger: Logger, cryptoOptions?: CryptoOptions);
|
|
13
|
+
/**
|
|
14
|
+
* Check whether IE crypto or other browser cryptography is available.
|
|
15
|
+
*/
|
|
16
|
+
private hasIECrypto;
|
|
17
|
+
/**
|
|
18
|
+
* Check whether browser crypto is available.
|
|
19
|
+
*/
|
|
20
|
+
private hasBrowserCrypto;
|
|
21
|
+
/**
|
|
22
|
+
* Check whether MSR crypto polyfill is available
|
|
23
|
+
*/
|
|
24
|
+
private hasMsrCrypto;
|
|
25
|
+
/**
|
|
26
|
+
* Returns a sha-256 hash of the given dataString as an ArrayBuffer.
|
|
27
|
+
* @param dataString
|
|
28
|
+
*/
|
|
29
|
+
sha256Digest(dataString: string): Promise<ArrayBuffer>;
|
|
30
|
+
/**
|
|
31
|
+
* Populates buffer with cryptographically random values.
|
|
32
|
+
* @param dataBuffer
|
|
33
|
+
*/
|
|
34
|
+
getRandomValues(dataBuffer: Uint8Array): Uint8Array;
|
|
35
|
+
/**
|
|
36
|
+
* Generates a keypair based on current keygen algorithm config.
|
|
37
|
+
* @param extractable
|
|
38
|
+
* @param usages
|
|
39
|
+
*/
|
|
40
|
+
generateKeyPair(extractable: boolean, usages: Array<KeyUsage>): Promise<CryptoKeyPair>;
|
|
41
|
+
/**
|
|
42
|
+
* Export key as Json Web Key (JWK)
|
|
43
|
+
* @param key
|
|
44
|
+
* @param format
|
|
45
|
+
*/
|
|
46
|
+
exportJwk(key: CryptoKey): Promise<JsonWebKey>;
|
|
47
|
+
/**
|
|
48
|
+
* Imports key as Json Web Key (JWK), can set extractable and usages.
|
|
49
|
+
* @param key
|
|
50
|
+
* @param format
|
|
51
|
+
* @param extractable
|
|
52
|
+
* @param usages
|
|
53
|
+
*/
|
|
54
|
+
importJwk(key: JsonWebKey, extractable: boolean, usages: Array<KeyUsage>): Promise<CryptoKey>;
|
|
55
|
+
/**
|
|
56
|
+
* Signs given data with given key
|
|
57
|
+
* @param key
|
|
58
|
+
* @param data
|
|
59
|
+
*/
|
|
60
|
+
sign(key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
|
|
61
|
+
}
|
|
62
62
|
//# sourceMappingURL=BrowserCrypto.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @azure/msal-browser v3.0.0-alpha.
|
|
1
|
+
/*! @azure/msal-browser v3.0.0-alpha.2 2023-05-17 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { BrowserStringUtils } from '../utils/BrowserStringUtils.js';
|
|
4
4
|
import { BrowserAuthError } from '../error/BrowserAuthError.js';
|
|
@@ -7,136 +7,136 @@ import { MsrBrowserCrypto } from './MsrBrowserCrypto.js';
|
|
|
7
7
|
import { MsBrowserCrypto } from './MsBrowserCrypto.js';
|
|
8
8
|
import { BrowserConfigurationAuthError } from '../error/BrowserConfigurationAuthError.js';
|
|
9
9
|
|
|
10
|
-
/*
|
|
11
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
12
|
-
* Licensed under the MIT License.
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams
|
|
16
|
-
*/
|
|
17
|
-
// RSA KeyGen Algorithm
|
|
18
|
-
const PKCS1_V15_KEYGEN_ALG = "RSASSA-PKCS1-v1_5";
|
|
19
|
-
// SHA-256 hashing algorithm
|
|
20
|
-
const S256_HASH_ALG = "SHA-256";
|
|
21
|
-
// MOD length for PoP tokens
|
|
22
|
-
const MODULUS_LENGTH = 2048;
|
|
23
|
-
// Public Exponent
|
|
24
|
-
const PUBLIC_EXPONENT = new Uint8Array([0x01, 0x00, 0x01]);
|
|
25
|
-
/**
|
|
26
|
-
* This class implements functions used by the browser library to perform cryptography operations such as
|
|
27
|
-
* hashing and encoding. It also has helper functions to validate the availability of specific APIs.
|
|
28
|
-
*/
|
|
29
|
-
class BrowserCrypto {
|
|
30
|
-
constructor(logger, cryptoOptions) {
|
|
31
|
-
this.logger = logger;
|
|
32
|
-
this.cryptoOptions = cryptoOptions;
|
|
33
|
-
if (this.hasBrowserCrypto()) {
|
|
34
|
-
// Use standard modern web crypto if available
|
|
35
|
-
this.logger.verbose("BrowserCrypto: modern crypto interface available");
|
|
36
|
-
this.subtleCrypto = new ModernBrowserCrypto();
|
|
37
|
-
}
|
|
38
|
-
else if (this.hasIECrypto()) {
|
|
39
|
-
// For IE11, use msCrypto interface
|
|
40
|
-
this.logger.verbose("BrowserCrypto: MS crypto interface available");
|
|
41
|
-
this.subtleCrypto = new MsBrowserCrypto();
|
|
42
|
-
}
|
|
43
|
-
else if (this.hasMsrCrypto() && this.cryptoOptions?.useMsrCrypto) {
|
|
44
|
-
// For other browsers, use MSR Crypto if found
|
|
45
|
-
this.logger.verbose("BrowserCrypto: MSR crypto interface available");
|
|
46
|
-
this.subtleCrypto = new MsrBrowserCrypto();
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
if (this.hasMsrCrypto()) {
|
|
50
|
-
this.logger.info("BrowserCrypto: MSR Crypto interface available but system.cryptoOptions.useMsrCrypto not enabled");
|
|
51
|
-
}
|
|
52
|
-
this.logger.error("BrowserCrypto: No crypto interfaces available.");
|
|
53
|
-
throw BrowserAuthError.createCryptoNotAvailableError("Browser crypto, msCrypto, or msrCrypto interfaces not available.");
|
|
54
|
-
}
|
|
55
|
-
// Mainly needed for MSR Crypto: https://github.com/microsoft/MSR-JavaScript-Crypto#random-number-generator-prng
|
|
56
|
-
if (this.subtleCrypto.initPrng) {
|
|
57
|
-
this.logger.verbose("BrowserCrypto: Interface requires entropy");
|
|
58
|
-
if (!this.cryptoOptions?.entropy) {
|
|
59
|
-
this.logger.error("BrowserCrypto: Interface requires entropy but none provided.");
|
|
60
|
-
throw BrowserConfigurationAuthError.createEntropyNotProvided();
|
|
61
|
-
}
|
|
62
|
-
this.logger.verbose("BrowserCrypto: Entropy provided");
|
|
63
|
-
this.subtleCrypto.initPrng(this.cryptoOptions.entropy);
|
|
64
|
-
}
|
|
65
|
-
this.keygenAlgorithmOptions = {
|
|
66
|
-
name: PKCS1_V15_KEYGEN_ALG,
|
|
67
|
-
hash: S256_HASH_ALG,
|
|
68
|
-
modulusLength: MODULUS_LENGTH,
|
|
69
|
-
publicExponent: PUBLIC_EXPONENT,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Check whether IE crypto or other browser cryptography is available.
|
|
74
|
-
*/
|
|
75
|
-
hasIECrypto() {
|
|
76
|
-
return "msCrypto" in window;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Check whether browser crypto is available.
|
|
80
|
-
*/
|
|
81
|
-
hasBrowserCrypto() {
|
|
82
|
-
return "crypto" in window;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Check whether MSR crypto polyfill is available
|
|
86
|
-
*/
|
|
87
|
-
hasMsrCrypto() {
|
|
88
|
-
return "msrCrypto" in window;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Returns a sha-256 hash of the given dataString as an ArrayBuffer.
|
|
92
|
-
* @param dataString
|
|
93
|
-
*/
|
|
94
|
-
async sha256Digest(dataString) {
|
|
95
|
-
const data = BrowserStringUtils.stringToUtf8Arr(dataString);
|
|
96
|
-
// MSR Crypto wants object with name property, instead of string
|
|
97
|
-
return this.subtleCrypto.digest({ name: S256_HASH_ALG }, data);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Populates buffer with cryptographically random values.
|
|
101
|
-
* @param dataBuffer
|
|
102
|
-
*/
|
|
103
|
-
getRandomValues(dataBuffer) {
|
|
104
|
-
return this.subtleCrypto.getRandomValues(dataBuffer);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Generates a keypair based on current keygen algorithm config.
|
|
108
|
-
* @param extractable
|
|
109
|
-
* @param usages
|
|
110
|
-
*/
|
|
111
|
-
async generateKeyPair(extractable, usages) {
|
|
112
|
-
return this.subtleCrypto.generateKey(this.keygenAlgorithmOptions, extractable, usages);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Export key as Json Web Key (JWK)
|
|
116
|
-
* @param key
|
|
117
|
-
* @param format
|
|
118
|
-
*/
|
|
119
|
-
async exportJwk(key) {
|
|
120
|
-
return this.subtleCrypto.exportKey(key);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Imports key as Json Web Key (JWK), can set extractable and usages.
|
|
124
|
-
* @param key
|
|
125
|
-
* @param format
|
|
126
|
-
* @param extractable
|
|
127
|
-
* @param usages
|
|
128
|
-
*/
|
|
129
|
-
async importJwk(key, extractable, usages) {
|
|
130
|
-
return this.subtleCrypto.importKey(key, this.keygenAlgorithmOptions, extractable, usages);
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Signs given data with given key
|
|
134
|
-
* @param key
|
|
135
|
-
* @param data
|
|
136
|
-
*/
|
|
137
|
-
async sign(key, data) {
|
|
138
|
-
return this.subtleCrypto.sign(this.keygenAlgorithmOptions, key, data);
|
|
139
|
-
}
|
|
10
|
+
/*
|
|
11
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
12
|
+
* Licensed under the MIT License.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams
|
|
16
|
+
*/
|
|
17
|
+
// RSA KeyGen Algorithm
|
|
18
|
+
const PKCS1_V15_KEYGEN_ALG = "RSASSA-PKCS1-v1_5";
|
|
19
|
+
// SHA-256 hashing algorithm
|
|
20
|
+
const S256_HASH_ALG = "SHA-256";
|
|
21
|
+
// MOD length for PoP tokens
|
|
22
|
+
const MODULUS_LENGTH = 2048;
|
|
23
|
+
// Public Exponent
|
|
24
|
+
const PUBLIC_EXPONENT = new Uint8Array([0x01, 0x00, 0x01]);
|
|
25
|
+
/**
|
|
26
|
+
* This class implements functions used by the browser library to perform cryptography operations such as
|
|
27
|
+
* hashing and encoding. It also has helper functions to validate the availability of specific APIs.
|
|
28
|
+
*/
|
|
29
|
+
class BrowserCrypto {
|
|
30
|
+
constructor(logger, cryptoOptions) {
|
|
31
|
+
this.logger = logger;
|
|
32
|
+
this.cryptoOptions = cryptoOptions;
|
|
33
|
+
if (this.hasBrowserCrypto()) {
|
|
34
|
+
// Use standard modern web crypto if available
|
|
35
|
+
this.logger.verbose("BrowserCrypto: modern crypto interface available");
|
|
36
|
+
this.subtleCrypto = new ModernBrowserCrypto();
|
|
37
|
+
}
|
|
38
|
+
else if (this.hasIECrypto()) {
|
|
39
|
+
// For IE11, use msCrypto interface
|
|
40
|
+
this.logger.verbose("BrowserCrypto: MS crypto interface available");
|
|
41
|
+
this.subtleCrypto = new MsBrowserCrypto();
|
|
42
|
+
}
|
|
43
|
+
else if (this.hasMsrCrypto() && this.cryptoOptions?.useMsrCrypto) {
|
|
44
|
+
// For other browsers, use MSR Crypto if found
|
|
45
|
+
this.logger.verbose("BrowserCrypto: MSR crypto interface available");
|
|
46
|
+
this.subtleCrypto = new MsrBrowserCrypto();
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
if (this.hasMsrCrypto()) {
|
|
50
|
+
this.logger.info("BrowserCrypto: MSR Crypto interface available but system.cryptoOptions.useMsrCrypto not enabled");
|
|
51
|
+
}
|
|
52
|
+
this.logger.error("BrowserCrypto: No crypto interfaces available.");
|
|
53
|
+
throw BrowserAuthError.createCryptoNotAvailableError("Browser crypto, msCrypto, or msrCrypto interfaces not available.");
|
|
54
|
+
}
|
|
55
|
+
// Mainly needed for MSR Crypto: https://github.com/microsoft/MSR-JavaScript-Crypto#random-number-generator-prng
|
|
56
|
+
if (this.subtleCrypto.initPrng) {
|
|
57
|
+
this.logger.verbose("BrowserCrypto: Interface requires entropy");
|
|
58
|
+
if (!this.cryptoOptions?.entropy) {
|
|
59
|
+
this.logger.error("BrowserCrypto: Interface requires entropy but none provided.");
|
|
60
|
+
throw BrowserConfigurationAuthError.createEntropyNotProvided();
|
|
61
|
+
}
|
|
62
|
+
this.logger.verbose("BrowserCrypto: Entropy provided");
|
|
63
|
+
this.subtleCrypto.initPrng(this.cryptoOptions.entropy);
|
|
64
|
+
}
|
|
65
|
+
this.keygenAlgorithmOptions = {
|
|
66
|
+
name: PKCS1_V15_KEYGEN_ALG,
|
|
67
|
+
hash: S256_HASH_ALG,
|
|
68
|
+
modulusLength: MODULUS_LENGTH,
|
|
69
|
+
publicExponent: PUBLIC_EXPONENT,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check whether IE crypto or other browser cryptography is available.
|
|
74
|
+
*/
|
|
75
|
+
hasIECrypto() {
|
|
76
|
+
return "msCrypto" in window;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check whether browser crypto is available.
|
|
80
|
+
*/
|
|
81
|
+
hasBrowserCrypto() {
|
|
82
|
+
return "crypto" in window;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Check whether MSR crypto polyfill is available
|
|
86
|
+
*/
|
|
87
|
+
hasMsrCrypto() {
|
|
88
|
+
return "msrCrypto" in window;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Returns a sha-256 hash of the given dataString as an ArrayBuffer.
|
|
92
|
+
* @param dataString
|
|
93
|
+
*/
|
|
94
|
+
async sha256Digest(dataString) {
|
|
95
|
+
const data = BrowserStringUtils.stringToUtf8Arr(dataString);
|
|
96
|
+
// MSR Crypto wants object with name property, instead of string
|
|
97
|
+
return this.subtleCrypto.digest({ name: S256_HASH_ALG }, data);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Populates buffer with cryptographically random values.
|
|
101
|
+
* @param dataBuffer
|
|
102
|
+
*/
|
|
103
|
+
getRandomValues(dataBuffer) {
|
|
104
|
+
return this.subtleCrypto.getRandomValues(dataBuffer);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Generates a keypair based on current keygen algorithm config.
|
|
108
|
+
* @param extractable
|
|
109
|
+
* @param usages
|
|
110
|
+
*/
|
|
111
|
+
async generateKeyPair(extractable, usages) {
|
|
112
|
+
return this.subtleCrypto.generateKey(this.keygenAlgorithmOptions, extractable, usages);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Export key as Json Web Key (JWK)
|
|
116
|
+
* @param key
|
|
117
|
+
* @param format
|
|
118
|
+
*/
|
|
119
|
+
async exportJwk(key) {
|
|
120
|
+
return this.subtleCrypto.exportKey(key);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Imports key as Json Web Key (JWK), can set extractable and usages.
|
|
124
|
+
* @param key
|
|
125
|
+
* @param format
|
|
126
|
+
* @param extractable
|
|
127
|
+
* @param usages
|
|
128
|
+
*/
|
|
129
|
+
async importJwk(key, extractable, usages) {
|
|
130
|
+
return this.subtleCrypto.importKey(key, this.keygenAlgorithmOptions, extractable, usages);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Signs given data with given key
|
|
134
|
+
* @param key
|
|
135
|
+
* @param data
|
|
136
|
+
*/
|
|
137
|
+
async sign(key, data) {
|
|
138
|
+
return this.subtleCrypto.sign(this.keygenAlgorithmOptions, key, data);
|
|
139
|
+
}
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
export { BrowserCrypto };
|
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
import { ICrypto, IPerformanceClient, Logger, PkceCodes, SignedHttpRequest, SignedHttpRequestParameters } from "@azure/msal-common";
|
|
2
|
-
import { CryptoOptions } from "../config/Configuration";
|
|
3
|
-
export type CachedKeyPair = {
|
|
4
|
-
publicKey: CryptoKey;
|
|
5
|
-
privateKey: CryptoKey;
|
|
6
|
-
requestMethod?: string;
|
|
7
|
-
requestUri?: string;
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and
|
|
11
|
-
* implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).
|
|
12
|
-
*/
|
|
13
|
-
export declare class CryptoOps implements ICrypto {
|
|
14
|
-
private browserCrypto;
|
|
15
|
-
private guidGenerator;
|
|
16
|
-
private b64Encode;
|
|
17
|
-
private b64Decode;
|
|
18
|
-
private pkceGenerator;
|
|
19
|
-
private logger;
|
|
20
|
-
/**
|
|
21
|
-
* CryptoOps can be used in contexts outside a PCA instance,
|
|
22
|
-
* meaning there won't be a performance manager available.
|
|
23
|
-
*/
|
|
24
|
-
private performanceClient;
|
|
25
|
-
private static POP_KEY_USAGES;
|
|
26
|
-
private static EXTRACTABLE;
|
|
27
|
-
private cache;
|
|
28
|
-
constructor(logger: Logger, performanceClient?: IPerformanceClient, cryptoConfig?: CryptoOptions);
|
|
29
|
-
/**
|
|
30
|
-
* Creates a new random GUID - used to populate state and nonce.
|
|
31
|
-
* @returns string (GUID)
|
|
32
|
-
*/
|
|
33
|
-
createNewGuid(): string;
|
|
34
|
-
/**
|
|
35
|
-
* Encodes input string to base64.
|
|
36
|
-
* @param input
|
|
37
|
-
*/
|
|
38
|
-
base64Encode(input: string): string;
|
|
39
|
-
/**
|
|
40
|
-
* Decodes input string from base64.
|
|
41
|
-
* @param input
|
|
42
|
-
*/
|
|
43
|
-
base64Decode(input: string): string;
|
|
44
|
-
/**
|
|
45
|
-
* Generates PKCE codes used in Authorization Code Flow.
|
|
46
|
-
*/
|
|
47
|
-
generatePkceCodes(): Promise<PkceCodes>;
|
|
48
|
-
/**
|
|
49
|
-
* Generates a keypair, stores it and returns a thumbprint
|
|
50
|
-
* @param request
|
|
51
|
-
*/
|
|
52
|
-
getPublicKeyThumbprint(request: SignedHttpRequestParameters): Promise<string>;
|
|
53
|
-
/**
|
|
54
|
-
* Removes cryptographic keypair from key store matching the keyId passed in
|
|
55
|
-
* @param kid
|
|
56
|
-
*/
|
|
57
|
-
removeTokenBindingKey(kid: string): Promise<boolean>;
|
|
58
|
-
/**
|
|
59
|
-
* Removes all cryptographic keys from IndexedDB storage
|
|
60
|
-
*/
|
|
61
|
-
clearKeystore(): Promise<boolean>;
|
|
62
|
-
/**
|
|
63
|
-
* Signs the given object as a jwt payload with private key retrieved by given kid.
|
|
64
|
-
* @param payload
|
|
65
|
-
* @param kid
|
|
66
|
-
*/
|
|
67
|
-
signJwt(payload: SignedHttpRequest, kid: string, correlationId?: string): Promise<string>;
|
|
68
|
-
/**
|
|
69
|
-
* Returns the SHA-256 hash of an input string
|
|
70
|
-
* @param plainText
|
|
71
|
-
*/
|
|
72
|
-
hashString(plainText: string): Promise<string>;
|
|
73
|
-
}
|
|
1
|
+
import { ICrypto, IPerformanceClient, Logger, PkceCodes, SignedHttpRequest, SignedHttpRequestParameters } from "@azure/msal-common";
|
|
2
|
+
import { CryptoOptions } from "../config/Configuration";
|
|
3
|
+
export type CachedKeyPair = {
|
|
4
|
+
publicKey: CryptoKey;
|
|
5
|
+
privateKey: CryptoKey;
|
|
6
|
+
requestMethod?: string;
|
|
7
|
+
requestUri?: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and
|
|
11
|
+
* implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).
|
|
12
|
+
*/
|
|
13
|
+
export declare class CryptoOps implements ICrypto {
|
|
14
|
+
private browserCrypto;
|
|
15
|
+
private guidGenerator;
|
|
16
|
+
private b64Encode;
|
|
17
|
+
private b64Decode;
|
|
18
|
+
private pkceGenerator;
|
|
19
|
+
private logger;
|
|
20
|
+
/**
|
|
21
|
+
* CryptoOps can be used in contexts outside a PCA instance,
|
|
22
|
+
* meaning there won't be a performance manager available.
|
|
23
|
+
*/
|
|
24
|
+
private performanceClient;
|
|
25
|
+
private static POP_KEY_USAGES;
|
|
26
|
+
private static EXTRACTABLE;
|
|
27
|
+
private cache;
|
|
28
|
+
constructor(logger: Logger, performanceClient?: IPerformanceClient, cryptoConfig?: CryptoOptions);
|
|
29
|
+
/**
|
|
30
|
+
* Creates a new random GUID - used to populate state and nonce.
|
|
31
|
+
* @returns string (GUID)
|
|
32
|
+
*/
|
|
33
|
+
createNewGuid(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Encodes input string to base64.
|
|
36
|
+
* @param input
|
|
37
|
+
*/
|
|
38
|
+
base64Encode(input: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Decodes input string from base64.
|
|
41
|
+
* @param input
|
|
42
|
+
*/
|
|
43
|
+
base64Decode(input: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Generates PKCE codes used in Authorization Code Flow.
|
|
46
|
+
*/
|
|
47
|
+
generatePkceCodes(): Promise<PkceCodes>;
|
|
48
|
+
/**
|
|
49
|
+
* Generates a keypair, stores it and returns a thumbprint
|
|
50
|
+
* @param request
|
|
51
|
+
*/
|
|
52
|
+
getPublicKeyThumbprint(request: SignedHttpRequestParameters): Promise<string>;
|
|
53
|
+
/**
|
|
54
|
+
* Removes cryptographic keypair from key store matching the keyId passed in
|
|
55
|
+
* @param kid
|
|
56
|
+
*/
|
|
57
|
+
removeTokenBindingKey(kid: string): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* Removes all cryptographic keys from IndexedDB storage
|
|
60
|
+
*/
|
|
61
|
+
clearKeystore(): Promise<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* Signs the given object as a jwt payload with private key retrieved by given kid.
|
|
64
|
+
* @param payload
|
|
65
|
+
* @param kid
|
|
66
|
+
*/
|
|
67
|
+
signJwt(payload: SignedHttpRequest, kid: string, correlationId?: string): Promise<string>;
|
|
68
|
+
/**
|
|
69
|
+
* Returns the SHA-256 hash of an input string
|
|
70
|
+
* @param plainText
|
|
71
|
+
*/
|
|
72
|
+
hashString(plainText: string): Promise<string>;
|
|
73
|
+
}
|
|
74
74
|
//# sourceMappingURL=CryptoOps.d.ts.map
|