@azure/msal-common 4.5.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +178 -0
- package/{changelog.md → CHANGELOG.md} +446 -390
- package/LICENSE +21 -21
- package/README.md +62 -61
- package/dist/_virtual/_tslib.js +1 -1
- package/dist/account/AuthToken.js +7 -7
- package/dist/account/AuthToken.js.map +1 -1
- package/dist/account/CcsCredential.js +1 -1
- package/dist/account/CcsCredential.js.map +1 -1
- package/dist/account/ClientInfo.js +10 -10
- package/dist/account/ClientInfo.js.map +1 -1
- package/dist/account/TokenClaims.d.ts +5 -0
- package/dist/account/TokenClaims.d.ts.map +1 -1
- package/dist/authority/Authority.d.ts.map +1 -1
- package/dist/authority/Authority.js +60 -54
- package/dist/authority/Authority.js.map +1 -1
- package/dist/authority/AuthorityFactory.js +9 -9
- package/dist/authority/AuthorityFactory.js.map +1 -1
- package/dist/authority/AuthorityType.js +1 -1
- package/dist/authority/AuthorityType.js.map +1 -1
- package/dist/authority/CloudInstanceDiscoveryResponse.js +1 -1
- package/dist/authority/CloudInstanceDiscoveryResponse.js.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 -2
- 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.js +9 -9
- package/dist/authority/RegionDiscovery.js.map +1 -1
- package/dist/cache/CacheManager.d.ts +23 -9
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.js +244 -114
- package/dist/cache/CacheManager.js.map +1 -1
- package/dist/cache/entities/AccessTokenEntity.d.ts +3 -2
- package/dist/cache/entities/AccessTokenEntity.d.ts.map +1 -1
- package/dist/cache/entities/AccessTokenEntity.js +23 -17
- package/dist/cache/entities/AccessTokenEntity.js.map +1 -1
- package/dist/cache/entities/AccountEntity.d.ts +2 -2
- package/dist/cache/entities/AccountEntity.d.ts.map +1 -1
- package/dist/cache/entities/AccountEntity.js +18 -18
- package/dist/cache/entities/AccountEntity.js.map +1 -1
- package/dist/cache/entities/AppMetadataEntity.js +1 -1
- package/dist/cache/entities/AppMetadataEntity.js.map +1 -1
- package/dist/cache/entities/AuthorityMetadataEntity.d.ts +1 -1
- package/dist/cache/entities/AuthorityMetadataEntity.d.ts.map +1 -1
- package/dist/cache/entities/AuthorityMetadataEntity.js +5 -6
- package/dist/cache/entities/AuthorityMetadataEntity.js.map +1 -1
- package/dist/cache/entities/CacheRecord.js +1 -1
- package/dist/cache/entities/CacheRecord.js.map +1 -1
- package/dist/cache/entities/CredentialEntity.d.ts +7 -3
- package/dist/cache/entities/CredentialEntity.d.ts.map +1 -1
- package/dist/cache/entities/CredentialEntity.js +16 -9
- package/dist/cache/entities/CredentialEntity.js.map +1 -1
- package/dist/cache/entities/IdTokenEntity.js +3 -3
- package/dist/cache/entities/IdTokenEntity.js.map +1 -1
- package/dist/cache/entities/RefreshTokenEntity.js +3 -3
- package/dist/cache/entities/RefreshTokenEntity.js.map +1 -1
- package/dist/cache/entities/ServerTelemetryEntity.js +1 -1
- package/dist/cache/entities/ServerTelemetryEntity.js.map +1 -1
- package/dist/cache/entities/ThrottlingEntity.js +1 -1
- package/dist/cache/entities/ThrottlingEntity.js.map +1 -1
- package/dist/cache/interface/ICacheManager.d.ts +5 -5
- package/dist/cache/interface/ICacheManager.d.ts.map +1 -1
- package/dist/cache/persistence/TokenCacheContext.js +3 -3
- package/dist/cache/persistence/TokenCacheContext.js.map +1 -1
- package/dist/cache/utils/CacheTypes.d.ts +4 -1
- package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.d.ts +1 -1
- package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.js +56 -43
- package/dist/client/AuthorizationCodeClient.js.map +1 -1
- package/dist/client/BaseClient.js +11 -11
- package/dist/client/BaseClient.js.map +1 -1
- package/dist/client/ClientCredentialClient.d.ts.map +1 -1
- package/dist/client/ClientCredentialClient.js +24 -18
- package/dist/client/ClientCredentialClient.js.map +1 -1
- package/dist/client/DeviceCodeClient.d.ts.map +1 -1
- package/dist/client/DeviceCodeClient.js +39 -27
- package/dist/client/DeviceCodeClient.js.map +1 -1
- package/dist/client/OnBehalfOfClient.d.ts.map +1 -1
- package/dist/client/OnBehalfOfClient.js +26 -20
- package/dist/client/OnBehalfOfClient.js.map +1 -1
- package/dist/client/RefreshTokenClient.d.ts.map +1 -1
- package/dist/client/RefreshTokenClient.js +49 -32
- package/dist/client/RefreshTokenClient.js.map +1 -1
- package/dist/client/SilentFlowClient.d.ts.map +1 -1
- package/dist/client/SilentFlowClient.js +40 -35
- package/dist/client/SilentFlowClient.js.map +1 -1
- package/dist/client/UsernamePasswordClient.d.ts.map +1 -1
- package/dist/client/UsernamePasswordClient.js +18 -12
- package/dist/client/UsernamePasswordClient.js.map +1 -1
- package/dist/config/ClientConfiguration.d.ts.map +1 -1
- package/dist/config/ClientConfiguration.js +8 -7
- package/dist/config/ClientConfiguration.js.map +1 -1
- package/dist/crypto/ICrypto.d.ts +11 -1
- package/dist/crypto/ICrypto.d.ts.map +1 -1
- package/dist/crypto/ICrypto.js +26 -8
- package/dist/crypto/ICrypto.js.map +1 -1
- package/dist/crypto/PopTokenGenerator.d.ts +21 -4
- package/dist/crypto/PopTokenGenerator.d.ts.map +1 -1
- package/dist/crypto/PopTokenGenerator.js +42 -31
- package/dist/crypto/PopTokenGenerator.js.map +1 -1
- package/dist/error/AuthError.d.ts +5 -0
- package/dist/error/AuthError.d.ts.map +1 -1
- package/dist/error/AuthError.js +6 -3
- package/dist/error/AuthError.js.map +1 -1
- package/dist/error/ClientAuthError.d.ts +13 -4
- package/dist/error/ClientAuthError.d.ts.map +1 -1
- package/dist/error/ClientAuthError.js +20 -9
- package/dist/error/ClientAuthError.js.map +1 -1
- package/dist/error/ClientConfigurationError.d.ts +29 -0
- package/dist/error/ClientConfigurationError.d.ts.map +1 -1
- package/dist/error/ClientConfigurationError.js +45 -5
- package/dist/error/ClientConfigurationError.js.map +1 -1
- package/dist/error/InteractionRequiredAuthError.d.ts +24 -5
- package/dist/error/InteractionRequiredAuthError.d.ts.map +1 -1
- package/dist/error/InteractionRequiredAuthError.js +30 -9
- package/dist/error/InteractionRequiredAuthError.js.map +1 -1
- package/dist/error/ServerError.js +3 -3
- package/dist/error/ServerError.js.map +1 -1
- package/dist/index.cjs.js +675 -244
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -29
- package/dist/index.js.map +1 -1
- package/dist/logger/Logger.d.ts.map +1 -1
- package/dist/logger/Logger.js +11 -9
- package/dist/logger/Logger.js.map +1 -1
- package/dist/network/INetworkModule.js +4 -4
- package/dist/network/INetworkModule.js.map +1 -1
- package/dist/network/NetworkManager.js +8 -8
- package/dist/network/NetworkManager.js.map +1 -1
- package/dist/network/RequestThumbprint.d.ts +7 -0
- package/dist/network/RequestThumbprint.d.ts.map +1 -1
- package/dist/network/ThrottlingUtils.d.ts +2 -1
- package/dist/network/ThrottlingUtils.d.ts.map +1 -1
- package/dist/network/ThrottlingUtils.js +14 -8
- package/dist/network/ThrottlingUtils.js.map +1 -1
- package/dist/packageMetadata.d.ts +1 -1
- package/dist/packageMetadata.js +2 -2
- package/dist/packageMetadata.js.map +1 -1
- package/dist/request/AuthenticationHeaderParser.d.ts +20 -0
- package/dist/request/AuthenticationHeaderParser.d.ts.map +1 -0
- package/dist/request/AuthenticationHeaderParser.js +64 -0
- package/dist/request/AuthenticationHeaderParser.js.map +1 -0
- package/dist/request/BaseAuthRequest.d.ts +7 -1
- package/dist/request/BaseAuthRequest.d.ts.map +1 -1
- package/dist/request/CommonEndSessionRequest.d.ts +4 -0
- package/dist/request/CommonEndSessionRequest.d.ts.map +1 -1
- package/dist/request/RequestParameterBuilder.d.ts +4 -0
- package/dist/request/RequestParameterBuilder.d.ts.map +1 -1
- package/dist/request/RequestParameterBuilder.js +27 -18
- package/dist/request/RequestParameterBuilder.js.map +1 -1
- package/dist/request/RequestValidator.js +10 -10
- package/dist/request/RequestValidator.js.map +1 -1
- package/dist/request/ScopeSet.js +14 -14
- package/dist/request/ScopeSet.js.map +1 -1
- package/dist/response/AuthenticationResult.d.ts +2 -1
- package/dist/response/AuthenticationResult.d.ts.map +1 -1
- package/dist/response/ExternalTokenResponse.d.ts +15 -0
- package/dist/response/ExternalTokenResponse.d.ts.map +1 -0
- package/dist/response/ResponseHandler.d.ts.map +1 -1
- package/dist/response/ResponseHandler.js +74 -69
- package/dist/response/ResponseHandler.js.map +1 -1
- package/dist/response/ServerAuthorizationTokenResponse.d.ts +5 -2
- package/dist/response/ServerAuthorizationTokenResponse.d.ts.map +1 -1
- package/dist/telemetry/server/ServerTelemetryManager.js +13 -13
- package/dist/telemetry/server/ServerTelemetryManager.js.map +1 -1
- package/dist/url/UrlString.d.ts +0 -6
- package/dist/url/UrlString.d.ts.map +1 -1
- package/dist/url/UrlString.js +25 -40
- package/dist/url/UrlString.js.map +1 -1
- package/dist/utils/Constants.d.ts +5 -2
- package/dist/utils/Constants.d.ts.map +1 -1
- package/dist/utils/Constants.js +5 -2
- package/dist/utils/Constants.js.map +1 -1
- package/dist/utils/ProtocolUtils.js +13 -13
- package/dist/utils/ProtocolUtils.js.map +1 -1
- package/dist/utils/StringUtils.d.ts.map +1 -1
- package/dist/utils/StringUtils.js +15 -14
- package/dist/utils/StringUtils.js.map +1 -1
- package/dist/utils/TimeUtils.js +1 -1
- package/dist/utils/TimeUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
/*! @azure/msal-common
|
|
1
|
+
/*! @azure/msal-common v5.1.0 2021-11-02 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { __awaiter, __generator, __assign } from '../_virtual/_tslib.js';
|
|
4
|
-
import {
|
|
5
|
-
import { ClientAuthError as ClientAuthError$1 } from '../error/ClientAuthError.js';
|
|
6
|
-
import { ClientConfigurationError as ClientConfigurationError$1 } from '../error/ClientConfigurationError.js';
|
|
7
|
-
import { AuthorityType as AuthorityType$1 } from './AuthorityType.js';
|
|
8
|
-
import { UrlString as UrlString$1 } from '../url/UrlString.js';
|
|
4
|
+
import { AuthorityType } from './AuthorityType.js';
|
|
9
5
|
import { isOpenIdConfigResponse } from './OpenIdConfigResponse.js';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
6
|
+
import { UrlString } from '../url/UrlString.js';
|
|
7
|
+
import { ClientAuthError } from '../error/ClientAuthError.js';
|
|
8
|
+
import { Constants, AuthorityMetadataSource, RegionDiscoveryOutcomes } from '../utils/Constants.js';
|
|
9
|
+
import { ClientConfigurationError } from '../error/ClientConfigurationError.js';
|
|
10
|
+
import { ProtocolMode } from './ProtocolMode.js';
|
|
11
|
+
import { AuthorityMetadataEntity } from '../cache/entities/AuthorityMetadataEntity.js';
|
|
12
12
|
import { isCloudInstanceDiscoveryResponse } from './CloudInstanceDiscoveryResponse.js';
|
|
13
|
-
import { RegionDiscovery
|
|
13
|
+
import { RegionDiscovery } from './RegionDiscovery.js';
|
|
14
14
|
|
|
15
15
|
/*
|
|
16
16
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -27,19 +27,19 @@ var Authority = /** @class */ (function () {
|
|
|
27
27
|
this.networkInterface = networkInterface;
|
|
28
28
|
this.cacheManager = cacheManager;
|
|
29
29
|
this.authorityOptions = authorityOptions;
|
|
30
|
-
this.regionDiscovery = new RegionDiscovery
|
|
30
|
+
this.regionDiscovery = new RegionDiscovery(networkInterface);
|
|
31
31
|
this.regionDiscoveryMetadata = { region_used: undefined, region_source: undefined, region_outcome: undefined };
|
|
32
32
|
}
|
|
33
33
|
Object.defineProperty(Authority.prototype, "authorityType", {
|
|
34
34
|
// See above for AuthorityType
|
|
35
35
|
get: function () {
|
|
36
36
|
var pathSegments = this.canonicalAuthorityUrlComponents.PathSegments;
|
|
37
|
-
if (pathSegments.length && pathSegments[0].toLowerCase() === Constants
|
|
38
|
-
return AuthorityType
|
|
37
|
+
if (pathSegments.length && pathSegments[0].toLowerCase() === Constants.ADFS) {
|
|
38
|
+
return AuthorityType.Adfs;
|
|
39
39
|
}
|
|
40
|
-
return AuthorityType
|
|
40
|
+
return AuthorityType.Default;
|
|
41
41
|
},
|
|
42
|
-
enumerable:
|
|
42
|
+
enumerable: false,
|
|
43
43
|
configurable: true
|
|
44
44
|
});
|
|
45
45
|
Object.defineProperty(Authority.prototype, "protocolMode", {
|
|
@@ -49,7 +49,7 @@ var Authority = /** @class */ (function () {
|
|
|
49
49
|
get: function () {
|
|
50
50
|
return this.authorityOptions.protocolMode;
|
|
51
51
|
},
|
|
52
|
-
enumerable:
|
|
52
|
+
enumerable: false,
|
|
53
53
|
configurable: true
|
|
54
54
|
});
|
|
55
55
|
Object.defineProperty(Authority.prototype, "options", {
|
|
@@ -59,7 +59,7 @@ var Authority = /** @class */ (function () {
|
|
|
59
59
|
get: function () {
|
|
60
60
|
return this.authorityOptions;
|
|
61
61
|
},
|
|
62
|
-
enumerable:
|
|
62
|
+
enumerable: false,
|
|
63
63
|
configurable: true
|
|
64
64
|
});
|
|
65
65
|
Object.defineProperty(Authority.prototype, "canonicalAuthority", {
|
|
@@ -73,11 +73,11 @@ var Authority = /** @class */ (function () {
|
|
|
73
73
|
* Sets canonical authority.
|
|
74
74
|
*/
|
|
75
75
|
set: function (url) {
|
|
76
|
-
this._canonicalAuthority = new UrlString
|
|
76
|
+
this._canonicalAuthority = new UrlString(url);
|
|
77
77
|
this._canonicalAuthority.validateAsUri();
|
|
78
78
|
this._canonicalAuthorityUrlComponents = null;
|
|
79
79
|
},
|
|
80
|
-
enumerable:
|
|
80
|
+
enumerable: false,
|
|
81
81
|
configurable: true
|
|
82
82
|
});
|
|
83
83
|
Object.defineProperty(Authority.prototype, "canonicalAuthorityUrlComponents", {
|
|
@@ -90,7 +90,7 @@ var Authority = /** @class */ (function () {
|
|
|
90
90
|
}
|
|
91
91
|
return this._canonicalAuthorityUrlComponents;
|
|
92
92
|
},
|
|
93
|
-
enumerable:
|
|
93
|
+
enumerable: false,
|
|
94
94
|
configurable: true
|
|
95
95
|
});
|
|
96
96
|
Object.defineProperty(Authority.prototype, "hostnameAndPort", {
|
|
@@ -100,7 +100,7 @@ var Authority = /** @class */ (function () {
|
|
|
100
100
|
get: function () {
|
|
101
101
|
return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase();
|
|
102
102
|
},
|
|
103
|
-
enumerable:
|
|
103
|
+
enumerable: false,
|
|
104
104
|
configurable: true
|
|
105
105
|
});
|
|
106
106
|
Object.defineProperty(Authority.prototype, "tenant", {
|
|
@@ -110,7 +110,7 @@ var Authority = /** @class */ (function () {
|
|
|
110
110
|
get: function () {
|
|
111
111
|
return this.canonicalAuthorityUrlComponents.PathSegments[0];
|
|
112
112
|
},
|
|
113
|
-
enumerable:
|
|
113
|
+
enumerable: false,
|
|
114
114
|
configurable: true
|
|
115
115
|
});
|
|
116
116
|
Object.defineProperty(Authority.prototype, "authorizationEndpoint", {
|
|
@@ -123,10 +123,10 @@ var Authority = /** @class */ (function () {
|
|
|
123
123
|
return this.replaceTenant(endpoint);
|
|
124
124
|
}
|
|
125
125
|
else {
|
|
126
|
-
throw ClientAuthError
|
|
126
|
+
throw ClientAuthError.createEndpointDiscoveryIncompleteError("Discovery incomplete.");
|
|
127
127
|
}
|
|
128
128
|
},
|
|
129
|
-
enumerable:
|
|
129
|
+
enumerable: false,
|
|
130
130
|
configurable: true
|
|
131
131
|
});
|
|
132
132
|
Object.defineProperty(Authority.prototype, "tokenEndpoint", {
|
|
@@ -139,10 +139,10 @@ var Authority = /** @class */ (function () {
|
|
|
139
139
|
return this.replaceTenant(endpoint);
|
|
140
140
|
}
|
|
141
141
|
else {
|
|
142
|
-
throw ClientAuthError
|
|
142
|
+
throw ClientAuthError.createEndpointDiscoveryIncompleteError("Discovery incomplete.");
|
|
143
143
|
}
|
|
144
144
|
},
|
|
145
|
-
enumerable:
|
|
145
|
+
enumerable: false,
|
|
146
146
|
configurable: true
|
|
147
147
|
});
|
|
148
148
|
Object.defineProperty(Authority.prototype, "deviceCodeEndpoint", {
|
|
@@ -152,10 +152,10 @@ var Authority = /** @class */ (function () {
|
|
|
152
152
|
return this.replaceTenant(endpoint);
|
|
153
153
|
}
|
|
154
154
|
else {
|
|
155
|
-
throw ClientAuthError
|
|
155
|
+
throw ClientAuthError.createEndpointDiscoveryIncompleteError("Discovery incomplete.");
|
|
156
156
|
}
|
|
157
157
|
},
|
|
158
|
-
enumerable:
|
|
158
|
+
enumerable: false,
|
|
159
159
|
configurable: true
|
|
160
160
|
});
|
|
161
161
|
Object.defineProperty(Authority.prototype, "endSessionEndpoint", {
|
|
@@ -164,14 +164,18 @@ var Authority = /** @class */ (function () {
|
|
|
164
164
|
*/
|
|
165
165
|
get: function () {
|
|
166
166
|
if (this.discoveryComplete()) {
|
|
167
|
+
// ROPC policies may not have end_session_endpoint set
|
|
168
|
+
if (!this.metadata.end_session_endpoint) {
|
|
169
|
+
throw ClientAuthError.createLogoutNotSupportedError();
|
|
170
|
+
}
|
|
167
171
|
var endpoint = this.replacePath(this.metadata.end_session_endpoint);
|
|
168
172
|
return this.replaceTenant(endpoint);
|
|
169
173
|
}
|
|
170
174
|
else {
|
|
171
|
-
throw ClientAuthError
|
|
175
|
+
throw ClientAuthError.createEndpointDiscoveryIncompleteError("Discovery incomplete.");
|
|
172
176
|
}
|
|
173
177
|
},
|
|
174
|
-
enumerable:
|
|
178
|
+
enumerable: false,
|
|
175
179
|
configurable: true
|
|
176
180
|
});
|
|
177
181
|
Object.defineProperty(Authority.prototype, "selfSignedJwtAudience", {
|
|
@@ -184,10 +188,10 @@ var Authority = /** @class */ (function () {
|
|
|
184
188
|
return this.replaceTenant(endpoint);
|
|
185
189
|
}
|
|
186
190
|
else {
|
|
187
|
-
throw ClientAuthError
|
|
191
|
+
throw ClientAuthError.createEndpointDiscoveryIncompleteError("Discovery incomplete.");
|
|
188
192
|
}
|
|
189
193
|
},
|
|
190
|
-
enumerable:
|
|
194
|
+
enumerable: false,
|
|
191
195
|
configurable: true
|
|
192
196
|
});
|
|
193
197
|
/**
|
|
@@ -203,7 +207,7 @@ var Authority = /** @class */ (function () {
|
|
|
203
207
|
*/
|
|
204
208
|
Authority.prototype.replacePath = function (urlString) {
|
|
205
209
|
var endpoint = urlString;
|
|
206
|
-
var cachedAuthorityUrl = new UrlString
|
|
210
|
+
var cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority);
|
|
207
211
|
var cachedAuthorityParts = cachedAuthorityUrl.getUrlComponents().PathSegments;
|
|
208
212
|
var currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments;
|
|
209
213
|
currentAuthorityParts.forEach(function (currentPart, index) {
|
|
@@ -219,12 +223,12 @@ var Authority = /** @class */ (function () {
|
|
|
219
223
|
* The default open id configuration endpoint for any canonical authority.
|
|
220
224
|
*/
|
|
221
225
|
get: function () {
|
|
222
|
-
if (this.authorityType === AuthorityType
|
|
226
|
+
if (this.authorityType === AuthorityType.Adfs || this.protocolMode === ProtocolMode.OIDC) {
|
|
223
227
|
return this.canonicalAuthority + ".well-known/openid-configuration";
|
|
224
228
|
}
|
|
225
229
|
return this.canonicalAuthority + "v2.0/.well-known/openid-configuration";
|
|
226
230
|
},
|
|
227
|
-
enumerable:
|
|
231
|
+
enumerable: false,
|
|
228
232
|
configurable: true
|
|
229
233
|
});
|
|
230
234
|
/**
|
|
@@ -245,7 +249,7 @@ var Authority = /** @class */ (function () {
|
|
|
245
249
|
case 0:
|
|
246
250
|
metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);
|
|
247
251
|
if (!metadataEntity) {
|
|
248
|
-
metadataEntity = new AuthorityMetadataEntity
|
|
252
|
+
metadataEntity = new AuthorityMetadataEntity();
|
|
249
253
|
metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);
|
|
250
254
|
}
|
|
251
255
|
return [4 /*yield*/, this.updateCloudDiscoveryMetadata(metadataEntity)];
|
|
@@ -296,10 +300,10 @@ var Authority = /** @class */ (function () {
|
|
|
296
300
|
return [4 /*yield*/, this.regionDiscovery.detectRegion(this.authorityOptions.azureRegionConfiguration.environmentRegion, this.regionDiscoveryMetadata)];
|
|
297
301
|
case 2:
|
|
298
302
|
autodetectedRegionName = _b.sent();
|
|
299
|
-
azureRegion = this.authorityOptions.azureRegionConfiguration.azureRegion === Constants
|
|
303
|
+
azureRegion = this.authorityOptions.azureRegionConfiguration.azureRegion === Constants.AZURE_REGION_AUTO_DISCOVER_FLAG
|
|
300
304
|
? autodetectedRegionName
|
|
301
305
|
: this.authorityOptions.azureRegionConfiguration.azureRegion;
|
|
302
|
-
if (this.authorityOptions.azureRegionConfiguration.azureRegion === Constants
|
|
306
|
+
if (this.authorityOptions.azureRegionConfiguration.azureRegion === Constants.AZURE_REGION_AUTO_DISCOVER_FLAG) {
|
|
303
307
|
this.regionDiscoveryMetadata.region_outcome = autodetectedRegionName ?
|
|
304
308
|
RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL :
|
|
305
309
|
RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED;
|
|
@@ -322,7 +326,7 @@ var Authority = /** @class */ (function () {
|
|
|
322
326
|
case 3:
|
|
323
327
|
metadataEntity.updateEndpointMetadata(metadata, true);
|
|
324
328
|
return [2 /*return*/, AuthorityMetadataSource.NETWORK];
|
|
325
|
-
case 4: throw ClientAuthError
|
|
329
|
+
case 4: throw ClientAuthError.createUnableToGetOpenidConfigError(this.defaultOpenIdConfigurationEndpoint);
|
|
326
330
|
}
|
|
327
331
|
});
|
|
328
332
|
});
|
|
@@ -333,7 +337,7 @@ var Authority = /** @class */ (function () {
|
|
|
333
337
|
* @param metadataEntity
|
|
334
338
|
*/
|
|
335
339
|
Authority.prototype.isAuthoritySameType = function (metadataEntity) {
|
|
336
|
-
var cachedAuthorityUrl = new UrlString
|
|
340
|
+
var cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority);
|
|
337
341
|
var cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments;
|
|
338
342
|
return cachedParts.length === this.canonicalAuthorityUrlComponents.PathSegments.length;
|
|
339
343
|
};
|
|
@@ -346,7 +350,7 @@ var Authority = /** @class */ (function () {
|
|
|
346
350
|
return JSON.parse(this.authorityOptions.authorityMetadata);
|
|
347
351
|
}
|
|
348
352
|
catch (e) {
|
|
349
|
-
throw ClientConfigurationError
|
|
353
|
+
throw ClientConfigurationError.createInvalidAuthorityMetadataError();
|
|
350
354
|
}
|
|
351
355
|
}
|
|
352
356
|
return null;
|
|
@@ -356,7 +360,7 @@ var Authority = /** @class */ (function () {
|
|
|
356
360
|
*/
|
|
357
361
|
Authority.prototype.getEndpointMetadataFromNetwork = function () {
|
|
358
362
|
return __awaiter(this, void 0, void 0, function () {
|
|
359
|
-
var response
|
|
363
|
+
var response;
|
|
360
364
|
return __generator(this, function (_a) {
|
|
361
365
|
switch (_a.label) {
|
|
362
366
|
case 0:
|
|
@@ -366,7 +370,7 @@ var Authority = /** @class */ (function () {
|
|
|
366
370
|
response = _a.sent();
|
|
367
371
|
return [2 /*return*/, isOpenIdConfigResponse(response.body) ? response.body : null];
|
|
368
372
|
case 2:
|
|
369
|
-
|
|
373
|
+
_a.sent();
|
|
370
374
|
return [2 /*return*/, null];
|
|
371
375
|
case 3: return [2 /*return*/];
|
|
372
376
|
}
|
|
@@ -403,7 +407,7 @@ var Authority = /** @class */ (function () {
|
|
|
403
407
|
}
|
|
404
408
|
else {
|
|
405
409
|
// Metadata could not be obtained from config, cache or network
|
|
406
|
-
throw ClientConfigurationError
|
|
410
|
+
throw ClientConfigurationError.createUntrustedAuthorityError();
|
|
407
411
|
}
|
|
408
412
|
}
|
|
409
413
|
});
|
|
@@ -423,7 +427,7 @@ var Authority = /** @class */ (function () {
|
|
|
423
427
|
}
|
|
424
428
|
}
|
|
425
429
|
catch (e) {
|
|
426
|
-
throw ClientConfigurationError
|
|
430
|
+
throw ClientConfigurationError.createInvalidCloudDiscoveryMetadataError();
|
|
427
431
|
}
|
|
428
432
|
}
|
|
429
433
|
// If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities
|
|
@@ -438,11 +442,11 @@ var Authority = /** @class */ (function () {
|
|
|
438
442
|
*/
|
|
439
443
|
Authority.prototype.getCloudDiscoveryMetadataFromNetwork = function () {
|
|
440
444
|
return __awaiter(this, void 0, void 0, function () {
|
|
441
|
-
var instanceDiscoveryEndpoint, match, response, metadata
|
|
445
|
+
var instanceDiscoveryEndpoint, match, response, metadata;
|
|
442
446
|
return __generator(this, function (_a) {
|
|
443
447
|
switch (_a.label) {
|
|
444
448
|
case 0:
|
|
445
|
-
instanceDiscoveryEndpoint = "" + Constants
|
|
449
|
+
instanceDiscoveryEndpoint = "" + Constants.AAD_INSTANCE_DISCOVERY_ENDPT + this.canonicalAuthority + "oauth2/v2.0/authorize";
|
|
446
450
|
match = null;
|
|
447
451
|
_a.label = 1;
|
|
448
452
|
case 1:
|
|
@@ -458,7 +462,7 @@ var Authority = /** @class */ (function () {
|
|
|
458
462
|
match = Authority.getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort);
|
|
459
463
|
return [3 /*break*/, 4];
|
|
460
464
|
case 3:
|
|
461
|
-
|
|
465
|
+
_a.sent();
|
|
462
466
|
return [2 /*return*/, null];
|
|
463
467
|
case 4:
|
|
464
468
|
if (!match) {
|
|
@@ -476,7 +480,7 @@ var Authority = /** @class */ (function () {
|
|
|
476
480
|
Authority.prototype.isInKnownAuthorities = function () {
|
|
477
481
|
var _this = this;
|
|
478
482
|
var matches = this.authorityOptions.knownAuthorities.filter(function (authority) {
|
|
479
|
-
return UrlString
|
|
483
|
+
return UrlString.getDomainFromUrl(authority).toLowerCase() === _this.hostnameAndPort;
|
|
480
484
|
});
|
|
481
485
|
return matches.length > 0;
|
|
482
486
|
};
|
|
@@ -513,7 +517,7 @@ var Authority = /** @class */ (function () {
|
|
|
513
517
|
return this.metadata.preferred_cache;
|
|
514
518
|
}
|
|
515
519
|
else {
|
|
516
|
-
throw ClientAuthError
|
|
520
|
+
throw ClientAuthError.createEndpointDiscoveryIncompleteError("Discovery incomplete.");
|
|
517
521
|
}
|
|
518
522
|
};
|
|
519
523
|
/**
|
|
@@ -530,7 +534,7 @@ var Authority = /** @class */ (function () {
|
|
|
530
534
|
* @returns bool
|
|
531
535
|
*/
|
|
532
536
|
Authority.isPublicCloudAuthority = function (host) {
|
|
533
|
-
return Constants
|
|
537
|
+
return Constants.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0;
|
|
534
538
|
};
|
|
535
539
|
/**
|
|
536
540
|
* Rebuild the authority string with the region
|
|
@@ -540,15 +544,15 @@ var Authority = /** @class */ (function () {
|
|
|
540
544
|
*/
|
|
541
545
|
Authority.buildRegionalAuthorityString = function (host, region, queryString) {
|
|
542
546
|
// Create and validate a Url string object with the initial authority string
|
|
543
|
-
var authorityUrlInstance = new UrlString
|
|
547
|
+
var authorityUrlInstance = new UrlString(host);
|
|
544
548
|
authorityUrlInstance.validateAsUri();
|
|
545
549
|
var authorityUrlParts = authorityUrlInstance.getUrlComponents();
|
|
546
550
|
var hostNameAndPort = region + "." + authorityUrlParts.HostNameAndPort;
|
|
547
551
|
if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) {
|
|
548
|
-
hostNameAndPort = region + "." + Constants
|
|
552
|
+
hostNameAndPort = region + "." + Constants.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX;
|
|
549
553
|
}
|
|
550
554
|
// Include the query string portion of the url
|
|
551
|
-
var url = UrlString
|
|
555
|
+
var url = UrlString.constructAuthorityUriFromObject(__assign(__assign({}, authorityUrlInstance.getUrlComponents()), { HostNameAndPort: hostNameAndPort })).urlString;
|
|
552
556
|
// Add the query string if a query string was provided
|
|
553
557
|
if (queryString)
|
|
554
558
|
return url + "?" + queryString;
|
|
@@ -564,7 +568,9 @@ var Authority = /** @class */ (function () {
|
|
|
564
568
|
metadata.authorization_endpoint = Authority.buildRegionalAuthorityString(metadata.authorization_endpoint, azureRegion);
|
|
565
569
|
// TODO: Enquire on whether we should leave the query string or remove it before releasing the feature
|
|
566
570
|
metadata.token_endpoint = Authority.buildRegionalAuthorityString(metadata.token_endpoint, azureRegion, "allowestsrnonmsi=true");
|
|
567
|
-
|
|
571
|
+
if (metadata.end_session_endpoint) {
|
|
572
|
+
metadata.end_session_endpoint = Authority.buildRegionalAuthorityString(metadata.end_session_endpoint, azureRegion);
|
|
573
|
+
}
|
|
568
574
|
return metadata;
|
|
569
575
|
};
|
|
570
576
|
return Authority;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Authority.js","sources":["../../src/authority/Authority.ts"],"sourcesContent":["/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthorityType } from \"./AuthorityType\";\r\nimport { isOpenIdConfigResponse, OpenIdConfigResponse } from \"./OpenIdConfigResponse\";\r\nimport { UrlString } from \"../url/UrlString\";\r\nimport { IUri } from \"../url/IUri\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { INetworkModule } from \"../network/INetworkModule\";\r\nimport { AuthorityMetadataSource, Constants, RegionDiscoveryOutcomes } from \"../utils/Constants\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { ProtocolMode } from \"./ProtocolMode\";\r\nimport { ICacheManager } from \"../cache/interface/ICacheManager\";\r\nimport { AuthorityMetadataEntity } from \"../cache/entities/AuthorityMetadataEntity\";\r\nimport { AuthorityOptions } from \"./AuthorityOptions\";\r\nimport { CloudInstanceDiscoveryResponse, isCloudInstanceDiscoveryResponse } from \"./CloudInstanceDiscoveryResponse\";\r\nimport { CloudDiscoveryMetadata } from \"./CloudDiscoveryMetadata\";\r\nimport { RegionDiscovery } from \"./RegionDiscovery\";\r\nimport { RegionDiscoveryMetadata } from \"./RegionDiscoveryMetadata\";\r\n\r\n/**\r\n * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the\r\n * endpoint. It will store the pertinent config data in this object for use during token calls.\r\n */\r\nexport class Authority {\r\n\r\n // Canonical authority url string\r\n private _canonicalAuthority: UrlString;\r\n // Canonicaly authority url components\r\n private _canonicalAuthorityUrlComponents: IUri | null;\r\n // Network interface to make requests with.\r\n protected networkInterface: INetworkModule;\r\n // Cache Manager to cache network responses\r\n protected cacheManager: ICacheManager;\r\n // Protocol mode to construct endpoints\r\n private authorityOptions: AuthorityOptions;\r\n // Authority metadata\r\n private metadata: AuthorityMetadataEntity;\r\n // Region discovery service\r\n private regionDiscovery: RegionDiscovery;\r\n // Region discovery metadata\r\n public regionDiscoveryMetadata: RegionDiscoveryMetadata;\r\n\r\n constructor(authority: string, networkInterface: INetworkModule, cacheManager: ICacheManager, authorityOptions: AuthorityOptions) {\r\n this.canonicalAuthority = authority;\r\n this._canonicalAuthority.validateAsUri();\r\n this.networkInterface = networkInterface;\r\n this.cacheManager = cacheManager;\r\n this.authorityOptions = authorityOptions;\r\n this.regionDiscovery = new RegionDiscovery(networkInterface);\r\n this.regionDiscoveryMetadata = { region_used: undefined, region_source: undefined, region_outcome: undefined };\r\n }\r\n\r\n // See above for AuthorityType\r\n public get authorityType(): AuthorityType {\r\n const pathSegments = this.canonicalAuthorityUrlComponents.PathSegments;\r\n\r\n if (pathSegments.length && pathSegments[0].toLowerCase() === Constants.ADFS) {\r\n return AuthorityType.Adfs;\r\n }\r\n\r\n return AuthorityType.Default;\r\n }\r\n\r\n /**\r\n * ProtocolMode enum representing the way endpoints are constructed.\r\n */\r\n public get protocolMode(): ProtocolMode {\r\n return this.authorityOptions.protocolMode;\r\n }\r\n\r\n /**\r\n * Returns authorityOptions which can be used to reinstantiate a new authority instance\r\n */\r\n public get options(): AuthorityOptions {\r\n return this.authorityOptions;\r\n }\r\n\r\n /**\r\n * A URL that is the authority set by the developer\r\n */\r\n public get canonicalAuthority(): string {\r\n return this._canonicalAuthority.urlString;\r\n }\r\n\r\n /**\r\n * Sets canonical authority.\r\n */\r\n public set canonicalAuthority(url: string) {\r\n this._canonicalAuthority = new UrlString(url);\r\n this._canonicalAuthority.validateAsUri();\r\n this._canonicalAuthorityUrlComponents = null;\r\n }\r\n\r\n /**\r\n * Get authority components.\r\n */\r\n public get canonicalAuthorityUrlComponents(): IUri {\r\n if (!this._canonicalAuthorityUrlComponents) {\r\n this._canonicalAuthorityUrlComponents = this._canonicalAuthority.getUrlComponents();\r\n }\r\n\r\n return this._canonicalAuthorityUrlComponents;\r\n }\r\n\r\n /**\r\n * Get hostname and port i.e. login.microsoftonline.com\r\n */\r\n public get hostnameAndPort(): string {\r\n return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase();\r\n }\r\n\r\n /**\r\n * Get tenant for authority.\r\n */\r\n public get tenant(): string {\r\n return this.canonicalAuthorityUrlComponents.PathSegments[0];\r\n }\r\n\r\n /**\r\n * OAuth /authorize endpoint for requests\r\n */\r\n public get authorizationEndpoint(): string {\r\n if(this.discoveryComplete()) {\r\n const endpoint = this.replacePath(this.metadata.authorization_endpoint);\r\n return this.replaceTenant(endpoint);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * OAuth /token endpoint for requests\r\n */\r\n public get tokenEndpoint(): string {\r\n if(this.discoveryComplete()) {\r\n const endpoint = this.replacePath(this.metadata.token_endpoint);\r\n return this.replaceTenant(endpoint);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n public get deviceCodeEndpoint(): string {\r\n if(this.discoveryComplete()) {\r\n const endpoint = this.replacePath(this.metadata.token_endpoint.replace(\"/token\", \"/devicecode\"));\r\n return this.replaceTenant(endpoint);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * OAuth logout endpoint for requests\r\n */\r\n public get endSessionEndpoint(): string {\r\n if(this.discoveryComplete()) {\r\n const endpoint = this.replacePath(this.metadata.end_session_endpoint);\r\n return this.replaceTenant(endpoint);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * OAuth issuer for requests\r\n */\r\n public get selfSignedJwtAudience(): string {\r\n if(this.discoveryComplete()) {\r\n const endpoint = this.replacePath(this.metadata.issuer);\r\n return this.replaceTenant(endpoint);\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * Replaces tenant in url path with current tenant. Defaults to common.\r\n * @param urlString\r\n */\r\n private replaceTenant(urlString: string): string {\r\n return urlString.replace(/{tenant}|{tenantid}/g, this.tenant);\r\n }\r\n\r\n /**\r\n * Replaces path such as tenant or policy with the current tenant or policy.\r\n * @param urlString \r\n */\r\n private replacePath(urlString: string): string {\r\n let endpoint = urlString;\r\n const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority);\r\n const cachedAuthorityParts = cachedAuthorityUrl.getUrlComponents().PathSegments;\r\n const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments;\r\n\r\n currentAuthorityParts.forEach((currentPart, index) => {\r\n const cachedPart = cachedAuthorityParts[index];\r\n if (currentPart !== cachedPart) {\r\n endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`);\r\n }\r\n });\r\n\r\n return endpoint;\r\n }\r\n\r\n /**\r\n * The default open id configuration endpoint for any canonical authority.\r\n */\r\n protected get defaultOpenIdConfigurationEndpoint(): string {\r\n if (this.authorityType === AuthorityType.Adfs || this.protocolMode === ProtocolMode.OIDC) {\r\n return `${this.canonicalAuthority}.well-known/openid-configuration`;\r\n }\r\n return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`;\r\n }\r\n\r\n /**\r\n * Boolean that returns whethr or not tenant discovery has been completed.\r\n */\r\n discoveryComplete(): boolean {\r\n return !!this.metadata;\r\n }\r\n\r\n /**\r\n * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network\r\n * and the /authorize, /token and logout endpoints.\r\n */\r\n public async resolveEndpointsAsync(): Promise<void> {\r\n let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);\r\n if (!metadataEntity) {\r\n metadataEntity = new AuthorityMetadataEntity();\r\n metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);\r\n }\r\n\r\n const cloudDiscoverySource = await this.updateCloudDiscoveryMetadata(metadataEntity);\r\n this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network);\r\n const endpointSource = await this.updateEndpointMetadata(metadataEntity);\r\n\r\n if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE && endpointSource !== AuthorityMetadataSource.CACHE) {\r\n // Reset the expiration time unless both values came from a successful cache lookup\r\n metadataEntity.resetExpiresAt();\r\n metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);\r\n } \r\n\r\n const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache);\r\n this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity);\r\n this.metadata = metadataEntity;\r\n }\r\n\r\n /**\r\n * Update AuthorityMetadataEntity with new endpoints and return where the information came from\r\n * @param metadataEntity \r\n */\r\n private async updateEndpointMetadata(metadataEntity: AuthorityMetadataEntity): Promise<AuthorityMetadataSource> {\r\n let metadata = this.getEndpointMetadataFromConfig();\r\n if (metadata) {\r\n metadataEntity.updateEndpointMetadata(metadata, false);\r\n return AuthorityMetadataSource.CONFIG;\r\n }\r\n\r\n if (this.isAuthoritySameType(metadataEntity) && metadataEntity.endpointsFromNetwork && !metadataEntity.isExpired()) {\r\n // No need to update\r\n return AuthorityMetadataSource.CACHE;\r\n }\r\n\r\n metadata = await this.getEndpointMetadataFromNetwork();\r\n if (metadata) {\r\n // If the user prefers to use an azure region replace the global endpoints with regional information.\r\n if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\r\n const autodetectedRegionName = await this.regionDiscovery.detectRegion(this.authorityOptions.azureRegionConfiguration.environmentRegion, this.regionDiscoveryMetadata);\r\n\r\n const azureRegion = this.authorityOptions.azureRegionConfiguration.azureRegion === Constants.AZURE_REGION_AUTO_DISCOVER_FLAG \r\n ? autodetectedRegionName \r\n : this.authorityOptions.azureRegionConfiguration.azureRegion;\r\n\r\n if (this.authorityOptions.azureRegionConfiguration.azureRegion === Constants.AZURE_REGION_AUTO_DISCOVER_FLAG) {\r\n this.regionDiscoveryMetadata.region_outcome = autodetectedRegionName ?\r\n RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL :\r\n RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED;\r\n } else {\r\n if (autodetectedRegionName) {\r\n this.regionDiscoveryMetadata.region_outcome = (this.authorityOptions.azureRegionConfiguration.azureRegion === autodetectedRegionName) ?\r\n RegionDiscoveryOutcomes.CONFIGURED_MATCHES_DETECTED :\r\n RegionDiscoveryOutcomes.CONFIGURED_NOT_DETECTED;\r\n } else {\r\n this.regionDiscoveryMetadata.region_outcome = RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION;\r\n }\r\n }\r\n\r\n if (azureRegion) {\r\n this.regionDiscoveryMetadata.region_used = azureRegion;\r\n metadata = Authority.replaceWithRegionalInformation(metadata, azureRegion);\r\n }\r\n }\r\n\r\n metadataEntity.updateEndpointMetadata(metadata, true);\r\n return AuthorityMetadataSource.NETWORK;\r\n } else {\r\n throw ClientAuthError.createUnableToGetOpenidConfigError(this.defaultOpenIdConfigurationEndpoint);\r\n }\r\n }\r\n\r\n /**\r\n * Compares the number of url components after the domain to determine if the cached authority metadata can be used for the requested authority\r\n * Protects against same domain different authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy\r\n * @param metadataEntity\r\n */\r\n private isAuthoritySameType(metadataEntity: AuthorityMetadataEntity): boolean {\r\n const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority);\r\n const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments;\r\n \r\n return cachedParts.length === this.canonicalAuthorityUrlComponents.PathSegments.length;\r\n }\r\n\r\n /**\r\n * Parse authorityMetadata config option\r\n */\r\n private getEndpointMetadataFromConfig(): OpenIdConfigResponse | null {\r\n if (this.authorityOptions.authorityMetadata) {\r\n try {\r\n return JSON.parse(this.authorityOptions.authorityMetadata) as OpenIdConfigResponse;\r\n } catch (e) {\r\n throw ClientConfigurationError.createInvalidAuthorityMetadataError();\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets OAuth endpoints from the given OpenID configuration endpoint.\r\n */\r\n private async getEndpointMetadataFromNetwork(): Promise<OpenIdConfigResponse | null> {\r\n try {\r\n const response = await this.networkInterface.sendGetRequestAsync<OpenIdConfigResponse>(this.defaultOpenIdConfigurationEndpoint);\r\n return isOpenIdConfigResponse(response.body) ? response.body : null;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache and returns where the information was retrived from\r\n * @param cachedMetadata \r\n * @param newMetadata \r\n */\r\n private async updateCloudDiscoveryMetadata(metadataEntity: AuthorityMetadataEntity): Promise<AuthorityMetadataSource> {\r\n let metadata = this.getCloudDiscoveryMetadataFromConfig();\r\n if (metadata) {\r\n metadataEntity.updateCloudDiscoveryMetadata(metadata, false);\r\n return AuthorityMetadataSource.CONFIG;\r\n }\r\n\r\n // If The cached metadata came from config but that config was not passed to this instance, we must go to the network\r\n if (this.isAuthoritySameType(metadataEntity) && metadataEntity.aliasesFromNetwork && !metadataEntity.isExpired()) {\r\n // No need to update\r\n return AuthorityMetadataSource.CACHE;\r\n }\r\n\r\n metadata = await this.getCloudDiscoveryMetadataFromNetwork();\r\n if (metadata) {\r\n metadataEntity.updateCloudDiscoveryMetadata(metadata, true);\r\n return AuthorityMetadataSource.NETWORK;\r\n } else {\r\n // Metadata could not be obtained from config, cache or network\r\n throw ClientConfigurationError.createUntrustedAuthorityError();\r\n }\r\n }\r\n\r\n /**\r\n * Parse cloudDiscoveryMetadata config or check knownAuthorities\r\n */\r\n private getCloudDiscoveryMetadataFromConfig(): CloudDiscoveryMetadata | null {\r\n // Check if network response was provided in config\r\n if (this.authorityOptions.cloudDiscoveryMetadata) {\r\n try {\r\n const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata) as CloudInstanceDiscoveryResponse;\r\n const metadata = Authority.getCloudDiscoveryMetadataFromNetworkResponse(parsedResponse.metadata, this.hostnameAndPort);\r\n if (metadata) {\r\n return metadata;\r\n }\r\n } catch (e) {\r\n throw ClientConfigurationError.createInvalidCloudDiscoveryMetadataError();\r\n }\r\n }\r\n\r\n // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities\r\n if (this.isInKnownAuthorities()) {\r\n return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config\r\n * @param networkInterface \r\n */\r\n private async getCloudDiscoveryMetadataFromNetwork(): Promise<CloudDiscoveryMetadata | null> {\r\n const instanceDiscoveryEndpoint = `${Constants.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`;\r\n let match = null;\r\n try {\r\n const response = await this.networkInterface.sendGetRequestAsync<CloudInstanceDiscoveryResponse>(instanceDiscoveryEndpoint);\r\n const metadata = isCloudInstanceDiscoveryResponse(response.body) ? response.body.metadata : [];\r\n if (metadata.length === 0) {\r\n // If no metadata is returned, authority is untrusted\r\n return null;\r\n }\r\n match = Authority.getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort);\r\n } catch(e) {\r\n return null;\r\n }\r\n\r\n if (!match) {\r\n // Custom Domain scenario, host is trusted because Instance Discovery call succeeded \r\n match = Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n }\r\n return match;\r\n } \r\n\r\n /**\r\n * Helper function to determine if this host is included in the knownAuthorities config option\r\n */\r\n private isInKnownAuthorities(): boolean {\r\n const matches = this.authorityOptions.knownAuthorities.filter((authority) => {\r\n return UrlString.getDomainFromUrl(authority).toLowerCase() === this.hostnameAndPort;\r\n });\r\n\r\n return matches.length > 0;\r\n }\r\n\r\n /**\r\n * Creates cloud discovery metadata object from a given host\r\n * @param host \r\n */\r\n static createCloudDiscoveryMetadataFromHost(host: string): CloudDiscoveryMetadata {\r\n return {\r\n preferred_network: host,\r\n preferred_cache: host,\r\n aliases: [host]\r\n };\r\n }\r\n\r\n /**\r\n * Searches instance discovery network response for the entry that contains the host in the aliases list\r\n * @param response \r\n * @param authority \r\n */\r\n static getCloudDiscoveryMetadataFromNetworkResponse(response: CloudDiscoveryMetadata[], authority: string): CloudDiscoveryMetadata | null {\r\n for (let i = 0; i < response.length; i++) {\r\n const metadata = response[i];\r\n if (metadata.aliases.indexOf(authority) > -1) {\r\n return metadata;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * helper function to generate environment from authority object\r\n */\r\n getPreferredCache(): string {\r\n if(this.discoveryComplete()) {\r\n return this.metadata.preferred_cache;\r\n } else {\r\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\r\n }\r\n }\r\n\r\n /**\r\n * Returns whether or not the provided host is an alias of this authority instance\r\n * @param host \r\n */\r\n isAlias(host: string): boolean {\r\n return this.metadata.aliases.indexOf(host) > -1;\r\n }\r\n\r\n /**\r\n * Checks whether the provided host is that of a public cloud authority\r\n * \r\n * @param authority string\r\n * @returns bool\r\n */\r\n static isPublicCloudAuthority(host: string): boolean {\r\n return Constants.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0;\r\n }\r\n\r\n /**\r\n * Rebuild the authority string with the region\r\n * \r\n * @param host string\r\n * @param region string \r\n */\r\n static buildRegionalAuthorityString(host: string, region: string, queryString?: string): string {\r\n // Create and validate a Url string object with the initial authority string\r\n const authorityUrlInstance = new UrlString(host);\r\n authorityUrlInstance.validateAsUri();\r\n\r\n const authorityUrlParts = authorityUrlInstance.getUrlComponents();\r\n\r\n let hostNameAndPort= `${region}.${authorityUrlParts.HostNameAndPort}`;\r\n\r\n if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) {\r\n hostNameAndPort = `${region}.${Constants.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`;\r\n }\r\n\r\n // Include the query string portion of the url\r\n const url = UrlString.constructAuthorityUriFromObject({\r\n ...authorityUrlInstance.getUrlComponents(),\r\n HostNameAndPort: hostNameAndPort\r\n }).urlString;\r\n\r\n // Add the query string if a query string was provided\r\n if (queryString) return `${url}?${queryString}`;\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Replace the endpoints in the metadata object with their regional equivalents.\r\n * \r\n * @param metadata OpenIdConfigResponse\r\n * @param azureRegion string\r\n */\r\n static replaceWithRegionalInformation(metadata: OpenIdConfigResponse, azureRegion: string): OpenIdConfigResponse {\r\n metadata.authorization_endpoint = Authority.buildRegionalAuthorityString(metadata.authorization_endpoint, azureRegion);\r\n // TODO: Enquire on whether we should leave the query string or remove it before releasing the feature\r\n metadata.token_endpoint = Authority.buildRegionalAuthorityString(metadata.token_endpoint, azureRegion, \"allowestsrnonmsi=true\");\r\n metadata.end_session_endpoint = Authority.buildRegionalAuthorityString(metadata.end_session_endpoint, azureRegion);\r\n \r\n return metadata;\r\n }\r\n}\r\n"],"names":["RegionDiscovery","Constants","AuthorityType","UrlString","ClientAuthError","ProtocolMode","AuthorityMetadataEntity","ClientConfigurationError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Authority.js","sources":["../../src/authority/Authority.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthorityType } from \"./AuthorityType\";\nimport { isOpenIdConfigResponse, OpenIdConfigResponse } from \"./OpenIdConfigResponse\";\nimport { UrlString } from \"../url/UrlString\";\nimport { IUri } from \"../url/IUri\";\nimport { ClientAuthError } from \"../error/ClientAuthError\";\nimport { INetworkModule } from \"../network/INetworkModule\";\nimport { AuthorityMetadataSource, Constants, RegionDiscoveryOutcomes } from \"../utils/Constants\";\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\nimport { ProtocolMode } from \"./ProtocolMode\";\nimport { ICacheManager } from \"../cache/interface/ICacheManager\";\nimport { AuthorityMetadataEntity } from \"../cache/entities/AuthorityMetadataEntity\";\nimport { AuthorityOptions } from \"./AuthorityOptions\";\nimport { CloudInstanceDiscoveryResponse, isCloudInstanceDiscoveryResponse } from \"./CloudInstanceDiscoveryResponse\";\nimport { CloudDiscoveryMetadata } from \"./CloudDiscoveryMetadata\";\nimport { RegionDiscovery } from \"./RegionDiscovery\";\nimport { RegionDiscoveryMetadata } from \"./RegionDiscoveryMetadata\";\n\n/**\n * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the\n * endpoint. It will store the pertinent config data in this object for use during token calls.\n */\nexport class Authority {\n\n // Canonical authority url string\n private _canonicalAuthority: UrlString;\n // Canonicaly authority url components\n private _canonicalAuthorityUrlComponents: IUri | null;\n // Network interface to make requests with.\n protected networkInterface: INetworkModule;\n // Cache Manager to cache network responses\n protected cacheManager: ICacheManager;\n // Protocol mode to construct endpoints\n private authorityOptions: AuthorityOptions;\n // Authority metadata\n private metadata: AuthorityMetadataEntity;\n // Region discovery service\n private regionDiscovery: RegionDiscovery;\n // Region discovery metadata\n public regionDiscoveryMetadata: RegionDiscoveryMetadata;\n\n constructor(authority: string, networkInterface: INetworkModule, cacheManager: ICacheManager, authorityOptions: AuthorityOptions) {\n this.canonicalAuthority = authority;\n this._canonicalAuthority.validateAsUri();\n this.networkInterface = networkInterface;\n this.cacheManager = cacheManager;\n this.authorityOptions = authorityOptions;\n this.regionDiscovery = new RegionDiscovery(networkInterface);\n this.regionDiscoveryMetadata = { region_used: undefined, region_source: undefined, region_outcome: undefined };\n }\n\n // See above for AuthorityType\n public get authorityType(): AuthorityType {\n const pathSegments = this.canonicalAuthorityUrlComponents.PathSegments;\n\n if (pathSegments.length && pathSegments[0].toLowerCase() === Constants.ADFS) {\n return AuthorityType.Adfs;\n }\n\n return AuthorityType.Default;\n }\n\n /**\n * ProtocolMode enum representing the way endpoints are constructed.\n */\n public get protocolMode(): ProtocolMode {\n return this.authorityOptions.protocolMode;\n }\n\n /**\n * Returns authorityOptions which can be used to reinstantiate a new authority instance\n */\n public get options(): AuthorityOptions {\n return this.authorityOptions;\n }\n\n /**\n * A URL that is the authority set by the developer\n */\n public get canonicalAuthority(): string {\n return this._canonicalAuthority.urlString;\n }\n\n /**\n * Sets canonical authority.\n */\n public set canonicalAuthority(url: string) {\n this._canonicalAuthority = new UrlString(url);\n this._canonicalAuthority.validateAsUri();\n this._canonicalAuthorityUrlComponents = null;\n }\n\n /**\n * Get authority components.\n */\n public get canonicalAuthorityUrlComponents(): IUri {\n if (!this._canonicalAuthorityUrlComponents) {\n this._canonicalAuthorityUrlComponents = this._canonicalAuthority.getUrlComponents();\n }\n\n return this._canonicalAuthorityUrlComponents;\n }\n\n /**\n * Get hostname and port i.e. login.microsoftonline.com\n */\n public get hostnameAndPort(): string {\n return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase();\n }\n\n /**\n * Get tenant for authority.\n */\n public get tenant(): string {\n return this.canonicalAuthorityUrlComponents.PathSegments[0];\n }\n\n /**\n * OAuth /authorize endpoint for requests\n */\n public get authorizationEndpoint(): string {\n if(this.discoveryComplete()) {\n const endpoint = this.replacePath(this.metadata.authorization_endpoint);\n return this.replaceTenant(endpoint);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n }\n\n /**\n * OAuth /token endpoint for requests\n */\n public get tokenEndpoint(): string {\n if(this.discoveryComplete()) {\n const endpoint = this.replacePath(this.metadata.token_endpoint);\n return this.replaceTenant(endpoint);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n }\n\n public get deviceCodeEndpoint(): string {\n if(this.discoveryComplete()) {\n const endpoint = this.replacePath(this.metadata.token_endpoint.replace(\"/token\", \"/devicecode\"));\n return this.replaceTenant(endpoint);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n }\n\n /**\n * OAuth logout endpoint for requests\n */\n public get endSessionEndpoint(): string {\n if(this.discoveryComplete()) {\n // ROPC policies may not have end_session_endpoint set\n if (!this.metadata.end_session_endpoint) {\n throw ClientAuthError.createLogoutNotSupportedError();\n }\n const endpoint = this.replacePath(this.metadata.end_session_endpoint);\n return this.replaceTenant(endpoint);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n }\n\n /**\n * OAuth issuer for requests\n */\n public get selfSignedJwtAudience(): string {\n if(this.discoveryComplete()) {\n const endpoint = this.replacePath(this.metadata.issuer);\n return this.replaceTenant(endpoint);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n }\n\n /**\n * Replaces tenant in url path with current tenant. Defaults to common.\n * @param urlString\n */\n private replaceTenant(urlString: string): string {\n return urlString.replace(/{tenant}|{tenantid}/g, this.tenant);\n }\n\n /**\n * Replaces path such as tenant or policy with the current tenant or policy.\n * @param urlString \n */\n private replacePath(urlString: string): string {\n let endpoint = urlString;\n const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority);\n const cachedAuthorityParts = cachedAuthorityUrl.getUrlComponents().PathSegments;\n const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments;\n\n currentAuthorityParts.forEach((currentPart, index) => {\n const cachedPart = cachedAuthorityParts[index];\n if (currentPart !== cachedPart) {\n endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`);\n }\n });\n\n return endpoint;\n }\n\n /**\n * The default open id configuration endpoint for any canonical authority.\n */\n protected get defaultOpenIdConfigurationEndpoint(): string {\n if (this.authorityType === AuthorityType.Adfs || this.protocolMode === ProtocolMode.OIDC) {\n return `${this.canonicalAuthority}.well-known/openid-configuration`;\n }\n return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`;\n }\n\n /**\n * Boolean that returns whethr or not tenant discovery has been completed.\n */\n discoveryComplete(): boolean {\n return !!this.metadata;\n }\n\n /**\n * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network\n * and the /authorize, /token and logout endpoints.\n */\n public async resolveEndpointsAsync(): Promise<void> {\n let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);\n if (!metadataEntity) {\n metadataEntity = new AuthorityMetadataEntity();\n metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);\n }\n\n const cloudDiscoverySource = await this.updateCloudDiscoveryMetadata(metadataEntity);\n this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network);\n const endpointSource = await this.updateEndpointMetadata(metadataEntity);\n\n if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE && endpointSource !== AuthorityMetadataSource.CACHE) {\n // Reset the expiration time unless both values came from a successful cache lookup\n metadataEntity.resetExpiresAt();\n metadataEntity.updateCanonicalAuthority(this.canonicalAuthority);\n } \n\n const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache);\n this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity);\n this.metadata = metadataEntity;\n }\n\n /**\n * Update AuthorityMetadataEntity with new endpoints and return where the information came from\n * @param metadataEntity \n */\n private async updateEndpointMetadata(metadataEntity: AuthorityMetadataEntity): Promise<AuthorityMetadataSource> {\n let metadata = this.getEndpointMetadataFromConfig();\n if (metadata) {\n metadataEntity.updateEndpointMetadata(metadata, false);\n return AuthorityMetadataSource.CONFIG;\n }\n\n if (this.isAuthoritySameType(metadataEntity) && metadataEntity.endpointsFromNetwork && !metadataEntity.isExpired()) {\n // No need to update\n return AuthorityMetadataSource.CACHE;\n }\n\n metadata = await this.getEndpointMetadataFromNetwork();\n if (metadata) {\n // If the user prefers to use an azure region replace the global endpoints with regional information.\n if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\n const autodetectedRegionName = await this.regionDiscovery.detectRegion(this.authorityOptions.azureRegionConfiguration.environmentRegion, this.regionDiscoveryMetadata);\n\n const azureRegion = this.authorityOptions.azureRegionConfiguration.azureRegion === Constants.AZURE_REGION_AUTO_DISCOVER_FLAG \n ? autodetectedRegionName \n : this.authorityOptions.azureRegionConfiguration.azureRegion;\n\n if (this.authorityOptions.azureRegionConfiguration.azureRegion === Constants.AZURE_REGION_AUTO_DISCOVER_FLAG) {\n this.regionDiscoveryMetadata.region_outcome = autodetectedRegionName ?\n RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL :\n RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED;\n } else {\n if (autodetectedRegionName) {\n this.regionDiscoveryMetadata.region_outcome = (this.authorityOptions.azureRegionConfiguration.azureRegion === autodetectedRegionName) ?\n RegionDiscoveryOutcomes.CONFIGURED_MATCHES_DETECTED :\n RegionDiscoveryOutcomes.CONFIGURED_NOT_DETECTED;\n } else {\n this.regionDiscoveryMetadata.region_outcome = RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION;\n }\n }\n\n if (azureRegion) {\n this.regionDiscoveryMetadata.region_used = azureRegion;\n metadata = Authority.replaceWithRegionalInformation(metadata, azureRegion);\n }\n }\n\n metadataEntity.updateEndpointMetadata(metadata, true);\n return AuthorityMetadataSource.NETWORK;\n } else {\n throw ClientAuthError.createUnableToGetOpenidConfigError(this.defaultOpenIdConfigurationEndpoint);\n }\n }\n\n /**\n * Compares the number of url components after the domain to determine if the cached authority metadata can be used for the requested authority\n * Protects against same domain different authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy\n * @param metadataEntity\n */\n private isAuthoritySameType(metadataEntity: AuthorityMetadataEntity): boolean {\n const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority);\n const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments;\n \n return cachedParts.length === this.canonicalAuthorityUrlComponents.PathSegments.length;\n }\n\n /**\n * Parse authorityMetadata config option\n */\n private getEndpointMetadataFromConfig(): OpenIdConfigResponse | null {\n if (this.authorityOptions.authorityMetadata) {\n try {\n return JSON.parse(this.authorityOptions.authorityMetadata) as OpenIdConfigResponse;\n } catch (e) {\n throw ClientConfigurationError.createInvalidAuthorityMetadataError();\n }\n }\n\n return null;\n }\n\n /**\n * Gets OAuth endpoints from the given OpenID configuration endpoint.\n */\n private async getEndpointMetadataFromNetwork(): Promise<OpenIdConfigResponse | null> {\n try {\n const response = await this.networkInterface.sendGetRequestAsync<OpenIdConfigResponse>(this.defaultOpenIdConfigurationEndpoint);\n return isOpenIdConfigResponse(response.body) ? response.body : null;\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache and returns where the information was retrived from\n * @param cachedMetadata \n * @param newMetadata \n */\n private async updateCloudDiscoveryMetadata(metadataEntity: AuthorityMetadataEntity): Promise<AuthorityMetadataSource> {\n let metadata = this.getCloudDiscoveryMetadataFromConfig();\n if (metadata) {\n metadataEntity.updateCloudDiscoveryMetadata(metadata, false);\n return AuthorityMetadataSource.CONFIG;\n }\n\n // If The cached metadata came from config but that config was not passed to this instance, we must go to the network\n if (this.isAuthoritySameType(metadataEntity) && metadataEntity.aliasesFromNetwork && !metadataEntity.isExpired()) {\n // No need to update\n return AuthorityMetadataSource.CACHE;\n }\n\n metadata = await this.getCloudDiscoveryMetadataFromNetwork();\n if (metadata) {\n metadataEntity.updateCloudDiscoveryMetadata(metadata, true);\n return AuthorityMetadataSource.NETWORK;\n } else {\n // Metadata could not be obtained from config, cache or network\n throw ClientConfigurationError.createUntrustedAuthorityError();\n }\n }\n\n /**\n * Parse cloudDiscoveryMetadata config or check knownAuthorities\n */\n private getCloudDiscoveryMetadataFromConfig(): CloudDiscoveryMetadata | null {\n // Check if network response was provided in config\n if (this.authorityOptions.cloudDiscoveryMetadata) {\n try {\n const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata) as CloudInstanceDiscoveryResponse;\n const metadata = Authority.getCloudDiscoveryMetadataFromNetworkResponse(parsedResponse.metadata, this.hostnameAndPort);\n if (metadata) {\n return metadata;\n }\n } catch (e) {\n throw ClientConfigurationError.createInvalidCloudDiscoveryMetadataError();\n }\n }\n\n // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities\n if (this.isInKnownAuthorities()) {\n return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\n }\n\n return null;\n }\n\n /**\n * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config\n * @param networkInterface \n */\n private async getCloudDiscoveryMetadataFromNetwork(): Promise<CloudDiscoveryMetadata | null> {\n const instanceDiscoveryEndpoint = `${Constants.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`;\n let match = null;\n try {\n const response = await this.networkInterface.sendGetRequestAsync<CloudInstanceDiscoveryResponse>(instanceDiscoveryEndpoint);\n const metadata = isCloudInstanceDiscoveryResponse(response.body) ? response.body.metadata : [];\n if (metadata.length === 0) {\n // If no metadata is returned, authority is untrusted\n return null;\n }\n match = Authority.getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort);\n } catch(e) {\n return null;\n }\n\n if (!match) {\n // Custom Domain scenario, host is trusted because Instance Discovery call succeeded \n match = Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\n }\n return match;\n } \n\n /**\n * Helper function to determine if this host is included in the knownAuthorities config option\n */\n private isInKnownAuthorities(): boolean {\n const matches = this.authorityOptions.knownAuthorities.filter((authority) => {\n return UrlString.getDomainFromUrl(authority).toLowerCase() === this.hostnameAndPort;\n });\n\n return matches.length > 0;\n }\n\n /**\n * Creates cloud discovery metadata object from a given host\n * @param host \n */\n static createCloudDiscoveryMetadataFromHost(host: string): CloudDiscoveryMetadata {\n return {\n preferred_network: host,\n preferred_cache: host,\n aliases: [host]\n };\n }\n\n /**\n * Searches instance discovery network response for the entry that contains the host in the aliases list\n * @param response \n * @param authority \n */\n static getCloudDiscoveryMetadataFromNetworkResponse(response: CloudDiscoveryMetadata[], authority: string): CloudDiscoveryMetadata | null {\n for (let i = 0; i < response.length; i++) {\n const metadata = response[i];\n if (metadata.aliases.indexOf(authority) > -1) {\n return metadata;\n }\n }\n\n return null;\n }\n\n /**\n * helper function to generate environment from authority object\n */\n getPreferredCache(): string {\n if(this.discoveryComplete()) {\n return this.metadata.preferred_cache;\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n }\n\n /**\n * Returns whether or not the provided host is an alias of this authority instance\n * @param host \n */\n isAlias(host: string): boolean {\n return this.metadata.aliases.indexOf(host) > -1;\n }\n\n /**\n * Checks whether the provided host is that of a public cloud authority\n * \n * @param authority string\n * @returns bool\n */\n static isPublicCloudAuthority(host: string): boolean {\n return Constants.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0;\n }\n\n /**\n * Rebuild the authority string with the region\n * \n * @param host string\n * @param region string \n */\n static buildRegionalAuthorityString(host: string, region: string, queryString?: string): string {\n // Create and validate a Url string object with the initial authority string\n const authorityUrlInstance = new UrlString(host);\n authorityUrlInstance.validateAsUri();\n\n const authorityUrlParts = authorityUrlInstance.getUrlComponents();\n\n let hostNameAndPort= `${region}.${authorityUrlParts.HostNameAndPort}`;\n\n if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) {\n hostNameAndPort = `${region}.${Constants.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`;\n }\n\n // Include the query string portion of the url\n const url = UrlString.constructAuthorityUriFromObject({\n ...authorityUrlInstance.getUrlComponents(),\n HostNameAndPort: hostNameAndPort\n }).urlString;\n\n // Add the query string if a query string was provided\n if (queryString) return `${url}?${queryString}`;\n\n return url;\n }\n\n /**\n * Replace the endpoints in the metadata object with their regional equivalents.\n * \n * @param metadata OpenIdConfigResponse\n * @param azureRegion string\n */\n static replaceWithRegionalInformation(metadata: OpenIdConfigResponse, azureRegion: string): OpenIdConfigResponse {\n metadata.authorization_endpoint = Authority.buildRegionalAuthorityString(metadata.authorization_endpoint, azureRegion);\n // TODO: Enquire on whether we should leave the query string or remove it before releasing the feature\n metadata.token_endpoint = Authority.buildRegionalAuthorityString(metadata.token_endpoint, azureRegion, \"allowestsrnonmsi=true\");\n\n if (metadata.end_session_endpoint) {\n metadata.end_session_endpoint = Authority.buildRegionalAuthorityString(metadata.end_session_endpoint, azureRegion);\n }\n \n return metadata;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/*! @azure/msal-common
|
|
1
|
+
/*! @azure/msal-common v5.1.0 2021-11-02 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { __awaiter, __generator } from '../_virtual/_tslib.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { Authority } from './Authority.js';
|
|
5
|
+
import { ClientConfigurationError } from '../error/ClientConfigurationError.js';
|
|
6
|
+
import { StringUtils } from '../utils/StringUtils.js';
|
|
7
|
+
import { ClientAuthError } from '../error/ClientAuthError.js';
|
|
8
8
|
|
|
9
9
|
/*
|
|
10
10
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
@@ -39,7 +39,7 @@ var AuthorityFactory = /** @class */ (function () {
|
|
|
39
39
|
return [2 /*return*/, acquireTokenAuthority];
|
|
40
40
|
case 3:
|
|
41
41
|
e_1 = _a.sent();
|
|
42
|
-
throw ClientAuthError
|
|
42
|
+
throw ClientAuthError.createEndpointDiscoveryIncompleteError(e_1);
|
|
43
43
|
case 4: return [2 /*return*/];
|
|
44
44
|
}
|
|
45
45
|
});
|
|
@@ -57,10 +57,10 @@ var AuthorityFactory = /** @class */ (function () {
|
|
|
57
57
|
*/
|
|
58
58
|
AuthorityFactory.createInstance = function (authorityUrl, networkInterface, cacheManager, authorityOptions) {
|
|
59
59
|
// Throw error if authority url is empty
|
|
60
|
-
if (StringUtils
|
|
61
|
-
throw ClientConfigurationError
|
|
60
|
+
if (StringUtils.isEmpty(authorityUrl)) {
|
|
61
|
+
throw ClientConfigurationError.createUrlEmptyError();
|
|
62
62
|
}
|
|
63
|
-
return new Authority
|
|
63
|
+
return new Authority(authorityUrl, networkInterface, cacheManager, authorityOptions);
|
|
64
64
|
};
|
|
65
65
|
return AuthorityFactory;
|
|
66
66
|
}());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorityFactory.js","sources":["../../src/authority/AuthorityFactory.ts"],"sourcesContent":["/*\
|
|
1
|
+
{"version":3,"file":"AuthorityFactory.js","sources":["../../src/authority/AuthorityFactory.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Authority } from \"./Authority\";\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\nimport { INetworkModule } from \"../network/INetworkModule\";\nimport { StringUtils } from \"../utils/StringUtils\";\nimport { ClientAuthError } from \"../error/ClientAuthError\";\nimport { ICacheManager } from \"../cache/interface/ICacheManager\";\nimport { AuthorityOptions } from \"./AuthorityOptions\";\n\nexport class AuthorityFactory {\n\n /**\n * Create an authority object of the correct type based on the url\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\n *\n * Also performs endpoint discovery.\n *\n * @param authorityUri\n * @param networkClient\n * @param protocolMode\n */\n static async createDiscoveredInstance(authorityUri: string, networkClient: INetworkModule, cacheManager: ICacheManager, authorityOptions: AuthorityOptions): Promise<Authority> {\n // Initialize authority and perform discovery endpoint check.\n const acquireTokenAuthority: Authority = AuthorityFactory.createInstance(authorityUri, networkClient, cacheManager, authorityOptions);\n\n try {\n await acquireTokenAuthority.resolveEndpointsAsync();\n return acquireTokenAuthority;\n } catch (e) {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(e);\n }\n }\n\n /**\n * Create an authority object of the correct type based on the url\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\n *\n * Does not perform endpoint discovery.\n *\n * @param authorityUrl\n * @param networkInterface\n * @param protocolMode\n */\n static createInstance(authorityUrl: string, networkInterface: INetworkModule, cacheManager: ICacheManager, authorityOptions: AuthorityOptions): Authority {\n // Throw error if authority url is empty\n if (StringUtils.isEmpty(authorityUrl)) {\n throw ClientConfigurationError.createUrlEmptyError();\n }\n\n return new Authority(authorityUrl, networkInterface, cacheManager, authorityOptions);\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAAA;;;;;IAaA;KA0CC;;;;;;;;;;;IA9BgB,yCAAwB,GAArC,UAAsC,YAAoB,EAAE,aAA6B,EAAE,YAA2B,EAAE,gBAAkC;;;;;;wBAEhJ,qBAAqB,GAAc,gBAAgB,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;;;;wBAGlI,qBAAM,qBAAqB,CAAC,qBAAqB,EAAE,EAAA;;wBAAnD,SAAmD,CAAC;wBACpD,sBAAO,qBAAqB,EAAC;;;wBAE7B,MAAM,eAAe,CAAC,sCAAsC,CAAC,GAAC,CAAC,CAAC;;;;;KAEvE;;;;;;;;;;;IAYM,+BAAc,GAArB,UAAsB,YAAoB,EAAE,gBAAgC,EAAE,YAA2B,EAAE,gBAAkC;;QAEzI,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACnC,MAAM,wBAAwB,CAAC,mBAAmB,EAAE,CAAC;SACxD;QAED,OAAO,IAAI,SAAS,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;KACxF;IACL,uBAAC;AAAD,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorityType.js","sources":["../../src/authority/AuthorityType.ts"],"sourcesContent":["/*\
|
|
1
|
+
{"version":3,"file":"AuthorityType.js","sources":["../../src/authority/AuthorityType.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Authority types supported by MSAL.\n */\nexport enum AuthorityType {\n Default,\n Adfs\n}\n"],"names":[],"mappings":";;AAAA;;;;AAKA;;;IAGY;AAAZ,WAAY,aAAa;IACrB,uDAAO,CAAA;IACP,iDAAI,CAAA;AACR,CAAC,EAHW,aAAa,KAAb,aAAa;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudInstanceDiscoveryResponse.js","sources":["../../src/authority/CloudInstanceDiscoveryResponse.ts"],"sourcesContent":["/*\
|
|
1
|
+
{"version":3,"file":"CloudInstanceDiscoveryResponse.js","sources":["../../src/authority/CloudInstanceDiscoveryResponse.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { CloudDiscoveryMetadata } from \"./CloudDiscoveryMetadata\";\n\n/**\n * The OpenID Configuration Endpoint Response type. Used by the authority class to get relevant OAuth endpoints.\n */\nexport type CloudInstanceDiscoveryResponse = {\n tenant_discovery_endpoint: string;\n metadata: Array<CloudDiscoveryMetadata>;\n};\n\nexport function isCloudInstanceDiscoveryResponse(response: object): boolean {\n return (\n response.hasOwnProperty(\"tenant_discovery_endpoint\") &&\n response.hasOwnProperty(\"metadata\")\n );\n}\n"],"names":[],"mappings":";;AAAA;;;;SAegB,gCAAgC,CAAC,QAAgB;IAC7D,QACI,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC;QACpD,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,EACrC;AACN;;;;"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
export declare type OpenIdConfigResponse = {
|
|
5
5
|
authorization_endpoint: string;
|
|
6
6
|
token_endpoint: string;
|
|
7
|
-
end_session_endpoint
|
|
7
|
+
end_session_endpoint?: string;
|
|
8
8
|
issuer: string;
|
|
9
9
|
};
|
|
10
10
|
export declare function isOpenIdConfigResponse(response: object): boolean;
|