@azure/msal-browser 3.0.2 → 3.1.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.
Files changed (256) hide show
  1. package/dist/app/IPublicClientApplication.d.ts +2 -0
  2. package/dist/app/IPublicClientApplication.d.ts.map +1 -1
  3. package/dist/app/IPublicClientApplication.mjs +4 -1
  4. package/dist/app/IPublicClientApplication.mjs.map +1 -1
  5. package/dist/app/PublicClientApplication.d.ts +6 -0
  6. package/dist/app/PublicClientApplication.d.ts.map +1 -1
  7. package/dist/app/PublicClientApplication.mjs +8 -1
  8. package/dist/app/PublicClientApplication.mjs.map +1 -1
  9. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts.map +1 -1
  10. package/dist/broker/nativeBroker/NativeMessageHandler.mjs +5 -4
  11. package/dist/broker/nativeBroker/NativeMessageHandler.mjs.map +1 -1
  12. package/dist/cache/AsyncMemoryStorage.mjs +4 -3
  13. package/dist/cache/AsyncMemoryStorage.mjs.map +1 -1
  14. package/dist/cache/BrowserCacheManager.d.ts +9 -2
  15. package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
  16. package/dist/cache/BrowserCacheManager.mjs +54 -26
  17. package/dist/cache/BrowserCacheManager.mjs.map +1 -1
  18. package/dist/cache/BrowserStorage.mjs +1 -1
  19. package/dist/cache/BrowserStorage.mjs.map +1 -1
  20. package/dist/cache/CryptoKeyStore.mjs +1 -1
  21. package/dist/cache/CryptoKeyStore.mjs.map +1 -1
  22. package/dist/cache/DatabaseStorage.d.ts.map +1 -1
  23. package/dist/cache/DatabaseStorage.mjs +9 -8
  24. package/dist/cache/DatabaseStorage.mjs.map +1 -1
  25. package/dist/cache/MemoryStorage.mjs +1 -1
  26. package/dist/cache/MemoryStorage.mjs.map +1 -1
  27. package/dist/cache/TokenCache.d.ts.map +1 -1
  28. package/dist/cache/TokenCache.mjs +30 -30
  29. package/dist/cache/TokenCache.mjs.map +1 -1
  30. package/dist/config/Configuration.d.ts +1 -0
  31. package/dist/config/Configuration.d.ts.map +1 -1
  32. package/dist/config/Configuration.mjs +7 -11
  33. package/dist/config/Configuration.mjs.map +1 -1
  34. package/dist/controllers/ControllerFactory.mjs +1 -1
  35. package/dist/controllers/ControllerFactory.mjs.map +1 -1
  36. package/dist/controllers/IController.d.ts +3 -27
  37. package/dist/controllers/IController.d.ts.map +1 -1
  38. package/dist/controllers/StandardController.d.ts +6 -25
  39. package/dist/controllers/StandardController.d.ts.map +1 -1
  40. package/dist/controllers/StandardController.mjs +28 -52
  41. package/dist/controllers/StandardController.mjs.map +1 -1
  42. package/dist/crypto/BrowserCrypto.d.ts.map +1 -1
  43. package/dist/crypto/BrowserCrypto.mjs +4 -3
  44. package/dist/crypto/BrowserCrypto.mjs.map +1 -1
  45. package/dist/crypto/CryptoOps.d.ts +0 -3
  46. package/dist/crypto/CryptoOps.d.ts.map +1 -1
  47. package/dist/crypto/CryptoOps.mjs +14 -17
  48. package/dist/crypto/CryptoOps.mjs.map +1 -1
  49. package/dist/crypto/ModernBrowserCrypto.mjs +1 -1
  50. package/dist/crypto/ModernBrowserCrypto.mjs.map +1 -1
  51. package/dist/crypto/PkceGenerator.d.ts +0 -1
  52. package/dist/crypto/PkceGenerator.d.ts.map +1 -1
  53. package/dist/crypto/PkceGenerator.mjs +8 -8
  54. package/dist/crypto/PkceGenerator.mjs.map +1 -1
  55. package/dist/crypto/SignedHttpRequest.mjs +1 -1
  56. package/dist/crypto/SignedHttpRequest.mjs.map +1 -1
  57. package/dist/encode/Base64Decode.d.ts +6 -19
  58. package/dist/encode/Base64Decode.d.ts.map +1 -1
  59. package/dist/encode/Base64Decode.mjs +17 -70
  60. package/dist/encode/Base64Decode.mjs.map +1 -1
  61. package/dist/encode/Base64Encode.d.ts +15 -27
  62. package/dist/encode/Base64Encode.d.ts.map +1 -1
  63. package/dist/encode/Base64Encode.mjs +36 -75
  64. package/dist/encode/Base64Encode.mjs.map +1 -1
  65. package/dist/error/BrowserAuthError.d.ts +54 -195
  66. package/dist/error/BrowserAuthError.d.ts.map +1 -1
  67. package/dist/error/BrowserAuthError.mjs +150 -381
  68. package/dist/error/BrowserAuthError.mjs.map +1 -1
  69. package/dist/error/BrowserAuthErrorCodes.d.ts +45 -0
  70. package/dist/error/BrowserAuthErrorCodes.d.ts.map +1 -0
  71. package/dist/error/BrowserAuthErrorCodes.mjs +53 -0
  72. package/dist/error/BrowserAuthErrorCodes.mjs.map +1 -0
  73. package/dist/error/BrowserConfigurationAuthError.mjs +1 -1
  74. package/dist/error/BrowserConfigurationAuthError.mjs.map +1 -1
  75. package/dist/error/NativeAuthError.d.ts.map +1 -1
  76. package/dist/error/NativeAuthError.mjs +5 -4
  77. package/dist/error/NativeAuthError.mjs.map +1 -1
  78. package/dist/event/EventHandler.mjs +1 -1
  79. package/dist/event/EventHandler.mjs.map +1 -1
  80. package/dist/event/EventMessage.mjs +1 -1
  81. package/dist/event/EventMessage.mjs.map +1 -1
  82. package/dist/event/EventType.mjs +1 -1
  83. package/dist/event/EventType.mjs.map +1 -1
  84. package/dist/index.d.ts +5 -5
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.mjs +5 -3
  87. package/dist/index.mjs.map +1 -1
  88. package/dist/interaction_client/BaseInteractionClient.d.ts +2 -1
  89. package/dist/interaction_client/BaseInteractionClient.d.ts.map +1 -1
  90. package/dist/interaction_client/BaseInteractionClient.mjs +1 -1
  91. package/dist/interaction_client/BaseInteractionClient.mjs.map +1 -1
  92. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +1 -1
  93. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs.map +1 -1
  94. package/dist/interaction_client/NativeInteractionClient.d.ts +4 -10
  95. package/dist/interaction_client/NativeInteractionClient.d.ts.map +1 -1
  96. package/dist/interaction_client/NativeInteractionClient.mjs +22 -30
  97. package/dist/interaction_client/NativeInteractionClient.mjs.map +1 -1
  98. package/dist/interaction_client/PopupClient.d.ts.map +1 -1
  99. package/dist/interaction_client/PopupClient.mjs +16 -15
  100. package/dist/interaction_client/PopupClient.mjs.map +1 -1
  101. package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
  102. package/dist/interaction_client/RedirectClient.mjs +7 -6
  103. package/dist/interaction_client/RedirectClient.mjs.map +1 -1
  104. package/dist/interaction_client/SilentAuthCodeClient.d.ts.map +1 -1
  105. package/dist/interaction_client/SilentAuthCodeClient.mjs +5 -4
  106. package/dist/interaction_client/SilentAuthCodeClient.mjs.map +1 -1
  107. package/dist/interaction_client/SilentCacheClient.d.ts +4 -2
  108. package/dist/interaction_client/SilentCacheClient.d.ts.map +1 -1
  109. package/dist/interaction_client/SilentCacheClient.mjs +10 -8
  110. package/dist/interaction_client/SilentCacheClient.mjs.map +1 -1
  111. package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
  112. package/dist/interaction_client/SilentIframeClient.mjs +20 -47
  113. package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
  114. package/dist/interaction_client/SilentRefreshClient.d.ts.map +1 -1
  115. package/dist/interaction_client/SilentRefreshClient.mjs +4 -3
  116. package/dist/interaction_client/SilentRefreshClient.mjs.map +1 -1
  117. package/dist/interaction_client/StandardInteractionClient.d.ts.map +1 -1
  118. package/dist/interaction_client/StandardInteractionClient.mjs +8 -7
  119. package/dist/interaction_client/StandardInteractionClient.mjs.map +1 -1
  120. package/dist/interaction_handler/InteractionHandler.d.ts.map +1 -1
  121. package/dist/interaction_handler/InteractionHandler.mjs +9 -9
  122. package/dist/interaction_handler/InteractionHandler.mjs.map +1 -1
  123. package/dist/interaction_handler/RedirectHandler.d.ts.map +1 -1
  124. package/dist/interaction_handler/RedirectHandler.mjs +11 -10
  125. package/dist/interaction_handler/RedirectHandler.mjs.map +1 -1
  126. package/dist/interaction_handler/SilentHandler.d.ts.map +1 -1
  127. package/dist/interaction_handler/SilentHandler.mjs +10 -9
  128. package/dist/interaction_handler/SilentHandler.mjs.map +1 -1
  129. package/dist/navigation/NavigationClient.mjs +1 -1
  130. package/dist/navigation/NavigationClient.mjs.map +1 -1
  131. package/dist/network/FetchClient.d.ts.map +1 -1
  132. package/dist/network/FetchClient.mjs +9 -8
  133. package/dist/network/FetchClient.mjs.map +1 -1
  134. package/dist/operatingcontext/BaseOperatingContext.mjs +1 -1
  135. package/dist/operatingcontext/BaseOperatingContext.mjs.map +1 -1
  136. package/dist/operatingcontext/StandardOperatingContext.mjs +1 -1
  137. package/dist/operatingcontext/StandardOperatingContext.mjs.map +1 -1
  138. package/dist/operatingcontext/TeamsAppOperatingContext.mjs +1 -1
  139. package/dist/operatingcontext/TeamsAppOperatingContext.mjs.map +1 -1
  140. package/dist/packageMetadata.d.ts +1 -1
  141. package/dist/packageMetadata.mjs +2 -2
  142. package/dist/packageMetadata.mjs.map +1 -1
  143. package/dist/request/ClearCacheRequest.d.ts +11 -0
  144. package/dist/request/ClearCacheRequest.d.ts.map +1 -0
  145. package/dist/telemetry/BrowserPerformanceClient.d.ts +2 -4
  146. package/dist/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  147. package/dist/telemetry/BrowserPerformanceClient.mjs +2 -6
  148. package/dist/telemetry/BrowserPerformanceClient.mjs.map +1 -1
  149. package/dist/telemetry/BrowserPerformanceMeasurement.mjs +1 -1
  150. package/dist/telemetry/BrowserPerformanceMeasurement.mjs.map +1 -1
  151. package/dist/utils/BrowserConstants.mjs +1 -1
  152. package/dist/utils/BrowserConstants.mjs.map +1 -1
  153. package/dist/utils/BrowserProtocolUtils.d.ts.map +1 -1
  154. package/dist/utils/BrowserProtocolUtils.mjs +3 -3
  155. package/dist/utils/BrowserProtocolUtils.mjs.map +1 -1
  156. package/dist/utils/BrowserStringUtils.mjs +1 -1
  157. package/dist/utils/BrowserStringUtils.mjs.map +1 -1
  158. package/dist/utils/BrowserUtils.d.ts +0 -9
  159. package/dist/utils/BrowserUtils.d.ts.map +1 -1
  160. package/dist/utils/BrowserUtils.mjs +8 -33
  161. package/dist/utils/BrowserUtils.mjs.map +1 -1
  162. package/lib/msal-browser.cjs +6579 -7102
  163. package/lib/msal-browser.cjs.map +1 -1
  164. package/lib/msal-browser.js +6579 -7102
  165. package/lib/msal-browser.js.map +1 -1
  166. package/lib/msal-browser.min.js +65 -62
  167. package/package.json +7 -5
  168. package/src/app/IPublicClientApplication.ts +199 -0
  169. package/src/app/PublicClientApplication.ts +405 -0
  170. package/src/broker/nativeBroker/NativeMessageHandler.ts +419 -0
  171. package/src/broker/nativeBroker/NativeRequest.ts +52 -0
  172. package/src/broker/nativeBroker/NativeResponse.ts +56 -0
  173. package/src/cache/AsyncMemoryStorage.ts +158 -0
  174. package/src/cache/BrowserCacheManager.ts +1994 -0
  175. package/src/cache/BrowserStorage.ts +54 -0
  176. package/src/cache/CryptoKeyStore.ts +63 -0
  177. package/src/cache/DatabaseStorage.ts +287 -0
  178. package/src/cache/IAsyncMemoryStorage.ts +36 -0
  179. package/src/cache/ITokenCache.ts +21 -0
  180. package/src/cache/IWindowStorage.ts +36 -0
  181. package/src/cache/MemoryStorage.ts +42 -0
  182. package/src/cache/TokenCache.ts +484 -0
  183. package/src/config/Configuration.ts +375 -0
  184. package/src/controllers/ControllerFactory.ts +55 -0
  185. package/src/controllers/IController.ts +131 -0
  186. package/src/controllers/StandardController.ts +2107 -0
  187. package/src/crypto/BrowserCrypto.ts +135 -0
  188. package/src/crypto/CryptoOps.ts +247 -0
  189. package/src/crypto/ISubtleCrypto.ts +30 -0
  190. package/src/crypto/ModernBrowserCrypto.ts +69 -0
  191. package/src/crypto/PkceGenerator.ts +76 -0
  192. package/src/crypto/SignedHttpRequest.ts +76 -0
  193. package/src/encode/Base64Decode.ts +26 -0
  194. package/src/encode/Base64Encode.ts +52 -0
  195. package/src/error/BrowserAuthError.ts +340 -0
  196. package/src/error/BrowserAuthErrorCodes.ts +56 -0
  197. package/src/error/BrowserConfigurationAuthError.ts +133 -0
  198. package/src/error/NativeAuthError.ts +141 -0
  199. package/src/event/EventHandler.ts +176 -0
  200. package/src/event/EventMessage.ts +125 -0
  201. package/src/event/EventType.ts +33 -0
  202. package/src/index.ts +152 -0
  203. package/src/interaction_client/BaseInteractionClient.ts +301 -0
  204. package/src/interaction_client/HybridSpaAuthorizationCodeClient.ts +16 -0
  205. package/src/interaction_client/NativeInteractionClient.ts +907 -0
  206. package/src/interaction_client/PopupClient.ts +926 -0
  207. package/src/interaction_client/RedirectClient.ts +616 -0
  208. package/src/interaction_client/SilentAuthCodeClient.ts +163 -0
  209. package/src/interaction_client/SilentCacheClient.ts +133 -0
  210. package/src/interaction_client/SilentIframeClient.ts +301 -0
  211. package/src/interaction_client/SilentRefreshClient.ts +120 -0
  212. package/src/interaction_client/StandardInteractionClient.ts +481 -0
  213. package/src/interaction_handler/InteractionHandler.ts +246 -0
  214. package/src/interaction_handler/RedirectHandler.ts +225 -0
  215. package/src/interaction_handler/SilentHandler.ts +266 -0
  216. package/src/navigation/INavigationClient.ts +23 -0
  217. package/src/navigation/NavigationClient.ts +55 -0
  218. package/src/navigation/NavigationOptions.ts +18 -0
  219. package/src/network/FetchClient.ts +130 -0
  220. package/src/operatingcontext/BaseOperatingContext.ts +82 -0
  221. package/src/operatingcontext/StandardOperatingContext.ts +49 -0
  222. package/src/operatingcontext/TeamsAppOperatingContext.ts +48 -0
  223. package/src/packageMetadata.ts +3 -0
  224. package/src/request/AuthorizationCodeRequest.ts +19 -0
  225. package/src/request/AuthorizationUrlRequest.ts +17 -0
  226. package/src/request/ClearCacheRequest.ts +16 -0
  227. package/src/request/EndSessionPopupRequest.ts +26 -0
  228. package/src/request/EndSessionRequest.ts +23 -0
  229. package/src/request/PopupRequest.ts +51 -0
  230. package/src/request/PopupWindowAttributes.ts +22 -0
  231. package/src/request/RedirectRequest.ts +51 -0
  232. package/src/request/SilentRequest.ts +49 -0
  233. package/src/request/SsoSilentRequest.ts +44 -0
  234. package/src/response/AuthenticationResult.ts +13 -0
  235. package/src/telemetry/BrowserPerformanceClient.ts +226 -0
  236. package/src/telemetry/BrowserPerformanceMeasurement.ts +144 -0
  237. package/src/utils/BrowserConstants.ts +241 -0
  238. package/src/utils/BrowserProtocolUtils.ts +57 -0
  239. package/src/utils/BrowserStringUtils.ts +143 -0
  240. package/src/utils/BrowserUtils.ts +156 -0
  241. package/dist/crypto/GuidGenerator.d.ts +0 -13
  242. package/dist/crypto/GuidGenerator.d.ts.map +0 -1
  243. package/dist/crypto/GuidGenerator.mjs +0 -104
  244. package/dist/crypto/GuidGenerator.mjs.map +0 -1
  245. package/dist/internals.d.ts +0 -23
  246. package/dist/internals.d.ts.map +0 -1
  247. package/dist/internals.mjs +0 -28
  248. package/dist/internals.mjs.map +0 -1
  249. package/dist/network/XhrClient.d.ts +0 -41
  250. package/dist/network/XhrClient.d.ts.map +0 -1
  251. package/dist/network/XhrClient.mjs +0 -125
  252. package/dist/network/XhrClient.mjs.map +0 -1
  253. package/dist/utils/MathUtils.d.ts +0 -12
  254. package/dist/utils/MathUtils.d.ts.map +0 -1
  255. package/dist/utils/MathUtils.mjs +0 -26
  256. package/dist/utils/MathUtils.mjs.map +0 -1
