@azure/msal-common 14.1.0-alpha.0 → 14.2.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 (234) hide show
  1. package/dist/account/AccountInfo.d.ts +31 -32
  2. package/dist/account/AccountInfo.d.ts.map +1 -1
  3. package/dist/account/AuthToken.d.ts +17 -17
  4. package/dist/account/AuthToken.mjs +58 -58
  5. package/dist/account/CcsCredential.d.ts +9 -9
  6. package/dist/account/CcsCredential.mjs +8 -8
  7. package/dist/account/ClientCredentials.d.ts +14 -14
  8. package/dist/account/ClientInfo.d.ts +19 -19
  9. package/dist/account/ClientInfo.mjs +37 -37
  10. package/dist/account/TokenClaims.d.ts +65 -65
  11. package/dist/authority/Authority.d.ts +249 -235
  12. package/dist/authority/Authority.d.ts.map +1 -1
  13. package/dist/authority/Authority.mjs +791 -740
  14. package/dist/authority/Authority.mjs.map +1 -1
  15. package/dist/authority/AuthorityFactory.d.ts +31 -31
  16. package/dist/authority/AuthorityFactory.d.ts.map +1 -1
  17. package/dist/authority/AuthorityFactory.mjs +48 -48
  18. package/dist/authority/AuthorityMetadata.d.ts +646 -623
  19. package/dist/authority/AuthorityMetadata.d.ts.map +1 -1
  20. package/dist/authority/AuthorityMetadata.mjs +941 -885
  21. package/dist/authority/AuthorityMetadata.mjs.map +1 -1
  22. package/dist/authority/AuthorityOptions.d.ts +27 -21
  23. package/dist/authority/AuthorityOptions.d.ts.map +1 -1
  24. package/dist/authority/AuthorityOptions.mjs +18 -18
  25. package/dist/authority/AuthorityOptions.mjs.map +1 -1
  26. package/dist/authority/AuthorityType.d.ts +10 -10
  27. package/dist/authority/AuthorityType.mjs +13 -13
  28. package/dist/authority/AzureRegion.d.ts +1 -1
  29. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  30. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  31. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  32. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +8 -8
  33. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  34. package/dist/authority/CloudInstanceDiscoveryResponse.mjs +8 -8
  35. package/dist/authority/ImdsOptions.d.ts +5 -5
  36. package/dist/authority/OIDCOptions.d.ts +8 -8
  37. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  38. package/dist/authority/OpenIdConfigResponse.mjs +10 -10
  39. package/dist/authority/ProtocolMode.d.ts +8 -8
  40. package/dist/authority/ProtocolMode.mjs +11 -11
  41. package/dist/authority/RegionDiscovery.d.ts +32 -32
  42. package/dist/authority/RegionDiscovery.mjs +106 -106
  43. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  44. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  45. package/dist/cache/CacheManager.d.ts +480 -446
  46. package/dist/cache/CacheManager.d.ts.map +1 -1
  47. package/dist/cache/CacheManager.mjs +1086 -998
  48. package/dist/cache/CacheManager.mjs.map +1 -1
  49. package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
  50. package/dist/cache/entities/AccessTokenEntity.mjs +109 -109
  51. package/dist/cache/entities/AccountEntity.d.ts +101 -101
  52. package/dist/cache/entities/AccountEntity.d.ts.map +1 -1
  53. package/dist/cache/entities/AccountEntity.mjs +218 -220
  54. package/dist/cache/entities/AccountEntity.mjs.map +1 -1
  55. package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
  56. package/dist/cache/entities/AppMetadataEntity.mjs +66 -66
  57. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +48 -48
  58. package/dist/cache/entities/AuthorityMetadataEntity.mjs +78 -78
  59. package/dist/cache/entities/CacheRecord.d.ts +14 -14
  60. package/dist/cache/entities/CacheRecord.mjs +14 -14
  61. package/dist/cache/entities/CredentialEntity.d.ts +88 -88
  62. package/dist/cache/entities/CredentialEntity.mjs +136 -136
  63. package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
  64. package/dist/cache/entities/IdTokenEntity.mjs +56 -56
  65. package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
  66. package/dist/cache/entities/RefreshTokenEntity.mjs +59 -59
  67. package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
  68. package/dist/cache/entities/ServerTelemetryEntity.mjs +27 -27
  69. package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
  70. package/dist/cache/entities/ThrottlingEntity.mjs +23 -23
  71. package/dist/cache/interface/ICacheManager.d.ts +166 -166
  72. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  73. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  74. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  75. package/dist/cache/persistence/TokenCacheContext.mjs +25 -25
  76. package/dist/cache/utils/CacheTypes.d.ts +67 -69
  77. package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
  78. package/dist/client/AuthorizationCodeClient.d.ts +73 -73
  79. package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
  80. package/dist/client/AuthorizationCodeClient.mjs +408 -407
  81. package/dist/client/AuthorizationCodeClient.mjs.map +1 -1
  82. package/dist/client/BaseClient.d.ts +51 -51
  83. package/dist/client/BaseClient.d.ts.map +1 -1
  84. package/dist/client/BaseClient.mjs +100 -99
  85. package/dist/client/BaseClient.mjs.map +1 -1
  86. package/dist/client/RefreshTokenClient.d.ts +35 -35
  87. package/dist/client/RefreshTokenClient.d.ts.map +1 -1
  88. package/dist/client/RefreshTokenClient.mjs +188 -180
  89. package/dist/client/RefreshTokenClient.mjs.map +1 -1
  90. package/dist/client/SilentFlowClient.d.ts +27 -26
  91. package/dist/client/SilentFlowClient.d.ts.map +1 -1
  92. package/dist/client/SilentFlowClient.mjs +118 -125
  93. package/dist/client/SilentFlowClient.mjs.map +1 -1
  94. package/dist/config/AppTokenProvider.d.ts +38 -38
  95. package/dist/config/ClientConfiguration.d.ts +150 -150
  96. package/dist/config/ClientConfiguration.mjs +97 -97
  97. package/dist/crypto/ICrypto.d.ts +58 -62
  98. package/dist/crypto/ICrypto.d.ts.map +1 -1
  99. package/dist/crypto/ICrypto.mjs +30 -33
  100. package/dist/crypto/ICrypto.mjs.map +1 -1
  101. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  102. package/dist/crypto/JoseHeader.d.ts +22 -22
  103. package/dist/crypto/JoseHeader.mjs +37 -37
  104. package/dist/crypto/PopTokenGenerator.d.ts +60 -60
  105. package/dist/crypto/PopTokenGenerator.mjs +82 -82
  106. package/dist/crypto/SignedHttpRequest.d.ts +11 -11
  107. package/dist/error/AuthError.d.ts +44 -44
  108. package/dist/error/AuthError.mjs +46 -46
  109. package/dist/error/AuthErrorCodes.d.ts +5 -5
  110. package/dist/error/AuthErrorCodes.mjs +9 -9
  111. package/dist/error/ClientAuthError.d.ts +237 -232
  112. package/dist/error/ClientAuthError.d.ts.map +1 -1
  113. package/dist/error/ClientAuthError.mjs +250 -245
  114. package/dist/error/ClientAuthError.mjs.map +1 -1
  115. package/dist/error/ClientAuthErrorCodes.d.ts +44 -43
  116. package/dist/error/ClientAuthErrorCodes.d.ts.map +1 -1
  117. package/dist/error/ClientAuthErrorCodes.mjs +49 -48
  118. package/dist/error/ClientAuthErrorCodes.mjs.map +1 -1
  119. package/dist/error/ClientConfigurationError.d.ts +128 -128
  120. package/dist/error/ClientConfigurationError.mjs +135 -135
  121. package/dist/error/ClientConfigurationErrorCodes.d.ts +22 -22
  122. package/dist/error/ClientConfigurationErrorCodes.mjs +26 -26
  123. package/dist/error/InteractionRequiredAuthError.d.ts +57 -57
  124. package/dist/error/InteractionRequiredAuthError.mjs +76 -76
  125. package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +5 -5
  126. package/dist/error/InteractionRequiredAuthErrorCodes.mjs +11 -11
  127. package/dist/error/JoseHeaderError.d.ts +15 -15
  128. package/dist/error/JoseHeaderError.mjs +22 -22
  129. package/dist/error/JoseHeaderErrorCodes.d.ts +2 -2
  130. package/dist/error/JoseHeaderErrorCodes.mjs +6 -6
  131. package/dist/error/ServerError.d.ts +7 -7
  132. package/dist/error/ServerError.mjs +14 -14
  133. package/dist/index.cjs +8830 -8612
  134. package/dist/index.cjs.map +1 -1
  135. package/dist/index.d.ts +96 -96
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.mjs +2 -2
  138. package/dist/logger/Logger.d.ts +95 -95
  139. package/dist/logger/Logger.mjs +188 -188
  140. package/dist/network/INetworkModule.d.ts +29 -29
  141. package/dist/network/INetworkModule.mjs +12 -12
  142. package/dist/network/NetworkManager.d.ts +33 -33
  143. package/dist/network/NetworkManager.mjs +34 -34
  144. package/dist/network/RequestThumbprint.d.ts +16 -16
  145. package/dist/network/ThrottlingUtils.d.ts +42 -42
  146. package/dist/network/ThrottlingUtils.mjs +95 -95
  147. package/dist/packageMetadata.d.ts +2 -2
  148. package/dist/packageMetadata.mjs +4 -4
  149. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  150. package/dist/request/AuthenticationHeaderParser.mjs +55 -55
  151. package/dist/request/BaseAuthRequest.d.ts +40 -40
  152. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  153. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  154. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  155. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  156. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  157. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  158. package/dist/request/CommonRefreshTokenRequest.d.ts +22 -19
  159. package/dist/request/CommonRefreshTokenRequest.d.ts.map +1 -1
  160. package/dist/request/CommonSilentFlowRequest.d.ts +20 -18
  161. package/dist/request/CommonSilentFlowRequest.d.ts.map +1 -1
  162. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  163. package/dist/request/NativeRequest.d.ts +19 -19
  164. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  165. package/dist/request/RequestParameterBuilder.d.ts +217 -217
  166. package/dist/request/RequestParameterBuilder.mjs +381 -381
  167. package/dist/request/RequestValidator.d.ts +33 -33
  168. package/dist/request/RequestValidator.mjs +81 -81
  169. package/dist/request/ScopeSet.d.ts +88 -88
  170. package/dist/request/ScopeSet.mjs +197 -197
  171. package/dist/request/StoreInCache.d.ts +8 -8
  172. package/dist/response/AuthenticationResult.d.ts +41 -41
  173. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  174. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  175. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  176. package/dist/response/IMDSBadResponse.d.ts +4 -4
  177. package/dist/response/ResponseHandler.d.ts +67 -67
  178. package/dist/response/ResponseHandler.d.ts.map +1 -1
  179. package/dist/response/ResponseHandler.mjs +315 -311
  180. package/dist/response/ResponseHandler.mjs.map +1 -1
  181. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  182. package/dist/response/ServerAuthorizationTokenResponse.d.ts +46 -46
  183. package/dist/telemetry/performance/IPerformanceClient.d.ts +51 -51
  184. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  185. package/dist/telemetry/performance/PerformanceClient.d.ts +191 -191
  186. package/dist/telemetry/performance/PerformanceClient.mjs +409 -409
  187. package/dist/telemetry/performance/PerformanceEvent.d.ts +457 -433
  188. package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
  189. package/dist/telemetry/performance/PerformanceEvent.mjs +249 -234
  190. package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
  191. package/dist/telemetry/performance/StubPerformanceClient.d.ts +24 -24
  192. package/dist/telemetry/performance/StubPerformanceClient.mjs +76 -76
  193. package/dist/telemetry/server/ServerTelemetryManager.d.ts +66 -66
  194. package/dist/telemetry/server/ServerTelemetryManager.mjs +197 -197
  195. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  196. package/dist/url/IUri.d.ts +12 -12
  197. package/dist/url/UrlString.d.ts +83 -83
  198. package/dist/url/UrlString.mjs +279 -279
  199. package/dist/utils/Constants.d.ts +366 -366
  200. package/dist/utils/Constants.mjs +376 -376
  201. package/dist/utils/FunctionWrappers.d.ts +27 -27
  202. package/dist/utils/FunctionWrappers.d.ts.map +1 -1
  203. package/dist/utils/FunctionWrappers.mjs +84 -85
  204. package/dist/utils/FunctionWrappers.mjs.map +1 -1
  205. package/dist/utils/MsalTypes.d.ts +6 -6
  206. package/dist/utils/ProtocolUtils.d.ts +42 -42
  207. package/dist/utils/ProtocolUtils.mjs +69 -69
  208. package/dist/utils/StringUtils.d.ts +40 -40
  209. package/dist/utils/StringUtils.mjs +95 -95
  210. package/dist/utils/TimeUtils.d.ts +27 -27
  211. package/dist/utils/TimeUtils.mjs +45 -45
  212. package/package.json +1 -1
  213. package/src/account/AccountInfo.ts +0 -1
  214. package/src/authority/Authority.ts +207 -127
  215. package/src/authority/AuthorityFactory.ts +4 -4
  216. package/src/authority/AuthorityMetadata.ts +87 -0
  217. package/src/authority/AuthorityOptions.ts +9 -0
  218. package/src/cache/CacheManager.ts +187 -46
  219. package/src/cache/entities/AccountEntity.ts +0 -3
  220. package/src/cache/utils/CacheTypes.ts +7 -6
  221. package/src/client/AuthorizationCodeClient.ts +12 -3
  222. package/src/client/BaseClient.ts +9 -6
  223. package/src/client/RefreshTokenClient.ts +36 -9
  224. package/src/client/SilentFlowClient.ts +49 -49
  225. package/src/crypto/ICrypto.ts +0 -7
  226. package/src/error/ClientAuthError.ts +8 -0
  227. package/src/error/ClientAuthErrorCodes.ts +1 -0
  228. package/src/index.ts +7 -1
  229. package/src/packageMetadata.ts +1 -1
  230. package/src/request/CommonRefreshTokenRequest.ts +3 -0
  231. package/src/request/CommonSilentFlowRequest.ts +2 -0
  232. package/src/response/ResponseHandler.ts +9 -3
  233. package/src/telemetry/performance/PerformanceEvent.ts +33 -2
  234. package/src/utils/FunctionWrappers.ts +0 -1
