@azure/msal-common 12.1.0 → 14.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +62 -62
- package/dist/account/AccountInfo.d.ts +2 -2
- package/dist/account/AccountInfo.d.ts.map +1 -1
- package/dist/account/AuthToken.d.ts.map +1 -1
- package/dist/account/AuthToken.js +13 -14
- package/dist/account/AuthToken.js.map +1 -1
- package/dist/account/CcsCredential.d.ts +1 -1
- package/dist/account/CcsCredential.d.ts.map +1 -1
- package/dist/account/CcsCredential.js +1 -1
- package/dist/account/CcsCredential.js.map +1 -1
- package/dist/account/ClientCredentials.d.ts +2 -2
- package/dist/account/ClientCredentials.d.ts.map +1 -1
- package/dist/account/ClientInfo.d.ts +1 -1
- package/dist/account/ClientInfo.d.ts.map +1 -1
- package/dist/account/ClientInfo.js +6 -4
- package/dist/account/ClientInfo.js.map +1 -1
- package/dist/account/DecodedAuthToken.d.ts.map +1 -1
- package/dist/account/TokenClaims.d.ts +1 -1
- package/dist/account/TokenClaims.d.ts.map +1 -1
- package/dist/authority/Authority.d.ts.map +1 -1
- package/dist/authority/Authority.js +464 -546
- package/dist/authority/Authority.js.map +1 -1
- package/dist/authority/AuthorityFactory.d.ts.map +1 -1
- package/dist/authority/AuthorityFactory.js +19 -34
- package/dist/authority/AuthorityFactory.js.map +1 -1
- package/dist/authority/AuthorityMetadata.d.ts.map +1 -1
- package/dist/authority/AuthorityMetadata.js +873 -4
- package/dist/authority/AuthorityMetadata.js.map +1 -1
- package/dist/authority/AuthorityOptions.d.ts +1 -1
- package/dist/authority/AuthorityOptions.d.ts.map +1 -1
- package/dist/authority/AuthorityOptions.js +1 -1
- package/dist/authority/AuthorityOptions.js.map +1 -1
- package/dist/authority/AuthorityType.js +1 -1
- package/dist/authority/AuthorityType.js.map +1 -1
- package/dist/authority/AzureRegion.d.ts +1 -1
- package/dist/authority/AzureRegion.d.ts.map +1 -1
- package/dist/authority/AzureRegionConfiguration.d.ts +1 -1
- package/dist/authority/AzureRegionConfiguration.d.ts.map +1 -1
- package/dist/authority/CloudDiscoveryMetadata.d.ts +1 -1
- package/dist/authority/CloudDiscoveryMetadata.d.ts.map +1 -1
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +1 -1
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts.map +1 -1
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.js +1 -1
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.js.map +1 -1
- package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +1 -1
- package/dist/authority/CloudInstanceDiscoveryResponse.d.ts.map +1 -1
- package/dist/authority/CloudInstanceDiscoveryResponse.js +1 -1
- package/dist/authority/CloudInstanceDiscoveryResponse.js.map +1 -1
- package/dist/authority/ImdsOptions.d.ts +1 -1
- package/dist/authority/ImdsOptions.d.ts.map +1 -1
- package/dist/authority/OpenIdConfigResponse.d.ts +1 -1
- package/dist/authority/OpenIdConfigResponse.d.ts.map +1 -1
- package/dist/authority/OpenIdConfigResponse.js +1 -1
- package/dist/authority/OpenIdConfigResponse.js.map +1 -1
- package/dist/authority/ProtocolMode.js +1 -1
- package/dist/authority/ProtocolMode.js.map +1 -1
- package/dist/authority/RegionDiscovery.d.ts.map +1 -1
- package/dist/authority/RegionDiscovery.js +85 -107
- package/dist/authority/RegionDiscovery.js.map +1 -1
- package/dist/authority/RegionDiscoveryMetadata.d.ts +1 -1
- package/dist/authority/RegionDiscoveryMetadata.d.ts.map +1 -1
- package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts.map +1 -1
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.js +440 -475
- package/dist/cache/CacheManager.js.map +1 -1
- package/dist/cache/entities/AccessTokenEntity.d.ts.map +1 -1
- package/dist/cache/entities/AccessTokenEntity.js +21 -22
- package/dist/cache/entities/AccessTokenEntity.js.map +1 -1
- package/dist/cache/entities/AccountEntity.d.ts.map +1 -1
- package/dist/cache/entities/AccountEntity.js +78 -66
- package/dist/cache/entities/AccountEntity.js.map +1 -1
- package/dist/cache/entities/AppMetadataEntity.d.ts.map +1 -1
- package/dist/cache/entities/AppMetadataEntity.js +16 -17
- package/dist/cache/entities/AppMetadataEntity.js.map +1 -1
- package/dist/cache/entities/AuthorityMetadataEntity.d.ts.map +1 -1
- package/dist/cache/entities/AuthorityMetadataEntity.js +22 -19
- package/dist/cache/entities/AuthorityMetadataEntity.js.map +1 -1
- package/dist/cache/entities/CacheRecord.d.ts.map +1 -1
- package/dist/cache/entities/CacheRecord.js +4 -5
- package/dist/cache/entities/CacheRecord.js.map +1 -1
- package/dist/cache/entities/CredentialEntity.d.ts.map +1 -1
- package/dist/cache/entities/CredentialEntity.js +35 -34
- package/dist/cache/entities/CredentialEntity.js.map +1 -1
- package/dist/cache/entities/IdTokenEntity.d.ts.map +1 -1
- package/dist/cache/entities/IdTokenEntity.js +8 -14
- package/dist/cache/entities/IdTokenEntity.js.map +1 -1
- package/dist/cache/entities/RefreshTokenEntity.d.ts.map +1 -1
- package/dist/cache/entities/RefreshTokenEntity.js +8 -14
- package/dist/cache/entities/RefreshTokenEntity.js.map +1 -1
- package/dist/cache/entities/ServerTelemetryEntity.d.ts.map +1 -1
- package/dist/cache/entities/ServerTelemetryEntity.js +8 -9
- package/dist/cache/entities/ServerTelemetryEntity.js.map +1 -1
- package/dist/cache/entities/ThrottlingEntity.js +9 -11
- package/dist/cache/entities/ThrottlingEntity.js.map +1 -1
- package/dist/cache/interface/ICacheManager.d.ts.map +1 -1
- package/dist/cache/persistence/TokenCacheContext.d.ts.map +1 -1
- package/dist/cache/persistence/TokenCacheContext.js +16 -25
- package/dist/cache/persistence/TokenCacheContext.js.map +1 -1
- package/dist/cache/utils/CacheTypes.d.ts +11 -11
- package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.js +341 -384
- package/dist/client/AuthorizationCodeClient.js.map +1 -1
- package/dist/client/BaseClient.d.ts.map +1 -1
- package/dist/client/BaseClient.js +27 -35
- package/dist/client/BaseClient.js.map +1 -1
- package/dist/client/RefreshTokenClient.d.ts.map +1 -1
- package/dist/client/RefreshTokenClient.js +208 -241
- package/dist/client/RefreshTokenClient.js.map +1 -1
- package/dist/client/SilentFlowClient.d.ts.map +1 -1
- package/dist/client/SilentFlowClient.js +77 -105
- package/dist/client/SilentFlowClient.js.map +1 -1
- package/dist/config/AppTokenProvider.d.ts +2 -2
- package/dist/config/AppTokenProvider.d.ts.map +1 -1
- package/dist/config/ClientConfiguration.d.ts +9 -9
- package/dist/config/ClientConfiguration.d.ts.map +1 -1
- package/dist/config/ClientConfiguration.js +40 -43
- package/dist/config/ClientConfiguration.js.map +1 -1
- package/dist/crypto/ICrypto.d.ts +2 -2
- package/dist/crypto/ICrypto.d.ts.map +1 -1
- package/dist/crypto/ICrypto.js +27 -58
- package/dist/crypto/ICrypto.js.map +1 -1
- package/dist/crypto/JoseHeader.d.ts +1 -1
- package/dist/crypto/JoseHeader.d.ts.map +1 -1
- package/dist/crypto/JoseHeader.js +8 -9
- package/dist/crypto/JoseHeader.js.map +1 -1
- package/dist/crypto/PopTokenGenerator.d.ts +2 -2
- package/dist/crypto/PopTokenGenerator.d.ts.map +1 -1
- package/dist/crypto/PopTokenGenerator.js +47 -71
- package/dist/crypto/PopTokenGenerator.js.map +1 -1
- package/dist/crypto/SignedHttpRequest.d.ts +1 -1
- package/dist/crypto/SignedHttpRequest.d.ts.map +1 -1
- package/dist/error/AuthError.d.ts.map +1 -1
- package/dist/error/AuthError.js +25 -28
- package/dist/error/AuthError.js.map +1 -1
- package/dist/error/ClientAuthError.d.ts +8 -0
- package/dist/error/ClientAuthError.d.ts.map +1 -1
- package/dist/error/ClientAuthError.js +187 -181
- package/dist/error/ClientAuthError.js.map +1 -1
- package/dist/error/ClientConfigurationError.d.ts.map +1 -1
- package/dist/error/ClientConfigurationError.js +82 -86
- package/dist/error/ClientConfigurationError.js.map +1 -1
- package/dist/error/InteractionRequiredAuthError.d.ts.map +1 -1
- package/dist/error/InteractionRequiredAuthError.js +36 -35
- package/dist/error/InteractionRequiredAuthError.js.map +1 -1
- package/dist/error/JoseHeaderError.d.ts.map +1 -1
- package/dist/error/JoseHeaderError.js +14 -18
- package/dist/error/JoseHeaderError.js.map +1 -1
- package/dist/error/ServerError.d.ts.map +1 -1
- package/dist/error/ServerError.js +7 -11
- package/dist/error/ServerError.js.map +1 -1
- package/dist/index.cjs.js +4221 -4476
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +20 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -1
- package/dist/logger/Logger.d.ts +1 -1
- package/dist/logger/Logger.d.ts.map +1 -1
- package/dist/logger/Logger.js +70 -60
- package/dist/logger/Logger.js.map +1 -1
- package/dist/network/INetworkModule.d.ts +1 -1
- package/dist/network/INetworkModule.d.ts.map +1 -1
- package/dist/network/INetworkModule.js +7 -7
- package/dist/network/INetworkModule.js.map +1 -1
- package/dist/network/NetworkManager.d.ts +4 -3
- package/dist/network/NetworkManager.d.ts.map +1 -1
- package/dist/network/NetworkManager.js +21 -35
- package/dist/network/NetworkManager.js.map +1 -1
- package/dist/network/RequestThumbprint.d.ts +1 -1
- package/dist/network/RequestThumbprint.d.ts.map +1 -1
- package/dist/network/ThrottlingUtils.d.ts.map +1 -1
- package/dist/network/ThrottlingUtils.js +37 -36
- package/dist/network/ThrottlingUtils.js.map +1 -1
- package/dist/packageMetadata.d.ts +1 -1
- package/dist/packageMetadata.d.ts.map +1 -1
- package/dist/packageMetadata.js +3 -3
- package/dist/packageMetadata.js.map +1 -1
- package/dist/request/AuthenticationHeaderParser.d.ts.map +1 -1
- package/dist/request/AuthenticationHeaderParser.js +17 -18
- package/dist/request/AuthenticationHeaderParser.js.map +1 -1
- package/dist/request/BaseAuthRequest.d.ts +1 -1
- package/dist/request/BaseAuthRequest.d.ts.map +1 -1
- package/dist/request/CommonAuthorizationCodeRequest.d.ts +1 -1
- package/dist/request/CommonAuthorizationCodeRequest.d.ts.map +1 -1
- package/dist/request/CommonAuthorizationUrlRequest.d.ts +1 -1
- package/dist/request/CommonAuthorizationUrlRequest.d.ts.map +1 -1
- package/dist/request/CommonClientCredentialRequest.d.ts +1 -1
- package/dist/request/CommonClientCredentialRequest.d.ts.map +1 -1
- package/dist/request/CommonDeviceCodeRequest.d.ts +1 -1
- package/dist/request/CommonDeviceCodeRequest.d.ts.map +1 -1
- package/dist/request/CommonEndSessionRequest.d.ts +1 -1
- package/dist/request/CommonEndSessionRequest.d.ts.map +1 -1
- package/dist/request/CommonOnBehalfOfRequest.d.ts +1 -1
- package/dist/request/CommonOnBehalfOfRequest.d.ts.map +1 -1
- package/dist/request/CommonRefreshTokenRequest.d.ts +1 -1
- package/dist/request/CommonRefreshTokenRequest.d.ts.map +1 -1
- package/dist/request/CommonSilentFlowRequest.d.ts +1 -1
- package/dist/request/CommonSilentFlowRequest.d.ts.map +1 -1
- package/dist/request/CommonUsernamePasswordRequest.d.ts +1 -1
- package/dist/request/CommonUsernamePasswordRequest.d.ts.map +1 -1
- package/dist/request/NativeRequest.d.ts +1 -1
- package/dist/request/NativeRequest.d.ts.map +1 -1
- package/dist/request/NativeSignOutRequest.d.ts +1 -1
- package/dist/request/NativeSignOutRequest.d.ts.map +1 -1
- package/dist/request/RequestParameterBuilder.d.ts.map +1 -1
- package/dist/request/RequestParameterBuilder.js +111 -113
- package/dist/request/RequestParameterBuilder.js.map +1 -1
- package/dist/request/RequestValidator.d.ts.map +1 -1
- package/dist/request/RequestValidator.js +23 -28
- package/dist/request/RequestValidator.js.map +1 -1
- package/dist/request/ScopeSet.d.ts.map +1 -1
- package/dist/request/ScopeSet.js +70 -70
- package/dist/request/ScopeSet.js.map +1 -1
- package/dist/response/AuthenticationResult.d.ts +1 -1
- package/dist/response/AuthenticationResult.d.ts.map +1 -1
- package/dist/response/AuthorizationCodePayload.d.ts +1 -1
- package/dist/response/AuthorizationCodePayload.d.ts.map +1 -1
- package/dist/response/DeviceCodeResponse.d.ts +2 -2
- package/dist/response/DeviceCodeResponse.d.ts.map +1 -1
- package/dist/response/ExternalTokenResponse.d.ts +1 -1
- package/dist/response/ExternalTokenResponse.d.ts.map +1 -1
- package/dist/response/IMDSBadResponse.d.ts +1 -1
- package/dist/response/IMDSBadResponse.d.ts.map +1 -1
- package/dist/response/ResponseHandler.d.ts.map +1 -1
- package/dist/response/ResponseHandler.js +195 -180
- package/dist/response/ResponseHandler.js.map +1 -1
- package/dist/response/ServerAuthorizationCodeResponse.d.ts +1 -1
- package/dist/response/ServerAuthorizationCodeResponse.d.ts.map +1 -1
- package/dist/response/ServerAuthorizationTokenResponse.d.ts +1 -1
- package/dist/response/ServerAuthorizationTokenResponse.d.ts.map +1 -1
- package/dist/telemetry/performance/IPerformanceClient.d.ts +3 -4
- package/dist/telemetry/performance/IPerformanceClient.d.ts.map +1 -1
- package/dist/telemetry/performance/PerformanceClient.d.ts +2 -10
- package/dist/telemetry/performance/PerformanceClient.d.ts.map +1 -1
- package/dist/telemetry/performance/PerformanceClient.js +134 -129
- package/dist/telemetry/performance/PerformanceClient.js.map +1 -1
- package/dist/telemetry/performance/PerformanceEvent.d.ts +4 -4
- package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
- package/dist/telemetry/performance/PerformanceEvent.js +2 -2
- package/dist/telemetry/performance/PerformanceEvent.js.map +1 -1
- package/dist/telemetry/performance/StubPerformanceClient.d.ts +5 -3
- package/dist/telemetry/performance/StubPerformanceClient.d.ts.map +1 -1
- package/dist/telemetry/performance/StubPerformanceClient.js +23 -32
- package/dist/telemetry/performance/StubPerformanceClient.js.map +1 -1
- package/dist/telemetry/server/ServerTelemetryManager.d.ts +1 -2
- package/dist/telemetry/server/ServerTelemetryManager.d.ts.map +1 -1
- package/dist/telemetry/server/ServerTelemetryManager.js +106 -68
- package/dist/telemetry/server/ServerTelemetryManager.js.map +1 -1
- package/dist/telemetry/server/ServerTelemetryRequest.d.ts +1 -1
- package/dist/telemetry/server/ServerTelemetryRequest.d.ts.map +1 -1
- package/dist/url/UrlString.d.ts.map +1 -1
- package/dist/url/UrlString.js +85 -74
- package/dist/url/UrlString.js.map +1 -1
- package/dist/utils/Constants.d.ts.map +1 -1
- package/dist/utils/Constants.js +28 -27
- package/dist/utils/Constants.js.map +1 -1
- package/dist/utils/MsalTypes.d.ts +1 -1
- package/dist/utils/MsalTypes.d.ts.map +1 -1
- package/dist/utils/ProtocolUtils.d.ts +2 -2
- package/dist/utils/ProtocolUtils.d.ts.map +1 -1
- package/dist/utils/ProtocolUtils.js +27 -24
- package/dist/utils/ProtocolUtils.js.map +1 -1
- package/dist/utils/StringUtils.d.ts.map +1 -1
- package/dist/utils/StringUtils.js +44 -42
- package/dist/utils/StringUtils.js.map +1 -1
- package/dist/utils/TimeUtils.d.ts.map +1 -1
- package/dist/utils/TimeUtils.js +16 -19
- package/dist/utils/TimeUtils.js.map +1 -1
- package/package.json +79 -76
- package/dist/_virtual/_tslib.js +0 -90
- package/dist/_virtual/_tslib.js.map +0 -1
- package/dist/client/ClientCredentialClient.d.ts +0 -38
- package/dist/client/ClientCredentialClient.d.ts.map +0 -1
- package/dist/client/ClientCredentialClient.js +0 -203
- package/dist/client/ClientCredentialClient.js.map +0 -1
- package/dist/client/DeviceCodeClient.d.ts +0 -57
- package/dist/client/DeviceCodeClient.d.ts.map +0 -1
- package/dist/client/DeviceCodeClient.js +0 -250
- package/dist/client/DeviceCodeClient.js.map +0 -1
- package/dist/client/OnBehalfOfClient.d.ts +0 -51
- package/dist/client/OnBehalfOfClient.d.ts.map +0 -1
- package/dist/client/OnBehalfOfClient.js +0 -248
- package/dist/client/OnBehalfOfClient.js.map +0 -1
- package/dist/client/UsernamePasswordClient.d.ts +0 -29
- package/dist/client/UsernamePasswordClient.d.ts.map +0 -1
- package/dist/client/UsernamePasswordClient.js +0 -129
- package/dist/client/UsernamePasswordClient.js.map +0 -1
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
/*! @azure/msal-common
|
|
1
|
+
/*! @azure/msal-common v14.0.0-alpha.1 2023-05-08 */
|
|
2
2
|
'use strict';
|
|
3
|
-
import { __extends, __awaiter, __generator, __assign, __spreadArrays } from '../_virtual/_tslib.js';
|
|
4
3
|
import { BaseClient } from './BaseClient.js';
|
|
5
4
|
import { RequestParameterBuilder } from '../request/RequestParameterBuilder.js';
|
|
6
|
-
import { Separators,
|
|
5
|
+
import { Separators, GrantType, AuthenticationScheme, AADServerParamKeys, PromptValue, HeaderNames } from '../utils/Constants.js';
|
|
7
6
|
import { ResponseHandler } from '../response/ResponseHandler.js';
|
|
8
7
|
import { StringUtils } from '../utils/StringUtils.js';
|
|
9
8
|
import { ClientAuthError } from '../error/ClientAuthError.js';
|
|
@@ -23,13 +22,11 @@ import { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.js'
|
|
|
23
22
|
/**
|
|
24
23
|
* Oauth2.0 Authorization Code client
|
|
25
24
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
var _this = _super.call(this, configuration, performanceClient) || this;
|
|
25
|
+
class AuthorizationCodeClient extends BaseClient {
|
|
26
|
+
constructor(configuration, performanceClient) {
|
|
27
|
+
super(configuration, performanceClient);
|
|
30
28
|
// Flag to indicate if client is for hybrid spa auth code redemption
|
|
31
|
-
|
|
32
|
-
return _this;
|
|
29
|
+
this.includeRedirectUri = true;
|
|
33
30
|
}
|
|
34
31
|
/**
|
|
35
32
|
* Creates the URL of the authorization request letting the user input credentials and consent to the
|
|
@@ -41,422 +38,385 @@ var AuthorizationCodeClient = /** @class */ (function (_super) {
|
|
|
41
38
|
* acquireToken(AuthorizationCodeRequest)
|
|
42
39
|
* @param request
|
|
43
40
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
case 0:
|
|
51
|
-
(_a = this.performanceClient) === null || _a === void 0 ? void 0 : _a.addQueueMeasurement(PerformanceEvents.GetAuthCodeUrl, request.correlationId);
|
|
52
|
-
(_b = this.performanceClient) === null || _b === void 0 ? void 0 : _b.setPreQueueTime(PerformanceEvents.AuthClientCreateQueryString, request.correlationId);
|
|
53
|
-
return [4 /*yield*/, this.createAuthCodeUrlQueryString(request)];
|
|
54
|
-
case 1:
|
|
55
|
-
queryString = _c.sent();
|
|
56
|
-
return [2 /*return*/, UrlString.appendQueryString(this.authority.authorizationEndpoint, queryString)];
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
};
|
|
41
|
+
async getAuthCodeUrl(request) {
|
|
42
|
+
this.performanceClient?.addQueueMeasurement(PerformanceEvents.GetAuthCodeUrl, request.correlationId);
|
|
43
|
+
this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthClientCreateQueryString, request.correlationId);
|
|
44
|
+
const queryString = await this.createAuthCodeUrlQueryString(request);
|
|
45
|
+
return UrlString.appendQueryString(this.authority.authorizationEndpoint, queryString);
|
|
46
|
+
}
|
|
61
47
|
/**
|
|
62
48
|
* API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the
|
|
63
49
|
* authorization_code_grant
|
|
64
50
|
* @param request
|
|
65
51
|
*/
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
(_f = this.performanceClient) === null || _f === void 0 ? void 0 : _f.setPreQueueTime(PerformanceEvents.HandleServerTokenResponse, request.correlationId);
|
|
96
|
-
return [2 /*return*/, responseHandler.handleServerTokenResponse(response.body, this.authority, reqTimestamp, request, authCodePayload, undefined, undefined, undefined, requestId).then(function (result) {
|
|
97
|
-
atsMeasurement === null || atsMeasurement === void 0 ? void 0 : atsMeasurement.endMeasurement({
|
|
98
|
-
success: true
|
|
99
|
-
});
|
|
100
|
-
return result;
|
|
101
|
-
})
|
|
102
|
-
.catch(function (error) {
|
|
103
|
-
_this.logger.verbose("Error in fetching token in ACC", request.correlationId);
|
|
104
|
-
atsMeasurement === null || atsMeasurement === void 0 ? void 0 : atsMeasurement.endMeasurement({
|
|
105
|
-
errorCode: error.errorCode,
|
|
106
|
-
subErrorCode: error.subError,
|
|
107
|
-
success: false
|
|
108
|
-
});
|
|
109
|
-
throw error;
|
|
110
|
-
})];
|
|
111
|
-
}
|
|
52
|
+
async acquireToken(request, authCodePayload) {
|
|
53
|
+
if (!request || !request.code) {
|
|
54
|
+
throw ClientAuthError.createTokenRequestCannotBeMadeError();
|
|
55
|
+
}
|
|
56
|
+
this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientAcquireToken, request.correlationId);
|
|
57
|
+
const atsMeasurement = this.performanceClient?.startMeasurement(
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
"AuthCodeClientAcquireToken", request.correlationId);
|
|
60
|
+
this.logger.info("in acquireToken call in auth-code client");
|
|
61
|
+
const reqTimestamp = TimeUtils.nowSeconds();
|
|
62
|
+
this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthClientExecuteTokenRequest, request.correlationId);
|
|
63
|
+
const response = await this.executeTokenRequest(this.authority, request);
|
|
64
|
+
// Retrieve requestId from response headers
|
|
65
|
+
const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];
|
|
66
|
+
const httpVerAuthority = response.headers?.[HeaderNames.X_MS_HTTP_VERSION];
|
|
67
|
+
if (httpVerAuthority) {
|
|
68
|
+
atsMeasurement?.addStaticFields({
|
|
69
|
+
httpVerAuthority,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin, this.performanceClient);
|
|
73
|
+
// Validate response. This function throws a server error if an error is returned by the server.
|
|
74
|
+
responseHandler.validateTokenResponse(response.body);
|
|
75
|
+
this.performanceClient?.setPreQueueTime(PerformanceEvents.HandleServerTokenResponse, request.correlationId);
|
|
76
|
+
return responseHandler
|
|
77
|
+
.handleServerTokenResponse(response.body, this.authority, reqTimestamp, request, authCodePayload, undefined, undefined, undefined, requestId)
|
|
78
|
+
.then((result) => {
|
|
79
|
+
atsMeasurement?.endMeasurement({
|
|
80
|
+
success: true,
|
|
112
81
|
});
|
|
82
|
+
return result;
|
|
83
|
+
})
|
|
84
|
+
.catch((error) => {
|
|
85
|
+
this.logger.verbose("Error in fetching token in ACC", request.correlationId);
|
|
86
|
+
atsMeasurement?.endMeasurement({
|
|
87
|
+
errorCode: error.errorCode,
|
|
88
|
+
subErrorCode: error.subError,
|
|
89
|
+
success: false,
|
|
90
|
+
});
|
|
91
|
+
throw error;
|
|
113
92
|
});
|
|
114
|
-
}
|
|
93
|
+
}
|
|
115
94
|
/**
|
|
116
95
|
* Handles the hash fragment response from public client code request. Returns a code response used by
|
|
117
96
|
* the client to exchange for a token in acquireToken.
|
|
118
97
|
* @param hashFragment
|
|
119
98
|
*/
|
|
120
|
-
|
|
99
|
+
handleFragmentResponse(hashFragment, cachedState) {
|
|
121
100
|
// Handle responses.
|
|
122
|
-
|
|
101
|
+
const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, null, null);
|
|
123
102
|
// Deserialize hash fragment response parameters.
|
|
124
|
-
|
|
103
|
+
const hashUrlString = new UrlString(hashFragment);
|
|
125
104
|
// Deserialize hash fragment response parameters.
|
|
126
|
-
|
|
105
|
+
const serverParams = UrlString.getDeserializedHash(hashUrlString.getHash());
|
|
127
106
|
// Get code response
|
|
128
107
|
responseHandler.validateServerAuthorizationCodeResponse(serverParams, cachedState, this.cryptoUtils);
|
|
129
108
|
// throw when there is no auth code in the response
|
|
130
109
|
if (!serverParams.code) {
|
|
131
110
|
throw ClientAuthError.createNoAuthCodeInServerResponseError();
|
|
132
111
|
}
|
|
133
|
-
return
|
|
112
|
+
return {
|
|
113
|
+
...serverParams,
|
|
134
114
|
// Code param is optional in ServerAuthorizationCodeResponse but required in AuthorizationCodePaylod
|
|
135
|
-
code: serverParams.code
|
|
136
|
-
|
|
115
|
+
code: serverParams.code,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
137
118
|
/**
|
|
138
119
|
* Used to log out the current user, and redirect the user to the postLogoutRedirectUri.
|
|
139
120
|
* Default behaviour is to redirect the user to `window.location.href`.
|
|
140
121
|
* @param authorityUri
|
|
141
122
|
*/
|
|
142
|
-
|
|
123
|
+
getLogoutUri(logoutRequest) {
|
|
143
124
|
// Throw error if logoutRequest is null/undefined
|
|
144
125
|
if (!logoutRequest) {
|
|
145
126
|
throw ClientConfigurationError.createEmptyLogoutRequestError();
|
|
146
127
|
}
|
|
147
|
-
|
|
128
|
+
const queryString = this.createLogoutUrlQueryString(logoutRequest);
|
|
148
129
|
// Construct logout URI
|
|
149
130
|
return UrlString.appendQueryString(this.authority.endSessionEndpoint, queryString);
|
|
150
|
-
}
|
|
131
|
+
}
|
|
151
132
|
/**
|
|
152
133
|
* Executes POST request to token endpoint
|
|
153
134
|
* @param authority
|
|
154
135
|
* @param request
|
|
155
136
|
*/
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
authenticationScheme: request.authenticationScheme,
|
|
190
|
-
resourceRequestMethod: request.resourceRequestMethod,
|
|
191
|
-
resourceRequestUri: request.resourceRequestUri,
|
|
192
|
-
shrClaims: request.shrClaims,
|
|
193
|
-
sshKid: request.sshKid
|
|
194
|
-
};
|
|
195
|
-
return [2 /*return*/, this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint)];
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
};
|
|
137
|
+
async executeTokenRequest(authority, request) {
|
|
138
|
+
this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientExecuteTokenRequest, request.correlationId);
|
|
139
|
+
this.performanceClient?.setPreQueueTime(PerformanceEvents.AuthClientCreateTokenRequestBody, request.correlationId);
|
|
140
|
+
const queryParametersString = this.createTokenQueryParameters(request);
|
|
141
|
+
const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString);
|
|
142
|
+
const requestBody = await this.createTokenRequestBody(request);
|
|
143
|
+
let ccsCredential = undefined;
|
|
144
|
+
if (request.clientInfo) {
|
|
145
|
+
try {
|
|
146
|
+
const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils);
|
|
147
|
+
ccsCredential = {
|
|
148
|
+
credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,
|
|
149
|
+
type: CcsCredentialType.HOME_ACCOUNT_ID,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
this.logger.verbose("Could not parse client info for CCS Header: " + e);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const headers = this.createTokenRequestHeaders(ccsCredential || request.ccsCredential);
|
|
157
|
+
const thumbprint = {
|
|
158
|
+
clientId: this.config.authOptions.clientId,
|
|
159
|
+
authority: authority.canonicalAuthority,
|
|
160
|
+
scopes: request.scopes,
|
|
161
|
+
claims: request.claims,
|
|
162
|
+
authenticationScheme: request.authenticationScheme,
|
|
163
|
+
resourceRequestMethod: request.resourceRequestMethod,
|
|
164
|
+
resourceRequestUri: request.resourceRequestUri,
|
|
165
|
+
shrClaims: request.shrClaims,
|
|
166
|
+
sshKid: request.sshKid,
|
|
167
|
+
};
|
|
168
|
+
return this.executePostToTokenEndpoint(endpoint, requestBody, headers, thumbprint);
|
|
169
|
+
}
|
|
200
170
|
/**
|
|
201
171
|
* Generates a map for all the params to be sent to the service
|
|
202
172
|
* @param request
|
|
203
173
|
*/
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
parameterBuilder.addExtraQueryParameters(request.tokenBodyParameters);
|
|
312
|
-
}
|
|
313
|
-
// Add hybrid spa parameters if not already provided
|
|
314
|
-
if (request.enableSpaAuthorizationCode && (!request.tokenBodyParameters || !request.tokenBodyParameters[AADServerParamKeys.RETURN_SPA_CODE])) {
|
|
315
|
-
parameterBuilder.addExtraQueryParameters((_c = {},
|
|
316
|
-
_c[AADServerParamKeys.RETURN_SPA_CODE] = "1",
|
|
317
|
-
_c));
|
|
318
|
-
}
|
|
319
|
-
return [2 /*return*/, parameterBuilder.createQueryString()];
|
|
320
|
-
}
|
|
174
|
+
async createTokenRequestBody(request) {
|
|
175
|
+
this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateTokenRequestBody, request.correlationId);
|
|
176
|
+
const parameterBuilder = new RequestParameterBuilder();
|
|
177
|
+
parameterBuilder.addClientId(this.config.authOptions.clientId);
|
|
178
|
+
/*
|
|
179
|
+
* For hybrid spa flow, there will be a code but no verifier
|
|
180
|
+
* In this scenario, don't include redirect uri as auth code will not be bound to redirect URI
|
|
181
|
+
*/
|
|
182
|
+
if (!this.includeRedirectUri) {
|
|
183
|
+
// Just validate
|
|
184
|
+
RequestValidator.validateRedirectUri(request.redirectUri);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// Validate and include redirect uri
|
|
188
|
+
parameterBuilder.addRedirectUri(request.redirectUri);
|
|
189
|
+
}
|
|
190
|
+
// Add scope array, parameter builder will add default scopes and dedupe
|
|
191
|
+
parameterBuilder.addScopes(request.scopes);
|
|
192
|
+
// add code: user set, not validated
|
|
193
|
+
parameterBuilder.addAuthorizationCode(request.code);
|
|
194
|
+
// Add library metadata
|
|
195
|
+
parameterBuilder.addLibraryInfo(this.config.libraryInfo);
|
|
196
|
+
parameterBuilder.addApplicationTelemetry(this.config.telemetry.application);
|
|
197
|
+
parameterBuilder.addThrottling();
|
|
198
|
+
if (this.serverTelemetryManager) {
|
|
199
|
+
parameterBuilder.addServerTelemetry(this.serverTelemetryManager);
|
|
200
|
+
}
|
|
201
|
+
// add code_verifier if passed
|
|
202
|
+
if (request.codeVerifier) {
|
|
203
|
+
parameterBuilder.addCodeVerifier(request.codeVerifier);
|
|
204
|
+
}
|
|
205
|
+
if (this.config.clientCredentials.clientSecret) {
|
|
206
|
+
parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret);
|
|
207
|
+
}
|
|
208
|
+
if (this.config.clientCredentials.clientAssertion) {
|
|
209
|
+
const clientAssertion = this.config.clientCredentials.clientAssertion;
|
|
210
|
+
parameterBuilder.addClientAssertion(clientAssertion.assertion);
|
|
211
|
+
parameterBuilder.addClientAssertionType(clientAssertion.assertionType);
|
|
212
|
+
}
|
|
213
|
+
parameterBuilder.addGrantType(GrantType.AUTHORIZATION_CODE_GRANT);
|
|
214
|
+
parameterBuilder.addClientInfo();
|
|
215
|
+
if (request.authenticationScheme === AuthenticationScheme.POP) {
|
|
216
|
+
const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient);
|
|
217
|
+
this.performanceClient?.setPreQueueTime(PerformanceEvents.PopTokenGenerateCnf, request.correlationId);
|
|
218
|
+
const reqCnfData = await popTokenGenerator.generateCnf(request);
|
|
219
|
+
// SPA PoP requires full Base64Url encoded req_cnf string (unhashed)
|
|
220
|
+
parameterBuilder.addPopToken(reqCnfData.reqCnfString);
|
|
221
|
+
}
|
|
222
|
+
else if (request.authenticationScheme === AuthenticationScheme.SSH) {
|
|
223
|
+
if (request.sshJwk) {
|
|
224
|
+
parameterBuilder.addSshJwk(request.sshJwk);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
throw ClientConfigurationError.createMissingSshJwkError();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
const correlationId = request.correlationId ||
|
|
231
|
+
this.config.cryptoInterface.createNewGuid();
|
|
232
|
+
parameterBuilder.addCorrelationId(correlationId);
|
|
233
|
+
if (!StringUtils.isEmptyObj(request.claims) ||
|
|
234
|
+
(this.config.authOptions.clientCapabilities &&
|
|
235
|
+
this.config.authOptions.clientCapabilities.length > 0)) {
|
|
236
|
+
parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);
|
|
237
|
+
}
|
|
238
|
+
let ccsCred = undefined;
|
|
239
|
+
if (request.clientInfo) {
|
|
240
|
+
try {
|
|
241
|
+
const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils);
|
|
242
|
+
ccsCred = {
|
|
243
|
+
credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,
|
|
244
|
+
type: CcsCredentialType.HOME_ACCOUNT_ID,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (e) {
|
|
248
|
+
this.logger.verbose("Could not parse client info for CCS Header: " + e);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
ccsCred = request.ccsCredential;
|
|
253
|
+
}
|
|
254
|
+
// Adds these as parameters in the request instead of headers to prevent CORS preflight request
|
|
255
|
+
if (this.config.systemOptions.preventCorsPreflight && ccsCred) {
|
|
256
|
+
switch (ccsCred.type) {
|
|
257
|
+
case CcsCredentialType.HOME_ACCOUNT_ID:
|
|
258
|
+
try {
|
|
259
|
+
const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential);
|
|
260
|
+
parameterBuilder.addCcsOid(clientInfo);
|
|
261
|
+
}
|
|
262
|
+
catch (e) {
|
|
263
|
+
this.logger.verbose("Could not parse home account ID for CCS Header: " +
|
|
264
|
+
e);
|
|
265
|
+
}
|
|
266
|
+
break;
|
|
267
|
+
case CcsCredentialType.UPN:
|
|
268
|
+
parameterBuilder.addCcsUpn(ccsCred.credential);
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (request.tokenBodyParameters) {
|
|
273
|
+
parameterBuilder.addExtraQueryParameters(request.tokenBodyParameters);
|
|
274
|
+
}
|
|
275
|
+
// Add hybrid spa parameters if not already provided
|
|
276
|
+
if (request.enableSpaAuthorizationCode &&
|
|
277
|
+
(!request.tokenBodyParameters ||
|
|
278
|
+
!request.tokenBodyParameters[AADServerParamKeys.RETURN_SPA_CODE])) {
|
|
279
|
+
parameterBuilder.addExtraQueryParameters({
|
|
280
|
+
[AADServerParamKeys.RETURN_SPA_CODE]: "1",
|
|
321
281
|
});
|
|
322
|
-
}
|
|
323
|
-
|
|
282
|
+
}
|
|
283
|
+
return parameterBuilder.createQueryString();
|
|
284
|
+
}
|
|
324
285
|
/**
|
|
325
286
|
* This API validates the `AuthorizationCodeUrlRequest` and creates a URL
|
|
326
287
|
* @param request
|
|
327
288
|
*/
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
else if (accountSid && request.prompt === PromptValue.NONE) {
|
|
386
|
-
/*
|
|
387
|
-
* If account and loginHint are provided, we will check account first for sid before adding loginHint
|
|
388
|
-
* SessionId is only used in silent calls
|
|
389
|
-
*/
|
|
390
|
-
this.logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account");
|
|
391
|
-
parameterBuilder.addSid(accountSid);
|
|
392
|
-
try {
|
|
393
|
-
clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);
|
|
394
|
-
parameterBuilder.addCcsOid(clientInfo);
|
|
395
|
-
}
|
|
396
|
-
catch (e) {
|
|
397
|
-
this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header");
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
else if (request.loginHint) {
|
|
401
|
-
this.logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from request");
|
|
402
|
-
parameterBuilder.addLoginHint(request.loginHint);
|
|
403
|
-
parameterBuilder.addCcsUpn(request.loginHint);
|
|
404
|
-
}
|
|
405
|
-
else if (request.account.username) {
|
|
406
|
-
// Fallback to account username if provided
|
|
407
|
-
this.logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from account");
|
|
408
|
-
parameterBuilder.addLoginHint(request.account.username);
|
|
409
|
-
try {
|
|
410
|
-
clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);
|
|
411
|
-
parameterBuilder.addCcsOid(clientInfo);
|
|
412
|
-
}
|
|
413
|
-
catch (e) {
|
|
414
|
-
this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header");
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
else if (request.loginHint) {
|
|
419
|
-
this.logger.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request");
|
|
420
|
-
parameterBuilder.addLoginHint(request.loginHint);
|
|
421
|
-
parameterBuilder.addCcsUpn(request.loginHint);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
else {
|
|
425
|
-
this.logger.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints");
|
|
426
|
-
}
|
|
427
|
-
if (request.nonce) {
|
|
428
|
-
parameterBuilder.addNonce(request.nonce);
|
|
429
|
-
}
|
|
430
|
-
if (request.state) {
|
|
431
|
-
parameterBuilder.addState(request.state);
|
|
432
|
-
}
|
|
433
|
-
if (!StringUtils.isEmpty(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {
|
|
434
|
-
parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);
|
|
435
|
-
}
|
|
436
|
-
if (request.extraQueryParameters) {
|
|
437
|
-
parameterBuilder.addExtraQueryParameters(request.extraQueryParameters);
|
|
438
|
-
}
|
|
439
|
-
if (!request.nativeBroker) return [3 /*break*/, 2];
|
|
440
|
-
// signal ests that this is a WAM call
|
|
441
|
-
parameterBuilder.addNativeBroker();
|
|
442
|
-
if (!(request.authenticationScheme === AuthenticationScheme.POP)) return [3 /*break*/, 2];
|
|
443
|
-
popTokenGenerator = new PopTokenGenerator(this.cryptoUtils);
|
|
444
|
-
return [4 /*yield*/, popTokenGenerator.generateCnf(request)];
|
|
445
|
-
case 1:
|
|
446
|
-
reqCnfData = _b.sent();
|
|
447
|
-
parameterBuilder.addPopToken(reqCnfData.reqCnfHash);
|
|
448
|
-
_b.label = 2;
|
|
449
|
-
case 2: return [2 /*return*/, parameterBuilder.createQueryString()];
|
|
289
|
+
async createAuthCodeUrlQueryString(request) {
|
|
290
|
+
this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateQueryString, request.correlationId);
|
|
291
|
+
const parameterBuilder = new RequestParameterBuilder();
|
|
292
|
+
parameterBuilder.addClientId(this.config.authOptions.clientId);
|
|
293
|
+
const requestScopes = [
|
|
294
|
+
...(request.scopes || []),
|
|
295
|
+
...(request.extraScopesToConsent || []),
|
|
296
|
+
];
|
|
297
|
+
parameterBuilder.addScopes(requestScopes);
|
|
298
|
+
// validate the redirectUri (to be a non null value)
|
|
299
|
+
parameterBuilder.addRedirectUri(request.redirectUri);
|
|
300
|
+
// generate the correlationId if not set by the user and add
|
|
301
|
+
const correlationId = request.correlationId ||
|
|
302
|
+
this.config.cryptoInterface.createNewGuid();
|
|
303
|
+
parameterBuilder.addCorrelationId(correlationId);
|
|
304
|
+
// add response_mode. If not passed in it defaults to query.
|
|
305
|
+
parameterBuilder.addResponseMode(request.responseMode);
|
|
306
|
+
// add response_type = code
|
|
307
|
+
parameterBuilder.addResponseTypeCode();
|
|
308
|
+
// add library info parameters
|
|
309
|
+
parameterBuilder.addLibraryInfo(this.config.libraryInfo);
|
|
310
|
+
parameterBuilder.addApplicationTelemetry(this.config.telemetry.application);
|
|
311
|
+
// add client_info=1
|
|
312
|
+
parameterBuilder.addClientInfo();
|
|
313
|
+
if (request.codeChallenge && request.codeChallengeMethod) {
|
|
314
|
+
parameterBuilder.addCodeChallengeParams(request.codeChallenge, request.codeChallengeMethod);
|
|
315
|
+
}
|
|
316
|
+
if (request.prompt) {
|
|
317
|
+
parameterBuilder.addPrompt(request.prompt);
|
|
318
|
+
}
|
|
319
|
+
if (request.domainHint) {
|
|
320
|
+
parameterBuilder.addDomainHint(request.domainHint);
|
|
321
|
+
}
|
|
322
|
+
// Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object
|
|
323
|
+
if (request.prompt !== PromptValue.SELECT_ACCOUNT) {
|
|
324
|
+
// AAD will throw if prompt=select_account is passed with an account hint
|
|
325
|
+
if (request.sid && request.prompt === PromptValue.NONE) {
|
|
326
|
+
// SessionID is only used in silent calls
|
|
327
|
+
this.logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from request");
|
|
328
|
+
parameterBuilder.addSid(request.sid);
|
|
329
|
+
}
|
|
330
|
+
else if (request.account) {
|
|
331
|
+
const accountSid = this.extractAccountSid(request.account);
|
|
332
|
+
const accountLoginHintClaim = this.extractLoginHint(request.account);
|
|
333
|
+
// If login_hint claim is present, use it over sid/username
|
|
334
|
+
if (accountLoginHintClaim) {
|
|
335
|
+
this.logger.verbose("createAuthCodeUrlQueryString: login_hint claim present on account");
|
|
336
|
+
parameterBuilder.addLoginHint(accountLoginHintClaim);
|
|
337
|
+
try {
|
|
338
|
+
const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);
|
|
339
|
+
parameterBuilder.addCcsOid(clientInfo);
|
|
340
|
+
}
|
|
341
|
+
catch (e) {
|
|
342
|
+
this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header");
|
|
343
|
+
}
|
|
450
344
|
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
345
|
+
else if (accountSid && request.prompt === PromptValue.NONE) {
|
|
346
|
+
/*
|
|
347
|
+
* If account and loginHint are provided, we will check account first for sid before adding loginHint
|
|
348
|
+
* SessionId is only used in silent calls
|
|
349
|
+
*/
|
|
350
|
+
this.logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account");
|
|
351
|
+
parameterBuilder.addSid(accountSid);
|
|
352
|
+
try {
|
|
353
|
+
const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);
|
|
354
|
+
parameterBuilder.addCcsOid(clientInfo);
|
|
355
|
+
}
|
|
356
|
+
catch (e) {
|
|
357
|
+
this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header");
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
else if (request.loginHint) {
|
|
361
|
+
this.logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from request");
|
|
362
|
+
parameterBuilder.addLoginHint(request.loginHint);
|
|
363
|
+
parameterBuilder.addCcsUpn(request.loginHint);
|
|
364
|
+
}
|
|
365
|
+
else if (request.account.username) {
|
|
366
|
+
// Fallback to account username if provided
|
|
367
|
+
this.logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from account");
|
|
368
|
+
parameterBuilder.addLoginHint(request.account.username);
|
|
369
|
+
try {
|
|
370
|
+
const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);
|
|
371
|
+
parameterBuilder.addCcsOid(clientInfo);
|
|
372
|
+
}
|
|
373
|
+
catch (e) {
|
|
374
|
+
this.logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header");
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
else if (request.loginHint) {
|
|
379
|
+
this.logger.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request");
|
|
380
|
+
parameterBuilder.addLoginHint(request.loginHint);
|
|
381
|
+
parameterBuilder.addCcsUpn(request.loginHint);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
this.logger.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints");
|
|
386
|
+
}
|
|
387
|
+
if (request.nonce) {
|
|
388
|
+
parameterBuilder.addNonce(request.nonce);
|
|
389
|
+
}
|
|
390
|
+
if (request.state) {
|
|
391
|
+
parameterBuilder.addState(request.state);
|
|
392
|
+
}
|
|
393
|
+
if (!StringUtils.isEmpty(request.claims) ||
|
|
394
|
+
(this.config.authOptions.clientCapabilities &&
|
|
395
|
+
this.config.authOptions.clientCapabilities.length > 0)) {
|
|
396
|
+
parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);
|
|
397
|
+
}
|
|
398
|
+
if (request.extraQueryParameters) {
|
|
399
|
+
parameterBuilder.addExtraQueryParameters(request.extraQueryParameters);
|
|
400
|
+
}
|
|
401
|
+
if (request.nativeBroker) {
|
|
402
|
+
// signal ests that this is a WAM call
|
|
403
|
+
parameterBuilder.addNativeBroker();
|
|
404
|
+
// pass the req_cnf for POP
|
|
405
|
+
if (request.authenticationScheme === AuthenticationScheme.POP) {
|
|
406
|
+
const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils);
|
|
407
|
+
// to reduce the URL length, it is recommended to send the hash of the req_cnf instead of the whole string
|
|
408
|
+
const reqCnfData = await popTokenGenerator.generateCnf(request);
|
|
409
|
+
parameterBuilder.addPopToken(reqCnfData.reqCnfHash);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return parameterBuilder.createQueryString();
|
|
413
|
+
}
|
|
454
414
|
/**
|
|
455
415
|
* This API validates the `EndSessionRequest` and creates a URL
|
|
456
416
|
* @param request
|
|
457
417
|
*/
|
|
458
|
-
|
|
459
|
-
|
|
418
|
+
createLogoutUrlQueryString(request) {
|
|
419
|
+
const parameterBuilder = new RequestParameterBuilder();
|
|
460
420
|
if (request.postLogoutRedirectUri) {
|
|
461
421
|
parameterBuilder.addPostLogoutRedirectUri(request.postLogoutRedirectUri);
|
|
462
422
|
}
|
|
@@ -476,21 +436,18 @@ var AuthorizationCodeClient = /** @class */ (function (_super) {
|
|
|
476
436
|
parameterBuilder.addExtraQueryParameters(request.extraQueryParameters);
|
|
477
437
|
}
|
|
478
438
|
return parameterBuilder.createQueryString();
|
|
479
|
-
}
|
|
439
|
+
}
|
|
480
440
|
/**
|
|
481
441
|
* Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present.
|
|
482
442
|
* @param account
|
|
483
443
|
*/
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
};
|
|
492
|
-
return AuthorizationCodeClient;
|
|
493
|
-
}(BaseClient));
|
|
444
|
+
extractAccountSid(account) {
|
|
445
|
+
return account.idTokenClaims?.sid || null;
|
|
446
|
+
}
|
|
447
|
+
extractLoginHint(account) {
|
|
448
|
+
return account.idTokenClaims?.login_hint || null;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
494
451
|
|
|
495
452
|
export { AuthorizationCodeClient };
|
|
496
453
|
//# sourceMappingURL=AuthorizationCodeClient.js.map
|