@@ -0,0 +1,301 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import {
7
+ ICrypto,
8
+ INetworkModule,
9
+ Logger,
10
+ AccountInfo,
11
+ AccountEntity,
12
+ BaseAuthRequest,
13
+ AuthenticationScheme,
14
+ UrlString,
15
+ ServerTelemetryManager,
16
+ ServerTelemetryRequest,
17
+ ClientConfigurationError,
18
+ Authority,
19
+ AuthorityOptions,
20
+ AuthorityFactory,
21
+ IPerformanceClient,
22
+ PerformanceEvents,
23
+ StringUtils,
24
+ } from "@azure/msal-common";
25
+ import { BrowserConfiguration } from "../config/Configuration";
26
+ import { BrowserCacheManager } from "../cache/BrowserCacheManager";
27
+ import { EventHandler } from "../event/EventHandler";
28
+ import { EndSessionRequest } from "../request/EndSessionRequest";
29
+ import { RedirectRequest } from "../request/RedirectRequest";
30
+ import { PopupRequest } from "../request/PopupRequest";
31
+ import { SsoSilentRequest } from "../request/SsoSilentRequest";
32
+ import { version } from "../packageMetadata";
33
+ import { BrowserConstants } from "../utils/BrowserConstants";
34
+ import { BrowserUtils } from "../utils/BrowserUtils";
35
+ import { INavigationClient } from "../navigation/INavigationClient";
36
+ import { NativeMessageHandler } from "../broker/nativeBroker/NativeMessageHandler";
37
+ import { AuthenticationResult } from "../response/AuthenticationResult";
38
+ import { ClearCacheRequest } from "../request/ClearCacheRequest";
39
+
40
+ export abstract class BaseInteractionClient {
41
+ protected config: BrowserConfiguration;
42
+ protected browserStorage: BrowserCacheManager;
43
+ protected browserCrypto: ICrypto;
44
+ protected networkClient: INetworkModule;
45
+ protected logger: Logger;
46
+ protected eventHandler: EventHandler;
47
+ protected navigationClient: INavigationClient;
48
+ protected nativeMessageHandler: NativeMessageHandler | undefined;
49
+ protected correlationId: string;
50
+ protected performanceClient: IPerformanceClient;
51
+
52
+ constructor(
53
+ config: BrowserConfiguration,
54
+ storageImpl: BrowserCacheManager,
55
+ browserCrypto: ICrypto,
56
+ logger: Logger,
57
+ eventHandler: EventHandler,
58
+ navigationClient: INavigationClient,
59
+ performanceClient: IPerformanceClient,
60
+ nativeMessageHandler?: NativeMessageHandler,
61
+ correlationId?: string
62
+ ) {
63
+ this.config = config;
64
+ this.browserStorage = storageImpl;
65
+ this.browserCrypto = browserCrypto;
66
+ this.networkClient = this.config.system.networkClient;
67
+ this.eventHandler = eventHandler;
68
+ this.navigationClient = navigationClient;
69
+ this.nativeMessageHandler = nativeMessageHandler;
70
+ this.correlationId =
71
+ correlationId || this.browserCrypto.createNewGuid();
72
+ this.logger = logger.clone(
73
+ BrowserConstants.MSAL_SKU,
74
+ version,
75
+ this.correlationId
76
+ );
77
+ this.performanceClient = performanceClient;
78
+ }
79
+
80
+ abstract acquireToken(
81
+ request: RedirectRequest | PopupRequest | SsoSilentRequest
82
+ ): Promise<AuthenticationResult | void>;
83
+
84
+ abstract logout(
85
+ request: EndSessionRequest | ClearCacheRequest | undefined
86
+ ): Promise<void>;
87
+
88
+ protected async clearCacheOnLogout(
89
+ account?: AccountInfo | null
90
+ ): Promise<void> {
91
+ if (account) {
92
+ if (
93
+ AccountEntity.accountInfoIsEqual(
94
+ account,
95
+ this.browserStorage.getActiveAccount(),
96
+ false
97
+ )
98
+ ) {
99
+ this.logger.verbose("Setting active account to null");
100
+ this.browserStorage.setActiveAccount(null);
101
+ }
102
+ // Clear given account.
103
+ try {
104
+ await this.browserStorage.removeAccount(
105
+ AccountEntity.generateAccountCacheKey(account)
106
+ );
107
+ this.logger.verbose(
108
+ "Cleared cache items belonging to the account provided in the logout request."
109
+ );
110
+ } catch (error) {
111
+ this.logger.error(
112
+ "Account provided in logout request was not found. Local cache unchanged."
113
+ );
114
+ }
115
+ } else {
116
+ try {
117
+ this.logger.verbose(
118
+ "No account provided in logout request, clearing all cache items.",
119
+ this.correlationId
120
+ );
121
+ // Clear all accounts and tokens
122
+ await this.browserStorage.clear();
123
+ // Clear any stray keys from IndexedDB
124
+ await this.browserCrypto.clearKeystore();
125
+ } catch (e) {
126
+ this.logger.error(
127
+ "Attempted to clear all MSAL cache items and failed. Local cache unchanged."
128
+ );
129
+ }
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Initializer function for all request APIs
135
+ * @param request
136
+ */
137
+ protected async initializeBaseRequest(
138
+ request: Partial<BaseAuthRequest>,
139
+ account?: AccountInfo
140
+ ): Promise<BaseAuthRequest> {
141
+ this.performanceClient.addQueueMeasurement(
142
+ PerformanceEvents.InitializeBaseRequest,
143
+ request.correlationId
144
+ );
145
+ this.logger.verbose("Initializing BaseAuthRequest");
146
+ const authority = request.authority || this.config.auth.authority;
147
+
148
+ if (account) {
149
+ await this.validateRequestAuthority(authority, account);
150
+ }
151
+
152
+ const scopes = [...((request && request.scopes) || [])];
153
+
154
+ const validatedRequest: BaseAuthRequest = {
155
+ ...request,
156
+ correlationId: this.correlationId,
157
+ authority,
158
+ scopes,
159
+ };
160
+
161
+ // Set authenticationScheme to BEARER if not explicitly set in the request
162
+ if (!validatedRequest.authenticationScheme) {
163
+ validatedRequest.authenticationScheme = AuthenticationScheme.BEARER;
164
+ this.logger.verbose(
165
+ 'Authentication Scheme wasn\'t explicitly set in request, defaulting to "Bearer" request'
166
+ );
167
+ } else {
168
+ if (
169
+ validatedRequest.authenticationScheme ===
170
+ AuthenticationScheme.SSH
171
+ ) {
172
+ if (!request.sshJwk) {
173
+ throw ClientConfigurationError.createMissingSshJwkError();
174
+ }
175
+ if (!request.sshKid) {
176
+ throw ClientConfigurationError.createMissingSshKidError();
177
+ }
178
+ }
179
+ this.logger.verbose(
180
+ `Authentication Scheme set to "${validatedRequest.authenticationScheme}" as configured in Auth request`
181
+ );
182
+ }
183
+
184
+ // Set requested claims hash if claims-based caching is enabled and claims were requested
185
+ if (
186
+ this.config.cache.claimsBasedCachingEnabled &&
187
+ request.claims &&
188
+ // Checks for empty stringified object "{}" which doesn't qualify as requested claims
189
+ !StringUtils.isEmptyObj(request.claims)
190
+ ) {
191
+ validatedRequest.requestedClaimsHash =
192
+ await this.browserCrypto.hashString(request.claims);
193
+ }
194
+
195
+ return validatedRequest;
196
+ }
197
+
198
+ /**
199
+ *
200
+ * Use to get the redirect uri configured in MSAL or null.
201
+ * @param requestRedirectUri
202
+ * @returns Redirect URL
203
+ *
204
+ */
205
+ getRedirectUri(requestRedirectUri?: string): string {
206
+ this.logger.verbose("getRedirectUri called");
207
+ const redirectUri =
208
+ requestRedirectUri ||
209
+ this.config.auth.redirectUri ||
210
+ BrowserUtils.getCurrentUri();
211
+ return UrlString.getAbsoluteUrl(
212
+ redirectUri,
213
+ BrowserUtils.getCurrentUri()
214
+ );
215
+ }
216
+
217
+ /*
218
+ * If authority provided in the request does not match environment/authority specified
219
+ * in the account or MSAL config, we throw an error.
220
+ */
221
+ async validateRequestAuthority(
222
+ authority: string,
223
+ account: AccountInfo
224
+ ): Promise<void> {
225
+ const discoveredAuthority = await this.getDiscoveredAuthority(
226
+ authority
227
+ );
228
+
229
+ if (!discoveredAuthority.isAlias(account.environment)) {
230
+ throw ClientConfigurationError.createAuthorityMismatchError();
231
+ }
232
+ }
233
+
234
+ /**
235
+ *
236
+ * @param apiId
237
+ * @param correlationId
238
+ * @param forceRefresh
239
+ */
240
+ protected initializeServerTelemetryManager(
241
+ apiId: number,
242
+ forceRefresh?: boolean
243
+ ): ServerTelemetryManager {
244
+ this.logger.verbose("initializeServerTelemetryManager called");
245
+ const telemetryPayload: ServerTelemetryRequest = {
246
+ clientId: this.config.auth.clientId,
247
+ correlationId: this.correlationId,
248
+ apiId: apiId,
249
+ forceRefresh: forceRefresh || false,
250
+ wrapperSKU: this.browserStorage.getWrapperMetadata()[0],
251
+ wrapperVer: this.browserStorage.getWrapperMetadata()[1],
252
+ };
253
+
254
+ return new ServerTelemetryManager(
255
+ telemetryPayload,
256
+ this.browserStorage
257
+ );
258
+ }
259
+
260
+ /**
261
+ * Used to get a discovered version of the default authority.
262
+ * @param requestAuthority
263
+ * @param requestCorrelationId
264
+ */
265
+ protected async getDiscoveredAuthority(
266
+ requestAuthority?: string
267
+ ): Promise<Authority> {
268
+ this.logger.verbose("getDiscoveredAuthority called");
269
+ const authorityOptions: AuthorityOptions = {
270
+ protocolMode: this.config.auth.protocolMode,
271
+ OIDCOptions: this.config.auth.OIDCOptions,
272
+ knownAuthorities: this.config.auth.knownAuthorities,
273
+ cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,
274
+ authorityMetadata: this.config.auth.authorityMetadata,
275
+ };
276
+
277
+ if (requestAuthority) {
278
+ this.logger.verbose(
279
+ "Creating discovered authority with request authority"
280
+ );
281
+ return await AuthorityFactory.createDiscoveredInstance(
282
+ requestAuthority,
283
+ this.config.system.networkClient,
284
+ this.browserStorage,
285
+ authorityOptions,
286
+ this.logger
287
+ );
288
+ }
289
+
290
+ this.logger.verbose(
291
+ "Creating discovered authority with configured authority"
292
+ );
293
+ return await AuthorityFactory.createDiscoveredInstance(
294
+ this.config.auth.authority,
295
+ this.config.system.networkClient,
296
+ this.browserStorage,
297
+ authorityOptions,
298
+ this.logger
299
+ );
300
+ }
301
+ }
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import {
7
+ AuthorizationCodeClient,
8
+ ClientConfiguration,
9
+ } from "@azure/msal-common";
10
+
11
+ export class HybridSpaAuthorizationCodeClient extends AuthorizationCodeClient {
12
+ constructor(config: ClientConfiguration) {
13
+ super(config);
14
+ this.includeRedirectUri = false;
15
+ }
16
+ }