@@ -42,6 +42,12 @@ import { BaseAuthRequest } from "../request/BaseAuthRequest";
42
42
  import { Logger } from "../logger/Logger";
43
43
  import { name, version } from "../packageMetadata";
44
44
  import { StoreInCache } from "../request/StoreInCache";
45
+ import {
46
+ getAliasesFromConfigMetadata,
47
+ getHardcodedAliasesForCanonicalAuthority,
48
+ } from "../authority/AuthorityMetadata";
49
+ import { StaticAuthorityOptions } from "../authority/AuthorityOptions";
50
+ import { TokenClaims } from "../account/TokenClaims";
45
51
 
46
52
  /**
47
53
  * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens.
@@ -52,11 +58,18 @@ export abstract class CacheManager implements ICacheManager {
52
58
  protected cryptoImpl: ICrypto;
53
59
  // Instance of logger for functions defined in the msal-common layer
54
60
  private commonLogger: Logger;
55
-
56
- constructor(clientId: string, cryptoImpl: ICrypto, logger: Logger) {
61
+ private staticAuthorityOptions?: StaticAuthorityOptions;
62
+
63
+ constructor(
64
+ clientId: string,
65
+ cryptoImpl: ICrypto,
66
+ logger: Logger,
67
+ staticAuthorityOptions?: StaticAuthorityOptions
68
+ ) {
57
69
  this.clientId = clientId;
58
70
  this.cryptoImpl = cryptoImpl;
59
71
  this.commonLogger = logger.clone(name, version);
72
+ this.staticAuthorityOptions = staticAuthorityOptions;
60
73
  }
61
74
 
62
75
  /**
@@ -221,66 +234,98 @@ export abstract class CacheManager implements ICacheManager {
221
234
  ): string;
222
235
 
223
236
  /**
224
- * Returns all accounts in cache
237
+ * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.
238
+ * @param accountFilter - (Optional) filter to narrow down the accounts returned
239
+ * @returns Array of AccountInfo objects in cache
225
240
  */
