@azure/msal-common 14.0.1 → 14.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/dist/account/AuthToken.d.ts +14 -17
  2. package/dist/account/AuthToken.d.ts.map +1 -1
  3. package/dist/account/AuthToken.mjs +48 -39
  4. package/dist/account/AuthToken.mjs.map +1 -1
  5. package/dist/account/CcsCredential.mjs +1 -1
  6. package/dist/account/CcsCredential.mjs.map +1 -1
  7. package/dist/account/ClientInfo.d.ts.map +1 -1
  8. package/dist/account/ClientInfo.mjs +3 -4
  9. package/dist/account/ClientInfo.mjs.map +1 -1
  10. package/dist/authority/Authority.d.ts +1 -0
  11. package/dist/authority/Authority.d.ts.map +1 -1
  12. package/dist/authority/Authority.mjs +4 -2
  13. package/dist/authority/Authority.mjs.map +1 -1
  14. package/dist/authority/AuthorityFactory.d.ts +1 -0
  15. package/dist/authority/AuthorityFactory.d.ts.map +1 -1
  16. package/dist/authority/AuthorityFactory.mjs +3 -3
  17. package/dist/authority/AuthorityFactory.mjs.map +1 -1
  18. package/dist/authority/AuthorityMetadata.mjs +1 -1
  19. package/dist/authority/AuthorityMetadata.mjs.map +1 -1
  20. package/dist/authority/AuthorityOptions.mjs +1 -1
  21. package/dist/authority/AuthorityOptions.mjs.map +1 -1
  22. package/dist/authority/AuthorityType.mjs +1 -1
  23. package/dist/authority/AuthorityType.mjs.map +1 -1
  24. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +1 -1
  25. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs.map +1 -1
  26. package/dist/authority/CloudInstanceDiscoveryResponse.mjs +1 -1
  27. package/dist/authority/CloudInstanceDiscoveryResponse.mjs.map +1 -1
  28. package/dist/authority/OpenIdConfigResponse.mjs +1 -1
  29. package/dist/authority/OpenIdConfigResponse.mjs.map +1 -1
  30. package/dist/authority/ProtocolMode.mjs +1 -1
  31. package/dist/authority/ProtocolMode.mjs.map +1 -1
  32. package/dist/authority/RegionDiscovery.mjs +1 -1
  33. package/dist/authority/RegionDiscovery.mjs.map +1 -1
  34. package/dist/cache/CacheManager.d.ts +2 -0
  35. package/dist/cache/CacheManager.d.ts.map +1 -1
  36. package/dist/cache/CacheManager.mjs +7 -5
  37. package/dist/cache/CacheManager.mjs.map +1 -1
  38. package/dist/cache/entities/AccessTokenEntity.d.ts.map +1 -1
  39. package/dist/cache/entities/AccessTokenEntity.mjs +4 -7
  40. package/dist/cache/entities/AccessTokenEntity.mjs.map +1 -1
  41. package/dist/cache/entities/AccountEntity.d.ts +1 -0
  42. package/dist/cache/entities/AccountEntity.d.ts.map +1 -1
  43. package/dist/cache/entities/AccountEntity.mjs +3 -4
  44. package/dist/cache/entities/AccountEntity.mjs.map +1 -1
  45. package/dist/cache/entities/AppMetadataEntity.mjs +1 -1
  46. package/dist/cache/entities/AppMetadataEntity.mjs.map +1 -1
  47. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +1 -0
  48. package/dist/cache/entities/AuthorityMetadataEntity.d.ts.map +1 -1
  49. package/dist/cache/entities/AuthorityMetadataEntity.mjs +2 -1
  50. package/dist/cache/entities/AuthorityMetadataEntity.mjs.map +1 -1
  51. package/dist/cache/entities/CacheRecord.d.ts +1 -0
  52. package/dist/cache/entities/CacheRecord.d.ts.map +1 -1
  53. package/dist/cache/entities/CacheRecord.mjs +2 -1
  54. package/dist/cache/entities/CacheRecord.mjs.map +1 -1
  55. package/dist/cache/entities/CredentialEntity.mjs +1 -1
  56. package/dist/cache/entities/CredentialEntity.mjs.map +1 -1
  57. package/dist/cache/entities/IdTokenEntity.mjs +1 -1
  58. package/dist/cache/entities/IdTokenEntity.mjs.map +1 -1
  59. package/dist/cache/entities/RefreshTokenEntity.mjs +1 -1
  60. package/dist/cache/entities/RefreshTokenEntity.mjs.map +1 -1
  61. package/dist/cache/entities/ServerTelemetryEntity.mjs +1 -1
  62. package/dist/cache/entities/ServerTelemetryEntity.mjs.map +1 -1
  63. package/dist/cache/entities/ThrottlingEntity.mjs +1 -1
  64. package/dist/cache/entities/ThrottlingEntity.mjs.map +1 -1
  65. package/dist/cache/persistence/TokenCacheContext.mjs +1 -1
  66. package/dist/cache/persistence/TokenCacheContext.mjs.map +1 -1
  67. package/dist/cache/utils/CacheTypes.d.ts +7 -0
  68. package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
  69. package/dist/client/AuthorizationCodeClient.d.ts +1 -0
  70. package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
  71. package/dist/client/AuthorizationCodeClient.mjs +11 -39
  72. package/dist/client/AuthorizationCodeClient.mjs.map +1 -1
  73. package/dist/client/BaseClient.d.ts +2 -1
  74. package/dist/client/BaseClient.d.ts.map +1 -1
  75. package/dist/client/BaseClient.mjs +9 -2
  76. package/dist/client/BaseClient.mjs.map +1 -1
  77. package/dist/client/RefreshTokenClient.d.ts +1 -0
  78. package/dist/client/RefreshTokenClient.d.ts.map +1 -1
  79. package/dist/client/RefreshTokenClient.mjs +3 -11
  80. package/dist/client/RefreshTokenClient.mjs.map +1 -1
  81. package/dist/client/SilentFlowClient.d.ts +1 -0
  82. package/dist/client/SilentFlowClient.d.ts.map +1 -1
  83. package/dist/client/SilentFlowClient.mjs +8 -7
  84. package/dist/client/SilentFlowClient.mjs.map +1 -1
  85. package/dist/config/ClientConfiguration.d.ts +2 -0
  86. package/dist/config/ClientConfiguration.d.ts.map +1 -1
  87. package/dist/config/ClientConfiguration.mjs +1 -1
  88. package/dist/config/ClientConfiguration.mjs.map +1 -1
  89. package/dist/crypto/ICrypto.mjs +1 -1
  90. package/dist/crypto/ICrypto.mjs.map +1 -1
  91. package/dist/crypto/JoseHeader.d.ts +1 -0
  92. package/dist/crypto/JoseHeader.d.ts.map +1 -1
  93. package/dist/crypto/JoseHeader.mjs +2 -1
  94. package/dist/crypto/JoseHeader.mjs.map +1 -1
  95. package/dist/crypto/PopTokenGenerator.d.ts +1 -0
  96. package/dist/crypto/PopTokenGenerator.d.ts.map +1 -1
  97. package/dist/crypto/PopTokenGenerator.mjs +2 -1
  98. package/dist/crypto/PopTokenGenerator.mjs.map +1 -1
  99. package/dist/error/AuthError.mjs +1 -1
  100. package/dist/error/AuthError.mjs.map +1 -1
  101. package/dist/error/ClientAuthError.mjs +1 -1
  102. package/dist/error/ClientAuthError.mjs.map +1 -1
  103. package/dist/error/ClientConfigurationError.mjs +1 -1
  104. package/dist/error/ClientConfigurationError.mjs.map +1 -1
  105. package/dist/error/InteractionRequiredAuthError.mjs +1 -1
  106. package/dist/error/InteractionRequiredAuthError.mjs.map +1 -1
  107. package/dist/error/JoseHeaderError.mjs +1 -1
  108. package/dist/error/JoseHeaderError.mjs.map +1 -1
  109. package/dist/error/ServerError.mjs +1 -1
  110. package/dist/error/ServerError.mjs.map +1 -1
  111. package/dist/index.cjs +1926 -1826
  112. package/dist/index.cjs.map +1 -1
  113. package/dist/index.d.ts +4 -3
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.mjs +5 -3
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/logger/Logger.d.ts.map +1 -1
  118. package/dist/logger/Logger.mjs +2 -12
  119. package/dist/logger/Logger.mjs.map +1 -1
  120. package/dist/network/INetworkModule.mjs +1 -1
  121. package/dist/network/INetworkModule.mjs.map +1 -1
  122. package/dist/network/NetworkManager.d.ts +1 -0
  123. package/dist/network/NetworkManager.d.ts.map +1 -1
  124. package/dist/network/NetworkManager.mjs +2 -1
  125. package/dist/network/NetworkManager.mjs.map +1 -1
  126. package/dist/network/ThrottlingUtils.d.ts +1 -0
  127. package/dist/network/ThrottlingUtils.d.ts.map +1 -1
  128. package/dist/network/ThrottlingUtils.mjs +2 -1
  129. package/dist/network/ThrottlingUtils.mjs.map +1 -1
  130. package/dist/packageMetadata.d.ts +1 -1
  131. package/dist/packageMetadata.mjs +2 -2
  132. package/dist/packageMetadata.mjs.map +1 -1
  133. package/dist/request/AuthenticationHeaderParser.mjs +1 -1
  134. package/dist/request/AuthenticationHeaderParser.mjs.map +1 -1
  135. package/dist/request/RequestParameterBuilder.d.ts +1 -0
  136. package/dist/request/RequestParameterBuilder.d.ts.map +1 -1
  137. package/dist/request/RequestParameterBuilder.mjs +7 -7
  138. package/dist/request/RequestParameterBuilder.mjs.map +1 -1
  139. package/dist/request/RequestValidator.d.ts.map +1 -1
  140. package/dist/request/RequestValidator.mjs +4 -6
  141. package/dist/request/RequestValidator.mjs.map +1 -1
  142. package/dist/request/ScopeSet.mjs +4 -4
  143. package/dist/request/ScopeSet.mjs.map +1 -1
  144. package/dist/response/AuthenticationResult.d.ts +3 -1
  145. package/dist/response/AuthenticationResult.d.ts.map +1 -1
  146. package/dist/response/ResponseHandler.d.ts +5 -3
  147. package/dist/response/ResponseHandler.d.ts.map +1 -1
  148. package/dist/response/ResponseHandler.mjs +58 -39
  149. package/dist/response/ResponseHandler.mjs.map +1 -1
  150. package/dist/response/ServerAuthorizationTokenResponse.d.ts +2 -0
  151. package/dist/response/ServerAuthorizationTokenResponse.d.ts.map +1 -1
  152. package/dist/telemetry/performance/IPerformanceClient.d.ts +4 -4
  153. package/dist/telemetry/performance/IPerformanceClient.d.ts.map +1 -1
  154. package/dist/telemetry/performance/PerformanceClient.d.ts +2 -2
  155. package/dist/telemetry/performance/PerformanceClient.d.ts.map +1 -1
  156. package/dist/telemetry/performance/PerformanceClient.mjs +1 -1
  157. package/dist/telemetry/performance/PerformanceClient.mjs.map +1 -1
  158. package/dist/telemetry/performance/PerformanceEvent.d.ts +8 -1
  159. package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
  160. package/dist/telemetry/performance/PerformanceEvent.mjs +9 -1
  161. package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
  162. package/dist/telemetry/performance/StubPerformanceClient.d.ts +3 -3
  163. package/dist/telemetry/performance/StubPerformanceClient.d.ts.map +1 -1
  164. package/dist/telemetry/performance/StubPerformanceClient.mjs +23 -3
  165. package/dist/telemetry/performance/StubPerformanceClient.mjs.map +1 -1
  166. package/dist/telemetry/server/ServerTelemetryManager.d.ts +1 -0
  167. package/dist/telemetry/server/ServerTelemetryManager.d.ts.map +1 -1
  168. package/dist/telemetry/server/ServerTelemetryManager.mjs +4 -4
  169. package/dist/telemetry/server/ServerTelemetryManager.mjs.map +1 -1
  170. package/dist/url/UrlString.d.ts.map +1 -1
  171. package/dist/url/UrlString.mjs +10 -12
  172. package/dist/url/UrlString.mjs.map +1 -1
  173. package/dist/utils/Constants.d.ts +10 -0
  174. package/dist/utils/Constants.d.ts.map +1 -1
  175. package/dist/utils/Constants.mjs +11 -2
  176. package/dist/utils/Constants.mjs.map +1 -1
  177. package/dist/utils/FunctionWrappers.d.ts +28 -0
  178. package/dist/utils/FunctionWrappers.d.ts.map +1 -0
  179. package/dist/utils/FunctionWrappers.mjs +90 -0
  180. package/dist/utils/FunctionWrappers.mjs.map +1 -0
  181. package/dist/utils/ProtocolUtils.d.ts.map +1 -1
  182. package/dist/utils/ProtocolUtils.mjs +4 -7
  183. package/dist/utils/ProtocolUtils.mjs.map +1 -1
  184. package/dist/utils/StringUtils.d.ts +0 -13
  185. package/dist/utils/StringUtils.d.ts.map +1 -1
  186. package/dist/utils/StringUtils.mjs +3 -34
  187. package/dist/utils/StringUtils.mjs.map +1 -1
  188. package/dist/utils/TimeUtils.mjs +1 -1
  189. package/dist/utils/TimeUtils.mjs.map +1 -1
  190. package/package.json +6 -4
  191. package/src/account/AccountInfo.ts +44 -0
  192. package/src/account/AuthToken.ts +70 -0
  193. package/src/account/CcsCredential.ts +16 -0
  194. package/src/account/ClientCredentials.ts +20 -0
  195. package/src/account/ClientInfo.ts +64 -0
  196. package/src/account/TokenClaims.ts +70 -0
  197. package/src/authority/Authority.ts +1225 -0
  198. package/src/authority/AuthorityFactory.ts +106 -0
  199. package/src/authority/AuthorityMetadata.ts +953 -0
  200. package/src/authority/AuthorityOptions.ts +40 -0
  201. package/src/authority/AuthorityType.ts +15 -0
  202. package/src/authority/AzureRegion.ts +7 -0
  203. package/src/authority/AzureRegionConfiguration.ts +16 -0
  204. package/src/authority/CloudDiscoveryMetadata.ts +10 -0
  205. package/src/authority/CloudInstanceDiscoveryErrorResponse.ts +26 -0
  206. package/src/authority/CloudInstanceDiscoveryResponse.ts +21 -0
  207. package/src/authority/ImdsOptions.ts +10 -0
  208. package/src/authority/OIDCOptions.ts +14 -0
  209. package/src/authority/OpenIdConfigResponse.ts +24 -0
  210. package/src/authority/ProtocolMode.ts +13 -0
  211. package/src/authority/RegionDiscovery.ts +193 -0
  212. package/src/authority/RegionDiscoveryMetadata.ts +15 -0
  213. package/src/broker/nativeBroker/INativeBrokerPlugin.ts +29 -0
  214. package/src/cache/CacheManager.ts +1619 -0
  215. package/src/cache/entities/AccessTokenEntity.ts +162 -0
  216. package/src/cache/entities/AccountEntity.ts +309 -0
  217. package/src/cache/entities/AppMetadataEntity.ts +91 -0
  218. package/src/cache/entities/AuthorityMetadataEntity.ts +112 -0
  219. package/src/cache/entities/CacheRecord.ts +33 -0
  220. package/src/cache/entities/CredentialEntity.ts +215 -0
  221. package/src/cache/entities/IdTokenEntity.ts +74 -0
  222. package/src/cache/entities/RefreshTokenEntity.ts +78 -0
  223. package/src/cache/entities/ServerTelemetryEntity.ts +38 -0
  224. package/src/cache/entities/ThrottlingEntity.ts +36 -0
  225. package/src/cache/interface/ICacheManager.ts +218 -0
  226. package/src/cache/interface/ICachePlugin.ts +11 -0
  227. package/src/cache/interface/ISerializableTokenCache.ts +9 -0
  228. package/src/cache/persistence/TokenCacheContext.ts +39 -0
  229. package/src/cache/utils/CacheTypes.ts +93 -0
  230. package/src/client/AuthorizationCodeClient.ts +714 -0
  231. package/src/client/BaseClient.ts +205 -0
  232. package/src/client/RefreshTokenClient.ts +442 -0
  233. package/src/client/SilentFlowClient.ts +186 -0
  234. package/src/config/AppTokenProvider.ts +47 -0
  235. package/src/config/ClientConfiguration.ts +287 -0
  236. package/src/crypto/ICrypto.ts +127 -0
  237. package/src/crypto/IGuidGenerator.ts +9 -0
  238. package/src/crypto/JoseHeader.ts +55 -0
  239. package/src/crypto/PopTokenGenerator.ts +155 -0
  240. package/src/crypto/SignedHttpRequest.ts +16 -0
  241. package/src/error/AuthError.ts +85 -0
  242. package/src/error/ClientAuthError.ts +738 -0
  243. package/src/error/ClientConfigurationError.ts +396 -0
  244. package/src/error/InteractionRequiredAuthError.ts +134 -0
  245. package/src/error/JoseHeaderError.ts +52 -0
  246. package/src/error/ServerError.ts +18 -0
  247. package/src/index.ts +215 -0
  248. package/src/logger/Logger.ts +272 -0
  249. package/src/network/INetworkModule.ts +57 -0
  250. package/src/network/NetworkManager.ts +76 -0
  251. package/src/network/RequestThumbprint.ts +22 -0
  252. package/src/network/ThrottlingUtils.ts +156 -0
  253. package/src/packageMetadata.ts +3 -0
  254. package/src/request/AuthenticationHeaderParser.ts +89 -0
  255. package/src/request/BaseAuthRequest.ts +46 -0
  256. package/src/request/CommonAuthorizationCodeRequest.ts +33 -0
  257. package/src/request/CommonAuthorizationUrlRequest.ts +56 -0
  258. package/src/request/CommonClientCredentialRequest.ts +23 -0
  259. package/src/request/CommonDeviceCodeRequest.ts +31 -0
  260. package/src/request/CommonEndSessionRequest.ts +27 -0
  261. package/src/request/CommonOnBehalfOfRequest.ts +19 -0
  262. package/src/request/CommonRefreshTokenRequest.ts +25 -0
  263. package/src/request/CommonSilentFlowRequest.ts +24 -0
  264. package/src/request/CommonUsernamePasswordRequest.ts +23 -0
  265. package/src/request/NativeRequest.ts +25 -0
  266. package/src/request/NativeSignOutRequest.ts +10 -0
  267. package/src/request/RequestParameterBuilder.ts +606 -0
  268. package/src/request/RequestValidator.ts +103 -0
  269. package/src/request/ScopeSet.ts +230 -0
  270. package/src/request/StoreInCache.ts +16 -0
  271. package/src/response/AuthenticationResult.ts +47 -0
  272. package/src/response/AuthorizationCodePayload.ts +18 -0
  273. package/src/response/DeviceCodeResponse.ts +31 -0
  274. package/src/response/ExternalTokenResponse.ts +24 -0
  275. package/src/response/IMDSBadResponse.ts +9 -0
  276. package/src/response/ResponseHandler.ts +614 -0
  277. package/src/response/ServerAuthorizationCodeResponse.ts +33 -0
  278. package/src/response/ServerAuthorizationTokenResponse.ts +54 -0
  279. package/src/telemetry/performance/IPerformanceClient.ts +71 -0
  280. package/src/telemetry/performance/IPerformanceMeasurement.ts +10 -0
  281. package/src/telemetry/performance/PerformanceClient.ts +635 -0
  282. package/src/telemetry/performance/PerformanceEvent.ts +542 -0
  283. package/src/telemetry/performance/StubPerformanceClient.ts +101 -0
  284. package/src/telemetry/server/ServerTelemetryManager.ts +274 -0
  285. package/src/telemetry/server/ServerTelemetryRequest.ts +13 -0
  286. package/src/url/IUri.ts +17 -0
  287. package/src/url/UrlString.ts +363 -0
  288. package/src/utils/Constants.ts +436 -0
  289. package/src/utils/FunctionWrappers.ts +105 -0
  290. package/src/utils/MsalTypes.ts +9 -0
  291. package/src/utils/ProtocolUtils.ts +124 -0
  292. package/src/utils/StringUtils.ts +106 -0
  293. package/src/utils/TimeUtils.ts +51 -0
  294. package/dist/account/DecodedAuthToken.d.ts +0 -9
  295. package/dist/account/DecodedAuthToken.d.ts.map +0 -1
