@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,55 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { JoseHeaderError } from "../error/JoseHeaderError";
7
+ import { JsonTypes } from "../utils/Constants";
8
+
9
+ export type JoseHeaderOptions = {
10
+ typ?: JsonTypes;
11
+ alg?: string;
12
+ kid?: string;
13
+ };
14
+
15
+ /** @internal */
16
+ export class JoseHeader {
17
+ public typ?: JsonTypes;
18
+ public alg?: string;
19
+ public kid?: string;
20
+
21
+ constructor(options: JoseHeaderOptions) {
22
+ this.typ = options.typ;
23
+ this.alg = options.alg;
24
+ this.kid = options.kid;
25
+ }
26
+
27
+ /**
28
+ * Builds SignedHttpRequest formatted JOSE Header from the
29
+ * JOSE Header options provided or previously set on the object and returns
30
+ * the stringified header object.
31
+ * Throws if keyId or algorithm aren't provided since they are required for Access Token Binding.
32
+ * @param shrHeaderOptions
33
+ * @returns
34
+ */
35
+ static getShrHeaderString(shrHeaderOptions: JoseHeaderOptions): string {
36
+ // KeyID is required on the SHR header
37
+ if (!shrHeaderOptions.kid) {
38
+ throw JoseHeaderError.createMissingKidError();
39
+ }
40
+
41
+ // Alg is required on the SHR header
42
+ if (!shrHeaderOptions.alg) {
43
+ throw JoseHeaderError.createMissingAlgError();
44
+ }
45
+
46
+ const shrHeader = new JoseHeader({
47
+ // Access Token PoP headers must have type pop, but the type header can be overriden for special cases
48
+ typ: shrHeaderOptions.typ || JsonTypes.Pop,
49
+ kid: shrHeaderOptions.kid,
50
+ alg: shrHeaderOptions.alg,
51
+ });
52
+
53
+ return JSON.stringify(shrHeader);
54
+ }
55
+ }
@@ -0,0 +1,155 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { ICrypto, SignedHttpRequestParameters } from "./ICrypto";
7
+ import { TimeUtils } from "../utils/TimeUtils";
8
+ import { UrlString } from "../url/UrlString";
9
+ import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient";
10
+ import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";
11
+
12
+ /**
13
+ * See eSTS docs for more info.
14
+ * - A kid element, with the value containing an RFC 7638-compliant JWK thumbprint that is base64 encoded.
15
+ * - xms_ksl element, representing the storage location of the key's secret component on the client device. One of two values:
16
+ * - sw: software storage
17
+ * - uhw: hardware storage
18
+ */
19
+ type ReqCnf = {
20
+ kid: string;
21
+ xms_ksl: KeyLocation;
22
+ };
23
+
24
+ export type ReqCnfData = {
25
+ kid: string;
26
+ reqCnfString: string;
27
+ reqCnfHash: string;
28
+ };
29
+
30
+ const KeyLocation = {
31
+ SW: "sw",
32
+ UHW: "uhw",
33
+ } as const;
34
+ export type KeyLocation = (typeof KeyLocation)[keyof typeof KeyLocation];
35
+
36
+ /** @internal */
37
+ export class PopTokenGenerator {
38
+ private cryptoUtils: ICrypto;
39
+ private performanceClient?: IPerformanceClient;
40
+
41
+ constructor(cryptoUtils: ICrypto, performanceClient?: IPerformanceClient) {
42
+ this.cryptoUtils = cryptoUtils;
43
+ this.performanceClient = performanceClient;
44
+ }
45
+
46
+ /**
47
+ * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters
48
+ * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash
49
+ * @param request
50
+ * @returns
51
+ */
52
+ async generateCnf(
53
+ request: SignedHttpRequestParameters
54
+ ): Promise<ReqCnfData> {
55
+ this.performanceClient?.addQueueMeasurement(
56
+ PerformanceEvents.PopTokenGenerateCnf,
57
+ request.correlationId
58
+ );
59
+
60
+ this.performanceClient?.setPreQueueTime(
61
+ PerformanceEvents.PopTokenGenerateKid,
62
+ request.correlationId
63
+ );
64
+ const reqCnf = await this.generateKid(request);
65
+ const reqCnfString: string = this.cryptoUtils.base64Encode(
66
+ JSON.stringify(reqCnf)
67
+ );
68
+
69
+ return {
70
+ kid: reqCnf.kid,
71
+ reqCnfString,
72
+ reqCnfHash: await this.cryptoUtils.hashString(reqCnfString),
73
+ };
74
+ }
75
+
76
+ /**
77
+ * Generates key_id for a SHR token request
78
+ * @param request
79
+ * @returns
80
+ */
81
+ async generateKid(request: SignedHttpRequestParameters): Promise<ReqCnf> {
82
+ this.performanceClient?.addQueueMeasurement(
83
+ PerformanceEvents.PopTokenGenerateKid,
84
+ request.correlationId
85
+ );
86
+
87
+ const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(
88
+ request
89
+ );
90
+
91
+ return {
92
+ kid: kidThumbprint,
93
+ xms_ksl: KeyLocation.SW,
94
+ };
95
+ }
96
+
97
+ /**
98
+ * Signs the POP access_token with the local generated key-pair
99
+ * @param accessToken
100
+ * @param request
101
+ * @returns
102
+ */
103
+ async signPopToken(
104
+ accessToken: string,
105
+ keyId: string,
106
+ request: SignedHttpRequestParameters
107
+ ): Promise<string> {
108
+ return this.signPayload(accessToken, keyId, request);
109
+ }
110
+
111
+ /**
112
+ * Utility function to generate the signed JWT for an access_token
113
+ * @param payload
114
+ * @param kid
115
+ * @param request
116
+ * @param claims
117
+ * @returns
118
+ */
119
+ async signPayload(
120
+ payload: string,
121
+ keyId: string,
122
+ request: SignedHttpRequestParameters,
123
+ claims?: object
124
+ ): Promise<string> {
125
+ // Deconstruct request to extract SHR parameters
126
+ const {
127
+ resourceRequestMethod,
128
+ resourceRequestUri,
129
+ shrClaims,
130
+ shrNonce,
131
+ } = request;
132
+
133
+ const resourceUrlString = resourceRequestUri
134
+ ? new UrlString(resourceRequestUri)
135
+ : undefined;
136
+ const resourceUrlComponents = resourceUrlString?.getUrlComponents();
137
+ return await this.cryptoUtils.signJwt(
138
+ {
139
+ at: payload,
140
+ ts: TimeUtils.nowSeconds(),
141
+ m: resourceRequestMethod?.toUpperCase(),
142
+ u: resourceUrlComponents?.HostNameAndPort,
143
+ nonce: shrNonce || this.cryptoUtils.createNewGuid(),
144
+ p: resourceUrlComponents?.AbsolutePath,
145
+ q: resourceUrlComponents?.QueryString
146
+ ? [[], resourceUrlComponents.QueryString]
147
+ : undefined,
148
+ client_claims: shrClaims || undefined,
149
+ ...claims,
150
+ },
151
+ keyId,
152
+ request.correlationId
153
+ );
154
+ }
155
+ }
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export type SignedHttpRequest = {
7
+ at?: string;
8
+ cnf?: object;
9
+ m?: string;
10
+ u?: string;
11
+ p?: string;
12
+ q?: [Array<string>, string];
13
+ ts?: number;
14
+ nonce?: string;
15
+ client_claims?: string;
16
+ };
@@ -0,0 +1,85 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { Constants } from "../utils/Constants";
7
+
8
+ /**
9
+ * AuthErrorMessage class containing string constants used by error codes and messages.
10
+ */
11
+ export const AuthErrorMessage = {
12
+ unexpectedError: {
13
+ code: "unexpected_error",
14
+ desc: "Unexpected error in authentication.",
15
+ },
16
+ postRequestFailed: {
17
+ code: "post_request_failed",
18
+ desc: "Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details.",
19
+ },
20
+ };
21
+
22
+ /**
23
+ * General error class thrown by the MSAL.js library.
24
+ */
25
+ export class AuthError extends Error {
26
+ /**
27
+ * Short string denoting error
28
+ */
29
+ errorCode: string;
30
+
31
+ /**
32
+ * Detailed description of error
33
+ */
34
+ errorMessage: string;
35
+
36
+ /**
37
+ * Describes the subclass of an error
38
+ */
39
+ subError: string;
40
+
41
+ /**
42
+ * CorrelationId associated with the error
43
+ */
44
+ correlationId: string;
45
+
46
+ constructor(errorCode?: string, errorMessage?: string, suberror?: string) {
47
+ const errorString = errorMessage
48
+ ? `${errorCode}: ${errorMessage}`
49
+ : errorCode;
50
+ super(errorString);
51
+ Object.setPrototypeOf(this, AuthError.prototype);
52
+
53
+ this.errorCode = errorCode || Constants.EMPTY_STRING;
54
+ this.errorMessage = errorMessage || Constants.EMPTY_STRING;
55
+ this.subError = suberror || Constants.EMPTY_STRING;
56
+ this.name = "AuthError";
57
+ }
58
+
59
+ setCorrelationId(correlationId: string): void {
60
+ this.correlationId = correlationId;
61
+ }
62
+
63
+ /**
64
+ * Creates an error that is thrown when something unexpected happens in the library.
65
+ * @param errDesc
66
+ */
67
+ static createUnexpectedError(errDesc: string): AuthError {
68
+ return new AuthError(
69
+ AuthErrorMessage.unexpectedError.code,
70
+ `${AuthErrorMessage.unexpectedError.desc}: ${errDesc}`
71
+ );
72
+ }
73
+
74
+ /**
75
+ * Creates an error for post request failures.
76
+ * @param errDesc
77
+ * @returns
78
+ */
79
+ static createPostRequestFailed(errDesc: string): AuthError {
80
+ return new AuthError(
81
+ AuthErrorMessage.postRequestFailed.code,
82
+ `${AuthErrorMessage.postRequestFailed.desc}: ${errDesc}`
83
+ );
84
+ }
85
+ }