226
- getAllAccounts(): AccountInfo[] {
227
- const allAccountKeys = this.getAccountKeys();
228
- if (allAccountKeys.length < 1) {
229
- return [];
230
- }
231
-
232
- const accountEntities: AccountEntity[] = allAccountKeys.reduce(
233
- (accounts: AccountEntity[], key: string) => {
234
- const entity: AccountEntity | null = this.getAccount(key);
235
-
236
- if (!entity) {
237
- return accounts;
241
+ getAllAccounts(accountFilter?: AccountFilter): AccountInfo[] {
242
+ const validAccounts: AccountInfo[] = [];
243
+ this.getAccountsFilteredBy(accountFilter || {}).forEach(
244
+ (accountEntity: AccountEntity) => {
245
+ const accountInfo = this.getAccountInfoFromEntity(
246
+ accountEntity,
247
+ accountFilter
248
+ );
249
+ if (accountInfo) {
250
+ validAccounts.push(accountInfo);
238
251
  }
239
- accounts.push(entity);
240
- return accounts;
241
- },
242
- []
252
+ }
243
253
  );
244
-
245
- if (accountEntities.length < 1) {
246
- return [];
247
- } else {
248
- const allAccounts = accountEntities.map<AccountInfo>(
249
- (accountEntity) => {
250
- return this.getAccountInfoFromEntity(accountEntity);
251
- }
252
- );
253
- return allAccounts;
254
- }
254
+ return validAccounts;
255
255
  }
256
256
 
257
257
  /**
258
258
  * Gets accountInfo object based on provided filters
259
259
  */
260
260
  getAccountInfoFilteredBy(accountFilter: AccountFilter): AccountInfo | null {
261
- const allAccounts = this.getAccountsFilteredBy(accountFilter);
261
+ const allAccounts = this.getAllAccounts(accountFilter);
262
262
  if (allAccounts.length > 0) {
263
- return this.getAccountInfoFromEntity(allAccounts[0]);
263
+ return allAccounts[0];
264
+ } else {
265
+ return null;
266
+ }
267
+ }
268
+
269
+ /**
270
+ * Returns a single matching
271
+ * @param accountFilter
272
+ * @returns
273
+ */
274
+ getBaseAccountInfo(accountFilter: AccountFilter): AccountInfo | null {
275
+ const accountEntities = this.getAccountsFilteredBy(accountFilter);
276
+ if (accountEntities.length > 0) {
277
+ return accountEntities[0].getAccountInfo();
264
278
  } else {
265
279
  return null;
266
280
  }
267
281
  }
268
282
 
269
283
  private getAccountInfoFromEntity(
270
- accountEntity: AccountEntity
271
- ): AccountInfo {
284
+ accountEntity: AccountEntity,
285
+ accountFilter?: AccountFilter
286
+ ): AccountInfo | null {
272
287
  const accountInfo = accountEntity.getAccountInfo();
273
288
  const idToken = this.getIdToken(accountInfo);
274
289
  if (idToken) {
275
- accountInfo.idToken = idToken.secret;
276
- accountInfo.idTokenClaims = extractTokenClaims(
290
+ const idTokenClaims = extractTokenClaims(
277
291
  idToken.secret,
278
292
  this.cryptoImpl.base64Decode
279
293
  );
294
+
295
+ if (
296
+ this.idTokenClaimsMatchAccountFilter(
297
+ idTokenClaims,
298
+ accountFilter
299
+ )
300
+ ) {
301
+ accountInfo.idToken = idToken.secret;
302
+ accountInfo.idTokenClaims = idTokenClaims;
303
+ return accountInfo;
304
+ }
280
305
  }
281
- return accountInfo;
306
+ return null;
282
307
  }
283
308
 
309
+ private idTokenClaimsMatchAccountFilter(
310
+ idTokenClaims: TokenClaims,
311
+ accountFilter?: AccountFilter
312
+ ): boolean {
313
+ if (accountFilter) {
314
+ if (
315
+ !!accountFilter.loginHint &&
316
+ !this.matchLoginHint(idTokenClaims, accountFilter.loginHint)
317
+ ) {
318
+ return false;
319
+ }
320
+ if (
321
+ !!accountFilter.sid &&
322
+ !this.matchSid(idTokenClaims, accountFilter.sid)
323
+ ) {
324
+ return false;
325
+ }
326
+ }
327
+ return true;
328
+ }
284
329
  /**
285
330
  * saves a cache record
286
331
  * @param cacheRecord
@@ -364,22 +409,19 @@ export abstract class CacheManager implements ICacheManager {
364
409
  }
365
410
 
366
411
  /**
367
- * retrieve accounts matching all provided filters; if no filter is set, get all accounts
368
- * not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared
369
- * @param homeAccountId
370
- * @param environment
371
- * @param realm
412
+ * Retrieve accounts matching all provided filters; if no filter is set, get all accounts
413
+ * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared
414
+ * @param accountFilter - An object containing Account properties to filter by
372
415
  */
373
416
  getAccountsFilteredBy(accountFilter: AccountFilter): AccountEntity[] {
374
417
  const allAccountKeys = this.getAccountKeys();
375
418
  const matchingAccounts: AccountEntity[] = [];
376
-
377
419
  allAccountKeys.forEach((cacheKey) => {
378
420
  if (
379
421
  !this.isAccountKey(
380
422
  cacheKey,
381
423
  accountFilter.homeAccountId,
382
- accountFilter.realm
424
+ accountFilter.tenantId
383
425
  )
384
426
  ) {
385
427
  // Don't parse value if the key doesn't match the account filters
@@ -427,6 +469,14 @@ export abstract class CacheManager implements ICacheManager {
427
469
  return;
428
470
  }
429
471
 
472
+ // tenantId is another name for realm
473
+ if (
474
+ !!accountFilter.tenantId &&
475
+ !this.matchRealm(entity, accountFilter.tenantId)
476
+ ) {
477
+ return;
478
+ }
479
+
430
480
  if (
431
481
  !!accountFilter.nativeAccountId &&
432
482
  !this.matchNativeAccountId(
@@ -437,6 +487,20 @@ export abstract class CacheManager implements ICacheManager {
437
487
  return;
438
488
  }
439
489
 
490
+ if (
491
+ !!accountFilter.authorityType &&
492
+ !this.matchAuthorityType(entity, accountFilter.authorityType)
493
+ ) {
494
+ return;
495
+ }
496
+
497
+ if (
498
+ !!accountFilter.name &&
499
+ !this.matchName(entity, accountFilter.name)
500
+ ) {
501
+ return;
502
+ }
503
+
440
504
  matchingAccounts.push(entity);
441
505
  });
442
506
 
@@ -924,7 +988,6 @@ export abstract class CacheManager implements ICacheManager {
924
988
  ) {
925
989
  return;
926
990
  }
927
-
928
991
  const idToken = this.getIdTokenCredential(key);
929
992
  if (idToken && this.credentialMatchesFilter(idToken, filter)) {
930
993
  idTokens.push(idToken);
@@ -1324,6 +1387,16 @@ export abstract class CacheManager implements ICacheManager {
1324
1387
  );
1325
1388
  }
1326
1389
 
1390
+ /**
1391
+ * helper to match names
1392
+ * @param entity
1393
+ * @param name
1394
+ * @returns true if the downcased name properties are present and match in the filter and the entity
1395
+ */
1396
+ private matchName(entity: AccountEntity, name: string): boolean {
1397
+ return !!(name.toLowerCase() === entity.name?.toLowerCase());
1398
+ }
1399
+
1327
1400
  /**
1328
1401
  * helper to match assertion
1329
1402
  * @param value
@@ -1348,6 +1421,27 @@ export abstract class CacheManager implements ICacheManager {
1348
1421
  entity: AccountEntity | CredentialEntity | AppMetadataEntity,
1349
1422
  environment: string
1350
1423
  ): boolean {
1424
+ // Check static authority options first for cases where authority metadata has not been resolved and cached yet
1425
+ if (this.staticAuthorityOptions) {
1426
+ const staticAliases =
1427
+ getAliasesFromConfigMetadata(
1428
+ this.staticAuthorityOptions.canonicalAuthority,
1429
+ this.staticAuthorityOptions.cloudDiscoveryMetadata
1430
+ ) ||
1431
+ getHardcodedAliasesForCanonicalAuthority(
1432
+ this.staticAuthorityOptions.canonicalAuthority
1433
+ ) ||
1434
+ this.staticAuthorityOptions.knownAuthorities;
1435
+ if (
1436
+ staticAliases &&
1437
+ staticAliases.includes(environment) &&
1438
+ staticAliases.includes(entity.environment)
1439
+ ) {
1440
+ return true;
1441
+ }
1442
+ }
1443
+
1444
+ // Query metadata cache if no static authority configuration has aliases that match enviroment
1351
1445
  const cloudMetadata = this.getAuthorityMetadataByAlias(environment);
1352
1446
  if (
1353
1447
  cloudMetadata &&
@@ -1355,7 +1449,6 @@ export abstract class CacheManager implements ICacheManager {
1355
1449
  ) {
1356
1450
  return true;
1357
1451
  }
1358
-
1359
1452
  return false;
1360
1453
  }
1361
1454
 
@@ -1425,6 +1518,54 @@ export abstract class CacheManager implements ICacheManager {
1425
1518
  );
1426
1519
  }
1427
1520
 
1521
+ /**
1522
+ * helper to match loginHint which can be either:
1523
+ * 1. login_hint ID token claim
1524
+ * 2. username in cached account object
1525
+ * 3. upn in ID token claims
1526
+ * @param entity
1527
+ * @param loginHint
1528
+ * @returns
1529
+ */
1530
+ private matchLoginHint(
1531
+ idTokenClaims: TokenClaims,
1532
+ loginHint: string
1533
+ ): boolean {
1534
+ if (idTokenClaims?.login_hint === loginHint) {
1535
+ return true;
1536
+ }
1537
+
1538
+ if (idTokenClaims.preferred_username === loginHint) {
1539
+ return true;
1540
+ }
1541
+
1542
+ if (idTokenClaims?.upn === loginHint) {
1543
+ return true;
1544
+ }
1545
+
1546
+ return false;
1547
+ }
1548
+
1549
+ /**
1550
+ * Helper to match sid
1551
+ * @param idTokenClaims
1552
+ * @param sid
1553
+ * @returns true if the sid claim is present and matches the filter
1554
+ */
1555
+ private matchSid(idTokenClaims: TokenClaims, sid: string): boolean {
1556
+ return !!(idTokenClaims?.sid && idTokenClaims.sid === sid);
1557
+ }
1558
+
1559
+ private matchAuthorityType(
1560
+ entity: AccountEntity,
1561
+ authorityType: string
1562
+ ): boolean {
1563
+ return !!(
1564
+ entity.authorityType &&
1565
+ authorityType.toLowerCase() === entity.authorityType.toLowerCase()
1566
+ );
1567
+ }
1568
+
1428
1569
  /**
1429
1570
  * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise.
1430
1571
  * @param entity
@@ -153,8 +153,6 @@ export class AccountEntity {
153
153
  account.realm =
154
154
  accountDetails.idTokenClaims.tid || Constants.EMPTY_STRING;
155
155
 
156
- account.idTokenClaims = accountDetails.idTokenClaims;
157
-
158
156
  // How do you account for MSA CID here?
159
157
  account.localAccountId =
160
158
  accountDetails.idTokenClaims.oid ||
@@ -207,7 +205,6 @@ export class AccountEntity {
207
205
 
208
206
  account.username = accountInfo.username;
209
207
  account.name = accountInfo.name;
210
- account.idTokenClaims = accountInfo.idTokenClaims;
211
208
 
212
209
  account.cloudGraphHostName = cloudGraphHostName;
213
210
  account.msGraphHost = msGraphHost;
@@ -13,6 +13,7 @@ import { ThrottlingEntity } from "../entities/ThrottlingEntity";
13
13
  import { AuthorityMetadataEntity } from "../entities/AuthorityMetadataEntity";
14
14
  import { AuthenticationScheme } from "../../utils/Constants";
15
15
  import { ScopeSet } from "../../request/ScopeSet";
16
+ import { AccountInfo } from "../../account/AccountInfo";
16
17
 
17
18
  /** @internal */
18
19
  export type AccountCache = Record<string, AccountEntity>;
@@ -52,13 +53,13 @@ export type ValidCredentialType =
52
53
  /**
53
54
  * Account: <home_account_id>-<environment>-<realm*>
54
55
  */
55
- export type AccountFilter = {
56
- homeAccountId?: string;
57
- localAccountId?: string;
58
- username?: string;
59
- environment?: string;
56
+ export type AccountFilter = Omit<
57
+ Partial<AccountInfo>,
58
+ "idToken" | "idTokenClaims"
59
+ > & {
60
60
  realm?: string;
61
- nativeAccountId?: string;
61
+ loginHint?: string;
62
+ sid?: string;
62
63
  };
63
64
 
64
65
  /**
@@ -282,7 +282,9 @@ export class AuthorizationCodeClient extends BaseClient {
282
282
  );
283
283
 
284
284
  const thumbprint: RequestThumbprint = {
285
- clientId: this.config.authOptions.clientId,
285
+ clientId:
286
+ request.tokenBodyParameters?.clientId ||
287
+ this.config.authOptions.clientId,
286
288
  authority: authority.canonicalAuthority,
287
289
  scopes: request.scopes,
288
290
  claims: request.claims,
@@ -295,11 +297,18 @@ export class AuthorizationCodeClient extends BaseClient {
295
297
 
296
298
  return invokeAsync(
297
299
  this.executePostToTokenEndpoint.bind(this),
298
- PerformanceEvents.BaseClientExecutePostToTokenEndpoint,
300
+ PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint,
299
301
  this.logger,
300
302
  this.performanceClient,
301
303
  request.correlationId
302
- )(endpoint, requestBody, headers, thumbprint, request.correlationId);
304
+ )(
305
+ endpoint,
306
+ requestBody,
307
+ headers,
308
+ thumbprint,
309
+ request.correlationId,
310
+ PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint
311
+ );
303
312
  }
304
313
 
305
314
  /**
@@ -28,7 +28,6 @@ import { buildClientInfoFromHomeAccountId } from "../account/ClientInfo";
28
28
  import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient";
29
29
  import { RequestParameterBuilder } from "../request/RequestParameterBuilder";
30
30
  import { BaseAuthRequest } from "../request/BaseAuthRequest";
31
- import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";
32
31
 
33
32
  /**
34
33
  * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow.
@@ -144,12 +143,16 @@ export abstract class BaseClient {
144
143
  queryString: string,
145
144
  headers: Record<string, string>,
146
145
  thumbprint: RequestThumbprint,
147
- correlationId: string
146
+ correlationId: string,
147
+ queuedEvent?: string
148
148
  ): Promise<NetworkResponse<ServerAuthorizationTokenResponse>> {
149
- this.performanceClient?.addQueueMeasurement(
150
- PerformanceEvents.BaseClientExecutePostToTokenEndpoint,
151
- correlationId
152
- );
149
+ if (queuedEvent) {
150
+ this.performanceClient?.addQueueMeasurement(
151
+ queuedEvent,
152
+ correlationId
153
+ );
154
+ }
155
+
153
156
  const response =
154
157
  await this.networkManager.sendPostRequest<ServerAuthorizationTokenResponse>(
155
158
  thumbprint,
@@ -17,6 +17,7 @@ import {
17
17
  AuthenticationScheme,
18
18
  Errors,
19
19
  HeaderNames,
20
+ AADServerParamKeys,
20
21
  } from "../utils/Constants";
21
22
  import { ResponseHandler } from "../response/ResponseHandler";
22
23
  import { AuthenticationResult } from "../response/AuthenticationResult";
@@ -45,7 +46,7 @@ import {
45
46
  } from "../error/InteractionRequiredAuthError";
46
47
  import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";
47
48
  import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient";
48
- import { invokeAsync } from "../utils/FunctionWrappers";
49
+ import { invoke, invokeAsync } from "../utils/FunctionWrappers";
49
50
  /**
50
51
  * OAuth2.0 refresh token client
51
52
  * @internal
@@ -195,10 +196,13 @@ export class RefreshTokenClient extends BaseClient {
195
196
  );
196
197
 
197
198
  // fetches family RT or application RT based on FOCI value
198
- const refreshToken = this.cacheManager.getRefreshToken(
199
- request.account,
200
- foci
201
- );
199
+ const refreshToken = invoke(
200
+ this.cacheManager.getRefreshToken.bind(this.cacheManager),
201
+ PerformanceEvents.CacheManagerGetRefreshToken,
202
+ this.logger,
203
+ this.performanceClient,
204
+ request.correlationId
205
+ )(request.account, foci);
202
206
 
203
207
  if (!refreshToken) {
204
208
  throw createInteractionRequiredAuthError(
@@ -258,7 +262,9 @@ export class RefreshTokenClient extends BaseClient {
258
262
  request.ccsCredential
259
263
  );
260
264
  const thumbprint: RequestThumbprint = {
261
- clientId: this.config.authOptions.clientId,
265
+ clientId:
266
+ request.tokenBodyParameters?.clientId ||
267
+ this.config.authOptions.clientId,
262
268
  authority: authority.canonicalAuthority,
263
269
  scopes: request.scopes,
264
270
  claims: request.claims,
@@ -271,11 +277,18 @@ export class RefreshTokenClient extends BaseClient {
271
277
 
272
278
  return invokeAsync(
273
279
  this.executePostToTokenEndpoint.bind(this),
274
- PerformanceEvents.BaseClientExecutePostToTokenEndpoint,
280
+ PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint,
275
281
  this.logger,
276
282
  this.performanceClient,
277
283
  request.correlationId
278
- )(endpoint, requestBody, headers, thumbprint, request.correlationId);
284
+ )(
285
+ endpoint,
286
+ requestBody,
287
+ headers,
288
+ thumbprint,
289
+ request.correlationId,
290
+ PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint
291
+ );
279
292
  }
280
293
 
281
294
  /**
@@ -293,7 +306,14 @@ export class RefreshTokenClient extends BaseClient {
293
306
  const correlationId = request.correlationId;
294
307
  const parameterBuilder = new RequestParameterBuilder();
295
308
 
296
- parameterBuilder.addClientId(this.config.authOptions.clientId);
309
+ parameterBuilder.addClientId(
310
+ request.tokenBodyParameters?.[AADServerParamKeys.CLIENT_ID] ||
311
+ this.config.authOptions.clientId
312
+ );
313
+
314
+ if (request.redirectUri) {
315
+ parameterBuilder.addRedirectUri(request.redirectUri);
316
+ }
297
317
 
298
318
  parameterBuilder.addScopes(
299
319
  request.scopes,
@@ -394,6 +414,13 @@ export class RefreshTokenClient extends BaseClient {
394
414
  break;
395
415
  }
396
416
  }
417
+
418
+ if (request.tokenBodyParameters) {
419
+ parameterBuilder.addExtraQueryParameters(
420
+ request.tokenBodyParameters
421
+ );
422
+ }
423
+
397
424
  return parameterBuilder.createQueryString();
398
425
  }
399
426
  }