@@ -0,0 +1,606 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import {
7
+ AADServerParamKeys,
8
+ Constants,
9
+ ResponseMode,
10
+ SSOTypes,
11
+ CLIENT_INFO,
12
+ AuthenticationScheme,
13
+ ClaimsRequestKeys,
14
+ PasswordGrantConstants,
15
+ OIDC_DEFAULT_SCOPES,
16
+ ThrottlingConstants,
17
+ HeaderNames,
18
+ } from "../utils/Constants";
19
+ import { ScopeSet } from "./ScopeSet";
20
+ import { ClientConfigurationError } from "../error/ClientConfigurationError";
21
+ import { StringDict } from "../utils/MsalTypes";
22
+ import { RequestValidator } from "./RequestValidator";
23
+ import {
24
+ ApplicationTelemetry,
25
+ LibraryInfo,
26
+ } from "../config/ClientConfiguration";
27
+ import { ServerTelemetryManager } from "../telemetry/server/ServerTelemetryManager";
28
+ import { ClientInfo } from "../account/ClientInfo";
29
+
30
+ /** @internal */
31
+ export class RequestParameterBuilder {
32
+ private parameters: Map<string, string>;
33
+
34
+ constructor() {
35
+ this.parameters = new Map<string, string>();
36
+ }
37
+
38
+ /**
39
+ * add response_type = code
40
+ */
41
+ addResponseTypeCode(): void {
42
+ this.parameters.set(
43
+ AADServerParamKeys.RESPONSE_TYPE,
44
+ encodeURIComponent(Constants.CODE_RESPONSE_TYPE)
45
+ );
46
+ }
47
+
48
+ /**
49
+ * add response_type = token id_token
50
+ */
51
+ addResponseTypeForTokenAndIdToken(): void {
52
+ this.parameters.set(
53
+ AADServerParamKeys.RESPONSE_TYPE,
54
+ encodeURIComponent(
55
+ `${Constants.TOKEN_RESPONSE_TYPE} ${Constants.ID_TOKEN_RESPONSE_TYPE}`
56
+ )
57
+ );
58
+ }
59
+
60
+ /**
61
+ * add response_mode. defaults to query.
62
+ * @param responseMode
63
+ */
64
+ addResponseMode(responseMode?: ResponseMode): void {
65
+ this.parameters.set(
66
+ AADServerParamKeys.RESPONSE_MODE,
67
+ encodeURIComponent(responseMode ? responseMode : ResponseMode.QUERY)
68
+ );
69
+ }
70
+
71
+ /**
72
+ * Add flag to indicate STS should attempt to use WAM if available
73
+ */
74
+ addNativeBroker(): void {
75
+ this.parameters.set(
76
+ AADServerParamKeys.NATIVE_BROKER,
77
+ encodeURIComponent("1")
78
+ );
79
+ }
80
+
81
+ /**
82
+ * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios
83
+ * @param scopeSet
84
+ * @param addOidcScopes
85
+ */
86
+ addScopes(
87
+ scopes: string[],
88
+ addOidcScopes: boolean = true,
89
+ defaultScopes: Array<string> = OIDC_DEFAULT_SCOPES
90
+ ): void {
91
+ // Always add openid to the scopes when adding OIDC scopes
92
+ if (
93
+ addOidcScopes &&
94
+ !defaultScopes.includes("openid") &&
95
+ !scopes.includes("openid")
96
+ ) {
97
+ defaultScopes.push("openid");
98
+ }
99
+ const requestScopes = addOidcScopes
100
+ ? [...(scopes || []), ...defaultScopes]
101
+ : scopes || [];
102
+ const scopeSet = new ScopeSet(requestScopes);
103
+ this.parameters.set(
104
+ AADServerParamKeys.SCOPE,
105
+ encodeURIComponent(scopeSet.printScopes())
106
+ );
107
+ }
108
+
109
+ /**
110
+ * add clientId
111
+ * @param clientId
112
+ */
113
+ addClientId(clientId: string): void {
114
+ this.parameters.set(
115
+ AADServerParamKeys.CLIENT_ID,
116
+ encodeURIComponent(clientId)
117
+ );
118
+ }
119
+
120
+ /**
121
+ * add redirect_uri
122
+ * @param redirectUri
123
+ */
124
+ addRedirectUri(redirectUri: string): void {
125
+ RequestValidator.validateRedirectUri(redirectUri);
126
+ this.parameters.set(
127
+ AADServerParamKeys.REDIRECT_URI,
128
+ encodeURIComponent(redirectUri)
129
+ );
130
+ }
131
+
132
+ /**
133
+ * add post logout redirectUri
134
+ * @param redirectUri
135
+ */
136
+ addPostLogoutRedirectUri(redirectUri: string): void {
137
+ RequestValidator.validateRedirectUri(redirectUri);
138
+ this.parameters.set(
139
+ AADServerParamKeys.POST_LOGOUT_URI,
140
+ encodeURIComponent(redirectUri)
141
+ );
142
+ }
143
+
144
+ /**
145
+ * add id_token_hint to logout request
146
+ * @param idTokenHint
147
+ */
148
+ addIdTokenHint(idTokenHint: string): void {
149
+ this.parameters.set(
150
+ AADServerParamKeys.ID_TOKEN_HINT,
151
+ encodeURIComponent(idTokenHint)
152
+ );
153
+ }
154
+
155
+ /**
156
+ * add domain_hint
157
+ * @param domainHint
158
+ */
159
+ addDomainHint(domainHint: string): void {
160
+ this.parameters.set(
161
+ SSOTypes.DOMAIN_HINT,
162
+ encodeURIComponent(domainHint)
163
+ );
164
+ }
165
+
166
+ /**
167
+ * add login_hint
168
+ * @param loginHint
169
+ */
170
+ addLoginHint(loginHint: string): void {
171
+ this.parameters.set(SSOTypes.LOGIN_HINT, encodeURIComponent(loginHint));
172
+ }
173
+
174
+ /**
175
+ * Adds the CCS (Cache Credential Service) query parameter for login_hint
176
+ * @param loginHint
177
+ */
178
+ addCcsUpn(loginHint: string): void {
179
+ this.parameters.set(
180
+ HeaderNames.CCS_HEADER,
181
+ encodeURIComponent(`UPN:${loginHint}`)
182
+ );
183
+ }
184
+
185
+ /**
186
+ * Adds the CCS (Cache Credential Service) query parameter for account object
187
+ * @param loginHint
188
+ */
189
+ addCcsOid(clientInfo: ClientInfo): void {
190
+ this.parameters.set(
191
+ HeaderNames.CCS_HEADER,
192
+ encodeURIComponent(`Oid:${clientInfo.uid}@${clientInfo.utid}`)
193
+ );
194
+ }
195
+
196
+ /**
197
+ * add sid
198
+ * @param sid
199
+ */
200
+ addSid(sid: string): void {
201
+ this.parameters.set(SSOTypes.SID, encodeURIComponent(sid));
202
+ }
203
+
204
+ /**
205
+ * add claims
206
+ * @param claims
207
+ */
208
+ addClaims(claims?: string, clientCapabilities?: Array<string>): void {
209
+ const mergedClaims = this.addClientCapabilitiesToClaims(
210
+ claims,
211
+ clientCapabilities
212
+ );
213
+ RequestValidator.validateClaims(mergedClaims);
214
+ this.parameters.set(
215
+ AADServerParamKeys.CLAIMS,
216
+ encodeURIComponent(mergedClaims)
217
+ );
218
+ }
219
+
220
+ /**
221
+ * add correlationId
222
+ * @param correlationId
223
+ */
224
+ addCorrelationId(correlationId: string): void {
225
+ this.parameters.set(
226
+ AADServerParamKeys.CLIENT_REQUEST_ID,
227
+ encodeURIComponent(correlationId)
228
+ );
229
+ }
230
+
231
+ /**
232
+ * add library info query params
233
+ * @param libraryInfo
234
+ */
235
+ addLibraryInfo(libraryInfo: LibraryInfo): void {
236
+ // Telemetry Info
237
+ this.parameters.set(AADServerParamKeys.X_CLIENT_SKU, libraryInfo.sku);
238
+ this.parameters.set(
239
+ AADServerParamKeys.X_CLIENT_VER,
240
+ libraryInfo.version
241
+ );
242
+ if (libraryInfo.os) {
243
+ this.parameters.set(AADServerParamKeys.X_CLIENT_OS, libraryInfo.os);
244
+ }
245
+ if (libraryInfo.cpu) {
246
+ this.parameters.set(
247
+ AADServerParamKeys.X_CLIENT_CPU,
248
+ libraryInfo.cpu
249
+ );
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Add client telemetry parameters
255
+ * @param appTelemetry
256
+ */
257
+ addApplicationTelemetry(appTelemetry: ApplicationTelemetry): void {
258
+ if (appTelemetry?.appName) {
259
+ this.parameters.set(
260
+ AADServerParamKeys.X_APP_NAME,
261
+ appTelemetry.appName
262
+ );
263
+ }
264
+
265
+ if (appTelemetry?.appVersion) {
266
+ this.parameters.set(
267
+ AADServerParamKeys.X_APP_VER,
268
+ appTelemetry.appVersion
269
+ );
270
+ }
271
+ }
272
+
273
+ /**
274
+ * add prompt
275
+ * @param prompt
276
+ */
277
+ addPrompt(prompt: string): void {
278
+ RequestValidator.validatePrompt(prompt);
279
+ this.parameters.set(
280
+ `${AADServerParamKeys.PROMPT}`,
281
+ encodeURIComponent(prompt)
282
+ );
283
+ }
284
+
285
+ /**
286
+ * add state
287
+ * @param state
288
+ */
289
+ addState(state: string): void {
290
+ if (state) {
291
+ this.parameters.set(
292
+ AADServerParamKeys.STATE,
293
+ encodeURIComponent(state)
294
+ );
295
+ }
296
+ }
297
+
298
+ /**
299
+ * add nonce
300
+ * @param nonce
301
+ */
302
+ addNonce(nonce: string): void {
303
+ this.parameters.set(
304
+ AADServerParamKeys.NONCE,
305
+ encodeURIComponent(nonce)
306
+ );
307
+ }
308
+
309
+ /**
310
+ * add code_challenge and code_challenge_method
311
+ * - throw if either of them are not passed
312
+ * @param codeChallenge
313
+ * @param codeChallengeMethod
314
+ */
315
+ addCodeChallengeParams(
316
+ codeChallenge: string,
317
+ codeChallengeMethod: string
318
+ ): void {
319
+ RequestValidator.validateCodeChallengeParams(
320
+ codeChallenge,
321
+ codeChallengeMethod
322
+ );
323
+ if (codeChallenge && codeChallengeMethod) {
324
+ this.parameters.set(
325
+ AADServerParamKeys.CODE_CHALLENGE,
326
+ encodeURIComponent(codeChallenge)
327
+ );
328
+ this.parameters.set(
329
+ AADServerParamKeys.CODE_CHALLENGE_METHOD,
330
+ encodeURIComponent(codeChallengeMethod)
331
+ );
332
+ } else {
333
+ throw ClientConfigurationError.createInvalidCodeChallengeParamsError();
334
+ }
335
+ }
336
+
337
+ /**
338
+ * add the `authorization_code` passed by the user to exchange for a token
339
+ * @param code
340
+ */
341
+ addAuthorizationCode(code: string): void {
342
+ this.parameters.set(AADServerParamKeys.CODE, encodeURIComponent(code));
343
+ }
344
+
345
+ /**
346
+ * add the `authorization_code` passed by the user to exchange for a token
347
+ * @param code
348
+ */
349
+ addDeviceCode(code: string): void {
350
+ this.parameters.set(
351
+ AADServerParamKeys.DEVICE_CODE,
352
+ encodeURIComponent(code)
353
+ );
354
+ }
355
+
356
+ /**
357
+ * add the `refreshToken` passed by the user
358
+ * @param refreshToken
359
+ */
360
+ addRefreshToken(refreshToken: string): void {
361
+ this.parameters.set(
362
+ AADServerParamKeys.REFRESH_TOKEN,
363
+ encodeURIComponent(refreshToken)
364
+ );
365
+ }
366
+
367
+ /**
368
+ * add the `code_verifier` passed by the user to exchange for a token
369
+ * @param codeVerifier
370
+ */
371
+ addCodeVerifier(codeVerifier: string): void {
372
+ this.parameters.set(
373
+ AADServerParamKeys.CODE_VERIFIER,
374
+ encodeURIComponent(codeVerifier)
375
+ );
376
+ }
377
+
378
+ /**
379
+ * add client_secret
380
+ * @param clientSecret
381
+ */
382
+ addClientSecret(clientSecret: string): void {
383
+ this.parameters.set(
384
+ AADServerParamKeys.CLIENT_SECRET,
385
+ encodeURIComponent(clientSecret)
386
+ );
387
+ }
388
+
389
+ /**
390
+ * add clientAssertion for confidential client flows
391
+ * @param clientAssertion
392
+ */
393
+ addClientAssertion(clientAssertion: string): void {
394
+ if (clientAssertion) {
395
+ this.parameters.set(
396
+ AADServerParamKeys.CLIENT_ASSERTION,
397
+ encodeURIComponent(clientAssertion)
398
+ );
399
+ }
400
+ }
401
+
402
+ /**
403
+ * add clientAssertionType for confidential client flows
404
+ * @param clientAssertionType
405
+ */
406
+ addClientAssertionType(clientAssertionType: string): void {
407
+ if (clientAssertionType) {
408
+ this.parameters.set(
409
+ AADServerParamKeys.CLIENT_ASSERTION_TYPE,
410
+ encodeURIComponent(clientAssertionType)
411
+ );
412
+ }
413
+ }
414
+
415
+ /**
416
+ * add OBO assertion for confidential client flows
417
+ * @param clientAssertion
418
+ */
419
+ addOboAssertion(oboAssertion: string): void {
420
+ this.parameters.set(
421
+ AADServerParamKeys.OBO_ASSERTION,
422
+ encodeURIComponent(oboAssertion)
423
+ );
424
+ }
425
+
426
+ /**
427
+ * add grant type
428
+ * @param grantType
429
+ */
430
+ addRequestTokenUse(tokenUse: string): void {
431
+ this.parameters.set(
432
+ AADServerParamKeys.REQUESTED_TOKEN_USE,
433
+ encodeURIComponent(tokenUse)
434
+ );
435
+ }
436
+
437
+ /**
438
+ * add grant type
439
+ * @param grantType
440
+ */
441
+ addGrantType(grantType: string): void {
442
+ this.parameters.set(
443
+ AADServerParamKeys.GRANT_TYPE,
444
+ encodeURIComponent(grantType)
445
+ );
446
+ }
447
+
448
+ /**
449
+ * add client info
450
+ *
451
+ */
452
+ addClientInfo(): void {
453
+ this.parameters.set(CLIENT_INFO, "1");
454
+ }
455
+
456
+ /**
457
+ * add extraQueryParams
458
+ * @param eQParams
459
+ */
460
+ addExtraQueryParameters(eQParams: StringDict): void {
461
+ const sanitizedEQParams = RequestValidator.sanitizeEQParams(
462
+ eQParams,
463
+ this.parameters
464
+ );
465
+ Object.keys(sanitizedEQParams).forEach((key) => {
466
+ this.parameters.set(key, eQParams[key]);
467
+ });
468
+ }
469
+
470
+ addClientCapabilitiesToClaims(
471
+ claims?: string,
472
+ clientCapabilities?: Array<string>
473
+ ): string {
474
+ let mergedClaims: object;
475
+
476
+ // Parse provided claims into JSON object or initialize empty object
477
+ if (!claims) {
478
+ mergedClaims = {};
479
+ } else {
480
+ try {
481
+ mergedClaims = JSON.parse(claims);
482
+ } catch (e) {
483
+ throw ClientConfigurationError.createInvalidClaimsRequestError();
484
+ }
485
+ }
486
+
487
+ if (clientCapabilities && clientCapabilities.length > 0) {
488
+ if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) {
489
+ // Add access_token key to claims object
490
+ mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {};
491
+ }
492
+
493
+ // Add xms_cc claim with provided clientCapabilities to access_token key
494
+ mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][
495
+ ClaimsRequestKeys.XMS_CC
496
+ ] = {
497
+ values: clientCapabilities,
498
+ };
499
+ }
500
+
501
+ return JSON.stringify(mergedClaims);
502
+ }
503
+
504
+ /**
505
+ * adds `username` for Password Grant flow
506
+ * @param username
507
+ */
508
+ addUsername(username: string): void {
509
+ this.parameters.set(
510
+ PasswordGrantConstants.username,
511
+ encodeURIComponent(username)
512
+ );
513
+ }
514
+
515
+ /**
516
+ * adds `password` for Password Grant flow
517
+ * @param password
518
+ */
519
+ addPassword(password: string): void {
520
+ this.parameters.set(
521
+ PasswordGrantConstants.password,
522
+ encodeURIComponent(password)
523
+ );
524
+ }
525
+
526
+ /**
527
+ * add pop_jwk to query params
528
+ * @param cnfString
529
+ */
530
+ addPopToken(cnfString: string): void {
531
+ if (cnfString) {
532
+ this.parameters.set(
533
+ AADServerParamKeys.TOKEN_TYPE,
534
+ AuthenticationScheme.POP
535
+ );
536
+ this.parameters.set(
537
+ AADServerParamKeys.REQ_CNF,
538
+ encodeURIComponent(cnfString)
539
+ );
540
+ }
541
+ }
542
+
543
+ /**
544
+ * add SSH JWK and key ID to query params
545
+ */
546
+ addSshJwk(sshJwkString: string): void {
547
+ if (sshJwkString) {
548
+ this.parameters.set(
549
+ AADServerParamKeys.TOKEN_TYPE,
550
+ AuthenticationScheme.SSH
551
+ );
552
+ this.parameters.set(
553
+ AADServerParamKeys.REQ_CNF,
554
+ encodeURIComponent(sshJwkString)
555
+ );
556
+ }
557
+ }
558
+
559
+ /**
560
+ * add server telemetry fields
561
+ * @param serverTelemetryManager
562
+ */
563
+ addServerTelemetry(serverTelemetryManager: ServerTelemetryManager): void {
564
+ this.parameters.set(
565
+ AADServerParamKeys.X_CLIENT_CURR_TELEM,
566
+ serverTelemetryManager.generateCurrentRequestHeaderValue()
567
+ );
568
+ this.parameters.set(
569
+ AADServerParamKeys.X_CLIENT_LAST_TELEM,
570
+ serverTelemetryManager.generateLastRequestHeaderValue()
571
+ );
572
+ }
573
+
574
+ /**
575
+ * Adds parameter that indicates to the server that throttling is supported
576
+ */
577
+ addThrottling(): void {
578
+ this.parameters.set(
579
+ AADServerParamKeys.X_MS_LIB_CAPABILITY,
580
+ ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE
581
+ );
582
+ }
583
+
584
+ /**
585
+ * Adds logout_hint parameter for "silent" logout which prevent server account picker
586
+ */
587
+ addLogoutHint(logoutHint: string): void {
588
+ this.parameters.set(
589
+ AADServerParamKeys.LOGOUT_HINT,
590
+ encodeURIComponent(logoutHint)
591
+ );
592
+ }
593
+
594
+ /**
595
+ * Utility to create a URL from the params map
596
+ */
597
+ createQueryString(): string {
598
+ const queryParameterArray: Array<string> = new Array<string>();
599
+
600
+ this.parameters.forEach((value, key) => {
601
+ queryParameterArray.push(`${key}=${value}`);
602
+ });
603
+
604
+ return queryParameterArray.join("&");
605
+ }
606
+ }
@@ -0,0 +1,103 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { ClientConfigurationError } from "../error/ClientConfigurationError";
7
+ import { PromptValue, CodeChallengeMethodValues } from "../utils/Constants";
8
+ import { StringDict } from "../utils/MsalTypes";
9
+
10
+ /**
11
+ * Validates server consumable params from the "request" objects
12
+ */
13
+ export class RequestValidator {
14
+ /**
15
+ * Utility to check if the `redirectUri` in the request is a non-null value
16
+ * @param redirectUri
17
+ */
18
+ static validateRedirectUri(redirectUri: string): void {
19
+ if (!redirectUri) {
20
+ throw ClientConfigurationError.createRedirectUriEmptyError();
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Utility to validate prompt sent by the user in the request
26
+ * @param prompt
27
+ */
28
+ static validatePrompt(prompt: string): void {
29
+ const promptValues = [];
30
+
31
+ for (const value in PromptValue) {
32
+ promptValues.push(PromptValue[value]);
33
+ }
34
+
35
+ if (promptValues.indexOf(prompt) < 0) {
36
+ throw ClientConfigurationError.createInvalidPromptError(prompt);
37
+ }
38
+ }
39
+
40
+ static validateClaims(claims: string): void {
41
+ try {
42
+ JSON.parse(claims);
43
+ } catch (e) {
44
+ throw ClientConfigurationError.createInvalidClaimsRequestError();
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Utility to validate code_challenge and code_challenge_method
50
+ * @param codeChallenge
51
+ * @param codeChallengeMethod
52
+ */
53
+ static validateCodeChallengeParams(
54
+ codeChallenge: string,
55
+ codeChallengeMethod: string
56
+ ): void {
57
+ if (!codeChallenge || !codeChallengeMethod) {
58
+ throw ClientConfigurationError.createInvalidCodeChallengeParamsError();
59
+ } else {
60
+ this.validateCodeChallengeMethod(codeChallengeMethod);
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Utility to validate code_challenge_method
66
+ * @param codeChallengeMethod
67
+ */
68
+ static validateCodeChallengeMethod(codeChallengeMethod: string): void {
69
+ if (
70
+ [
71
+ CodeChallengeMethodValues.PLAIN,
72
+ CodeChallengeMethodValues.S256,
73
+ ].indexOf(codeChallengeMethod) < 0
74
+ ) {
75
+ throw ClientConfigurationError.createInvalidCodeChallengeMethodError();
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Removes unnecessary, duplicate, and empty string query parameters from extraQueryParameters
81
+ * @param request
82
+ */
83
+ static sanitizeEQParams(
84
+ eQParams: StringDict,
85
+ queryParams: Map<string, string>
86
+ ): StringDict {
87
+ if (!eQParams) {
88
+ return {};
89
+ }
90
+
91
+ // Remove any query parameters already included in SSO params
92
+ queryParams.forEach((_value, key) => {
93
+ if (eQParams[key]) {
94
+ delete eQParams[key];
95
+ }
96
+ });
97
+
98
+ // remove empty string parameters
99
+ return Object.fromEntries(
100
+ Object.entries(eQParams).filter((kv) => kv[1] !== "")
101
+ );
102
+ }
103
+ }