@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.
- package/dist/account/AccountInfo.d.ts +31 -32
- package/dist/account/AccountInfo.d.ts.map +1 -1
- package/dist/account/AuthToken.d.ts +17 -17
- package/dist/account/AuthToken.mjs +58 -58
- package/dist/account/CcsCredential.d.ts +9 -9
- package/dist/account/CcsCredential.mjs +8 -8
- package/dist/account/ClientCredentials.d.ts +14 -14
- package/dist/account/ClientInfo.d.ts +19 -19
- package/dist/account/ClientInfo.mjs +37 -37
- package/dist/account/TokenClaims.d.ts +65 -65
- package/dist/authority/Authority.d.ts +249 -235
- package/dist/authority/Authority.d.ts.map +1 -1
- package/dist/authority/Authority.mjs +791 -740
- package/dist/authority/Authority.mjs.map +1 -1
- package/dist/authority/AuthorityFactory.d.ts +31 -31
- package/dist/authority/AuthorityFactory.d.ts.map +1 -1
- package/dist/authority/AuthorityFactory.mjs +48 -48
- package/dist/authority/AuthorityMetadata.d.ts +646 -623
- package/dist/authority/AuthorityMetadata.d.ts.map +1 -1
- package/dist/authority/AuthorityMetadata.mjs +941 -885
- package/dist/authority/AuthorityMetadata.mjs.map +1 -1
- package/dist/authority/AuthorityOptions.d.ts +27 -21
- package/dist/authority/AuthorityOptions.d.ts.map +1 -1
- package/dist/authority/AuthorityOptions.mjs +18 -18
- package/dist/authority/AuthorityOptions.mjs.map +1 -1
- package/dist/authority/AuthorityType.d.ts +10 -10
- package/dist/authority/AuthorityType.mjs +13 -13
- package/dist/authority/AzureRegion.d.ts +1 -1
- package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
- package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +8 -8
- package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
- package/dist/authority/CloudInstanceDiscoveryResponse.mjs +8 -8
- package/dist/authority/ImdsOptions.d.ts +5 -5
- package/dist/authority/OIDCOptions.d.ts +8 -8
- package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
- package/dist/authority/OpenIdConfigResponse.mjs +10 -10
- package/dist/authority/ProtocolMode.d.ts +8 -8
- package/dist/authority/ProtocolMode.mjs +11 -11
- package/dist/authority/RegionDiscovery.d.ts +32 -32
- package/dist/authority/RegionDiscovery.mjs +106 -106
- package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
- package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
- package/dist/cache/CacheManager.d.ts +480 -446
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.mjs +1086 -998
- package/dist/cache/CacheManager.mjs.map +1 -1
- package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
- package/dist/cache/entities/AccessTokenEntity.mjs +109 -109
- package/dist/cache/entities/AccountEntity.d.ts +101 -101
- package/dist/cache/entities/AccountEntity.d.ts.map +1 -1
- package/dist/cache/entities/AccountEntity.mjs +218 -220
- package/dist/cache/entities/AccountEntity.mjs.map +1 -1
- package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
- package/dist/cache/entities/AppMetadataEntity.mjs +66 -66
- package/dist/cache/entities/AuthorityMetadataEntity.d.ts +48 -48
- package/dist/cache/entities/AuthorityMetadataEntity.mjs +78 -78
- package/dist/cache/entities/CacheRecord.d.ts +14 -14
- package/dist/cache/entities/CacheRecord.mjs +14 -14
- package/dist/cache/entities/CredentialEntity.d.ts +88 -88
- package/dist/cache/entities/CredentialEntity.mjs +136 -136
- package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
- package/dist/cache/entities/IdTokenEntity.mjs +56 -56
- package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
- package/dist/cache/entities/RefreshTokenEntity.mjs +59 -59
- package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
- package/dist/cache/entities/ServerTelemetryEntity.mjs +27 -27
- package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
- package/dist/cache/entities/ThrottlingEntity.mjs +23 -23
- package/dist/cache/interface/ICacheManager.d.ts +166 -166
- package/dist/cache/interface/ICachePlugin.d.ts +5 -5
- package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
- package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
- package/dist/cache/persistence/TokenCacheContext.mjs +25 -25
- package/dist/cache/utils/CacheTypes.d.ts +67 -69
- package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.d.ts +73 -73
- package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.mjs +408 -407
- package/dist/client/AuthorizationCodeClient.mjs.map +1 -1
- package/dist/client/BaseClient.d.ts +51 -51
- package/dist/client/BaseClient.d.ts.map +1 -1
- package/dist/client/BaseClient.mjs +100 -99
- package/dist/client/BaseClient.mjs.map +1 -1
- package/dist/client/RefreshTokenClient.d.ts +35 -35
- package/dist/client/RefreshTokenClient.d.ts.map +1 -1
- package/dist/client/RefreshTokenClient.mjs +188 -180
- package/dist/client/RefreshTokenClient.mjs.map +1 -1
- package/dist/client/SilentFlowClient.d.ts +27 -26
- package/dist/client/SilentFlowClient.d.ts.map +1 -1
- package/dist/client/SilentFlowClient.mjs +118 -125
- package/dist/client/SilentFlowClient.mjs.map +1 -1
- package/dist/config/AppTokenProvider.d.ts +38 -38
- package/dist/config/ClientConfiguration.d.ts +150 -150
- package/dist/config/ClientConfiguration.mjs +97 -97
- package/dist/crypto/ICrypto.d.ts +58 -62
- package/dist/crypto/ICrypto.d.ts.map +1 -1
- package/dist/crypto/ICrypto.mjs +30 -33
- package/dist/crypto/ICrypto.mjs.map +1 -1
- package/dist/crypto/IGuidGenerator.d.ts +4 -4
- package/dist/crypto/JoseHeader.d.ts +22 -22
- package/dist/crypto/JoseHeader.mjs +37 -37
- package/dist/crypto/PopTokenGenerator.d.ts +60 -60
- package/dist/crypto/PopTokenGenerator.mjs +82 -82
- package/dist/crypto/SignedHttpRequest.d.ts +11 -11
- package/dist/error/AuthError.d.ts +44 -44
- package/dist/error/AuthError.mjs +46 -46
- package/dist/error/AuthErrorCodes.d.ts +5 -5
- package/dist/error/AuthErrorCodes.mjs +9 -9
- package/dist/error/ClientAuthError.d.ts +237 -232
- package/dist/error/ClientAuthError.d.ts.map +1 -1
- package/dist/error/ClientAuthError.mjs +250 -245
- package/dist/error/ClientAuthError.mjs.map +1 -1
- package/dist/error/ClientAuthErrorCodes.d.ts +44 -43
- package/dist/error/ClientAuthErrorCodes.d.ts.map +1 -1
- package/dist/error/ClientAuthErrorCodes.mjs +49 -48
- package/dist/error/ClientAuthErrorCodes.mjs.map +1 -1
- package/dist/error/ClientConfigurationError.d.ts +128 -128
- package/dist/error/ClientConfigurationError.mjs +135 -135
- package/dist/error/ClientConfigurationErrorCodes.d.ts +22 -22
- package/dist/error/ClientConfigurationErrorCodes.mjs +26 -26
- package/dist/error/InteractionRequiredAuthError.d.ts +57 -57
- package/dist/error/InteractionRequiredAuthError.mjs +76 -76
- package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +5 -5
- package/dist/error/InteractionRequiredAuthErrorCodes.mjs +11 -11
- package/dist/error/JoseHeaderError.d.ts +15 -15
- package/dist/error/JoseHeaderError.mjs +22 -22
- package/dist/error/JoseHeaderErrorCodes.d.ts +2 -2
- package/dist/error/JoseHeaderErrorCodes.mjs +6 -6
- package/dist/error/ServerError.d.ts +7 -7
- package/dist/error/ServerError.mjs +14 -14
- package/dist/index.cjs +8830 -8612
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +96 -96
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/logger/Logger.d.ts +95 -95
- package/dist/logger/Logger.mjs +188 -188
- package/dist/network/INetworkModule.d.ts +29 -29
- package/dist/network/INetworkModule.mjs +12 -12
- package/dist/network/NetworkManager.d.ts +33 -33
- package/dist/network/NetworkManager.mjs +34 -34
- package/dist/network/RequestThumbprint.d.ts +16 -16
- package/dist/network/ThrottlingUtils.d.ts +42 -42
- package/dist/network/ThrottlingUtils.mjs +95 -95
- package/dist/packageMetadata.d.ts +2 -2
- package/dist/packageMetadata.mjs +4 -4
- package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
- package/dist/request/AuthenticationHeaderParser.mjs +55 -55
- package/dist/request/BaseAuthRequest.d.ts +40 -40
- package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
- package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
- package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
- package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
- package/dist/request/CommonEndSessionRequest.d.ts +21 -21
- package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
- package/dist/request/CommonRefreshTokenRequest.d.ts +22 -19
- package/dist/request/CommonRefreshTokenRequest.d.ts.map +1 -1
- package/dist/request/CommonSilentFlowRequest.d.ts +20 -18
- package/dist/request/CommonSilentFlowRequest.d.ts.map +1 -1
- package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
- package/dist/request/NativeRequest.d.ts +19 -19
- package/dist/request/NativeSignOutRequest.d.ts +5 -5
- package/dist/request/RequestParameterBuilder.d.ts +217 -217
- package/dist/request/RequestParameterBuilder.mjs +381 -381
- package/dist/request/RequestValidator.d.ts +33 -33
- package/dist/request/RequestValidator.mjs +81 -81
- package/dist/request/ScopeSet.d.ts +88 -88
- package/dist/request/ScopeSet.mjs +197 -197
- package/dist/request/StoreInCache.d.ts +8 -8
- package/dist/response/AuthenticationResult.d.ts +41 -41
- package/dist/response/AuthorizationCodePayload.d.ts +13 -13
- package/dist/response/DeviceCodeResponse.d.ts +25 -25
- package/dist/response/ExternalTokenResponse.d.ts +15 -15
- package/dist/response/IMDSBadResponse.d.ts +4 -4
- package/dist/response/ResponseHandler.d.ts +67 -67
- package/dist/response/ResponseHandler.d.ts.map +1 -1
- package/dist/response/ResponseHandler.mjs +315 -311
- package/dist/response/ResponseHandler.mjs.map +1 -1
- package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
- package/dist/response/ServerAuthorizationTokenResponse.d.ts +46 -46
- package/dist/telemetry/performance/IPerformanceClient.d.ts +51 -51
- package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
- package/dist/telemetry/performance/PerformanceClient.d.ts +191 -191
- package/dist/telemetry/performance/PerformanceClient.mjs +409 -409
- package/dist/telemetry/performance/PerformanceEvent.d.ts +457 -433
- package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
- package/dist/telemetry/performance/PerformanceEvent.mjs +249 -234
- package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
- package/dist/telemetry/performance/StubPerformanceClient.d.ts +24 -24
- package/dist/telemetry/performance/StubPerformanceClient.mjs +76 -76
- package/dist/telemetry/server/ServerTelemetryManager.d.ts +66 -66
- package/dist/telemetry/server/ServerTelemetryManager.mjs +197 -197
- package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
- package/dist/url/IUri.d.ts +12 -12
- package/dist/url/UrlString.d.ts +83 -83
- package/dist/url/UrlString.mjs +279 -279
- package/dist/utils/Constants.d.ts +366 -366
- package/dist/utils/Constants.mjs +376 -376
- package/dist/utils/FunctionWrappers.d.ts +27 -27
- package/dist/utils/FunctionWrappers.d.ts.map +1 -1
- package/dist/utils/FunctionWrappers.mjs +84 -85
- package/dist/utils/FunctionWrappers.mjs.map +1 -1
- package/dist/utils/MsalTypes.d.ts +6 -6
- package/dist/utils/ProtocolUtils.d.ts +42 -42
- package/dist/utils/ProtocolUtils.mjs +69 -69
- package/dist/utils/StringUtils.d.ts +40 -40
- package/dist/utils/StringUtils.mjs +95 -95
- package/dist/utils/TimeUtils.d.ts +27 -27
- package/dist/utils/TimeUtils.mjs +45 -45
- package/package.json +1 -1
- package/src/account/AccountInfo.ts +0 -1
- package/src/authority/Authority.ts +207 -127
- package/src/authority/AuthorityFactory.ts +4 -4
- package/src/authority/AuthorityMetadata.ts +87 -0
- package/src/authority/AuthorityOptions.ts +9 -0
- package/src/cache/CacheManager.ts +187 -46
- package/src/cache/entities/AccountEntity.ts +0 -3
- package/src/cache/utils/CacheTypes.ts +7 -6
- package/src/client/AuthorizationCodeClient.ts +12 -3
- package/src/client/BaseClient.ts +9 -6
- package/src/client/RefreshTokenClient.ts +36 -9
- package/src/client/SilentFlowClient.ts +49 -49
- package/src/crypto/ICrypto.ts +0 -7
- package/src/error/ClientAuthError.ts +8 -0
- package/src/error/ClientAuthErrorCodes.ts +1 -0
- package/src/index.ts +7 -1
- package/src/packageMetadata.ts +1 -1
- package/src/request/CommonRefreshTokenRequest.ts +3 -0
- package/src/request/CommonSilentFlowRequest.ts +2 -0
- package/src/response/ResponseHandler.ts +9 -3
- package/src/telemetry/performance/PerformanceEvent.ts +33 -2
- 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
|
-
|
|
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
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
-
|
|
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.
|
|
261
|
+
const allAccounts = this.getAllAccounts(accountFilter);
|
|
262
262
|
if (allAccounts.length > 0) {
|
|
263
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
*
|
|
368
|
-
*
|
|
369
|
-
* @param
|
|
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.
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
environment?: string;
|
|
56
|
+
export type AccountFilter = Omit<
|
|
57
|
+
Partial<AccountInfo>,
|
|
58
|
+
"idToken" | "idTokenClaims"
|
|
59
|
+
> & {
|
|
60
60
|
realm?: string;
|
|
61
|
-
|
|
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:
|
|
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.
|
|
300
|
+
PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint,
|
|
299
301
|
this.logger,
|
|
300
302
|
this.performanceClient,
|
|
301
303
|
request.correlationId
|
|
302
|
-
)(
|
|
304
|
+
)(
|
|
305
|
+
endpoint,
|
|
306
|
+
requestBody,
|
|
307
|
+
headers,
|
|
308
|
+
thumbprint,
|
|
309
|
+
request.correlationId,
|
|
310
|
+
PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint
|
|
311
|
+
);
|
|
303
312
|
}
|
|
304
313
|
|
|
305
314
|
/**
|
package/src/client/BaseClient.ts
CHANGED
|
@@ -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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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 =
|
|
199
|
-
|
|
200
|
-
|
|
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:
|
|
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.
|
|
280
|
+
PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint,
|
|
275
281
|
this.logger,
|
|
276
282
|
this.performanceClient,
|
|
277
283
|
request.correlationId
|
|
278
|
-
)(
|
|
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(
|
|
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
|
}
|