@microsoft/agents-hosting 1.7.1 → 1.8.0-beta.34.g5d543f96c0

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 (100) hide show
  1. package/README.md +64 -2
  2. package/dist/package.json +3 -3
  3. package/dist/src/agent-client/agentClient.d.ts +18 -6
  4. package/dist/src/agent-client/agentClient.js +34 -18
  5. package/dist/src/agent-client/agentClient.js.map +1 -1
  6. package/dist/src/agent-client/agentResponseHandler.d.ts +14 -9
  7. package/dist/src/agent-client/agentResponseHandler.js +10 -5
  8. package/dist/src/agent-client/agentResponseHandler.js.map +1 -1
  9. package/dist/src/agent-client/createAgentResponseHandler.d.ts +7 -2
  10. package/dist/src/agent-client/createAgentResponseHandler.js +55 -8
  11. package/dist/src/agent-client/createAgentResponseHandler.js.map +1 -1
  12. package/dist/src/app/adaptiveCards/activityValueParsers.d.ts +1 -4
  13. package/dist/src/app/adaptiveCards/activityValueParsers.js +2 -6
  14. package/dist/src/app/adaptiveCards/activityValueParsers.js.map +1 -1
  15. package/dist/src/app/adaptiveCards/adaptiveCardsActions.d.ts +18 -0
  16. package/dist/src/app/adaptiveCards/adaptiveCardsActions.js +53 -23
  17. package/dist/src/app/adaptiveCards/adaptiveCardsActions.js.map +1 -1
  18. package/dist/src/app/agentApplication.d.ts +7 -0
  19. package/dist/src/app/agentApplication.js +130 -70
  20. package/dist/src/app/agentApplication.js.map +1 -1
  21. package/dist/src/app/attachmentDownloader.d.ts +4 -1
  22. package/dist/src/app/attachmentDownloader.js +27 -5
  23. package/dist/src/app/attachmentDownloader.js.map +1 -1
  24. package/dist/src/app/auth/handlers/agenticAuthorization.d.ts +1 -1
  25. package/dist/src/app/auth/handlers/azureBotAuthorization.d.ts +1 -1
  26. package/dist/src/app/auth/types.d.ts +3 -4
  27. package/dist/src/app/index.d.ts +2 -0
  28. package/dist/src/app/index.js.map +1 -1
  29. package/dist/src/app/streaming/streamingResponse.js +2 -9
  30. package/dist/src/app/streaming/streamingResponse.js.map +1 -1
  31. package/dist/src/app/teamsAttachmentDownloader.d.ts +3 -1
  32. package/dist/src/app/teamsAttachmentDownloader.js +12 -1
  33. package/dist/src/app/teamsAttachmentDownloader.js.map +1 -1
  34. package/dist/src/auth/authConfiguration.js +12 -0
  35. package/dist/src/auth/authConfiguration.js.map +1 -1
  36. package/dist/src/auth/index.d.ts +3 -1
  37. package/dist/src/auth/index.js +3 -1
  38. package/dist/src/auth/index.js.map +1 -1
  39. package/dist/src/auth/jwt-middleware.d.ts +6 -0
  40. package/dist/src/auth/jwt-middleware.js +263 -13
  41. package/dist/src/auth/jwt-middleware.js.map +1 -1
  42. package/dist/src/auth/msal/msalConnectionSettings.d.ts +8 -0
  43. package/dist/src/auth/msal/msalHttpRetryHandlerHelper.d.ts +34 -0
  44. package/dist/src/auth/msal/msalHttpRetryHandlerHelper.js +126 -0
  45. package/dist/src/auth/msal/msalHttpRetryHandlerHelper.js.map +1 -0
  46. package/dist/src/auth/msal/msalTokenProvider.d.ts +1 -0
  47. package/dist/src/auth/msal/msalTokenProvider.js +23 -14
  48. package/dist/src/auth/msal/msalTokenProvider.js.map +1 -1
  49. package/dist/src/auth/settings.d.ts +18 -0
  50. package/dist/src/auth/settings.js +8 -2
  51. package/dist/src/auth/settings.js.map +1 -1
  52. package/dist/src/cloudAdapter.d.ts +29 -2
  53. package/dist/src/cloudAdapter.js +44 -2
  54. package/dist/src/cloudAdapter.js.map +1 -1
  55. package/dist/src/errorHelper.js +137 -101
  56. package/dist/src/errorHelper.js.map +1 -1
  57. package/dist/src/index.d.ts +1 -0
  58. package/dist/src/index.js +1 -0
  59. package/dist/src/index.js.map +1 -1
  60. package/dist/src/invoke/adaptiveCardInvokeValue.d.ts +5 -0
  61. package/dist/src/oauth/userTokenClient.d.ts +0 -1
  62. package/dist/src/oauth/userTokenClient.js +0 -1
  63. package/dist/src/oauth/userTokenClient.js.map +1 -1
  64. package/dist/src/observability/traces.js +3 -2
  65. package/dist/src/observability/traces.js.map +1 -1
  66. package/dist/src/outboundHostValidator.d.ts +47 -0
  67. package/dist/src/outboundHostValidator.js +149 -0
  68. package/dist/src/outboundHostValidator.js.map +1 -0
  69. package/dist/src/state/agentState.d.ts +5 -0
  70. package/dist/src/state/agentState.js +16 -3
  71. package/dist/src/state/agentState.js.map +1 -1
  72. package/package.json +3 -3
  73. package/src/agent-client/agentClient.ts +46 -23
  74. package/src/agent-client/agentResponseHandler.ts +14 -9
  75. package/src/agent-client/createAgentResponseHandler.ts +70 -9
  76. package/src/app/adaptiveCards/activityValueParsers.ts +3 -10
  77. package/src/app/adaptiveCards/adaptiveCardsActions.ts +52 -24
  78. package/src/app/agentApplication.ts +143 -67
  79. package/src/app/attachmentDownloader.ts +25 -5
  80. package/src/app/auth/handlers/agenticAuthorization.ts +1 -1
  81. package/src/app/auth/handlers/azureBotAuthorization.ts +1 -1
  82. package/src/app/auth/types.ts +3 -3
  83. package/src/app/index.ts +8 -0
  84. package/src/app/streaming/streamingResponse.ts +2 -8
  85. package/src/app/teamsAttachmentDownloader.ts +11 -1
  86. package/src/auth/authConfiguration.ts +12 -0
  87. package/src/auth/index.ts +3 -1
  88. package/src/auth/jwt-middleware.ts +298 -14
  89. package/src/auth/msal/msalConnectionSettings.ts +10 -0
  90. package/src/auth/msal/msalHttpRetryHandlerHelper.ts +161 -0
  91. package/src/auth/msal/msalTokenProvider.ts +32 -14
  92. package/src/auth/settings.ts +18 -3
  93. package/src/cloudAdapter.ts +56 -3
  94. package/src/errorHelper.ts +155 -114
  95. package/src/index.ts +1 -0
  96. package/src/invoke/adaptiveCardInvokeValue.ts +5 -0
  97. package/src/oauth/userTokenClient.ts +0 -1
  98. package/src/observability/traces.ts +2 -1
  99. package/src/outboundHostValidator.ts +172 -0
  100. package/src/state/agentState.ts +24 -6
@@ -8,10 +8,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  };
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.authorizeJWT = void 0;
11
+ exports.getAuthorizedAudience = getAuthorizedAudience;
11
12
  exports.clearJwksClients = clearJwksClients;
12
13
  exports.buildJwksUri = buildJwksUri;
13
14
  exports.getJwksClient = getJwksClient;
14
- const authConfiguration_1 = require("./authConfiguration");
15
+ const settings_1 = require("./settings");
15
16
  const errorHelper_1 = require("../errorHelper");
16
17
  const agents_activity_1 = require("@microsoft/agents-activity");
17
18
  const jwks_rsa_1 = __importDefault(require("jwks-rsa"));
@@ -20,12 +21,241 @@ const agents_telemetry_1 = require("@microsoft/agents-telemetry");
20
21
  const logger = (0, agents_telemetry_1.debug)('agents:jwt-middleware');
21
22
  const jwksClients = new Map();
22
23
  const maxJwksClients = 100;
24
+ const authorizedAudience = Symbol('authorizedAudience');
25
+ /**
26
+ * Gets the configured audience selected while authorizing a request.
27
+ * @param req The authorized request.
28
+ * @returns The matched configured client ID, or `undefined` for anonymous requests.
29
+ */
30
+ function getAuthorizedAudience(req) {
31
+ return req[authorizedAudience];
32
+ }
23
33
  /**
24
34
  * Clears process-wide JWKS clients.
25
35
  */
26
36
  function clearJwksClients() {
27
37
  jwksClients.clear();
28
38
  }
39
+ /**
40
+ * Well-known Microsoft first-party token issuer tenant IDs that are always trusted,
41
+ * mirroring the default `ValidIssuers` set in the .NET SDK
42
+ * (Microsoft.Agents.Hosting.AspNetCore `AspNetExtensions.AddAgentAspNetAuthentication`).
43
+ *
44
+ * These identify Microsoft infrastructure tenants used by Azure Bot Service, Teams and
45
+ * skill and SDK-specific Activity callback flows. They are accepted in addition to a connection's configured
46
+ * issuers so that enabling issuer validation does not reject legitimate first-party traffic.
47
+ */
48
+ const WELL_KNOWN_PUBLIC_TENANT_IDS = [
49
+ 'd6d49420-f39b-4df7-a1dc-d59a935871db',
50
+ 'f8cdef31-a31e-4b4a-93e4-5f571e91255a',
51
+ '69e9b82d-4842-4902-8d1e-abc5b98a55e8'
52
+ ];
53
+ const WELL_KNOWN_GOV_TENANT_ID = 'cab8a31a-1906-4287-a0d8-4eef66b95f6e';
54
+ /**
55
+ * Determines whether the configured authority targets the Azure US Government cloud.
56
+ * @param authority The configured Entra authority.
57
+ * @returns `true` when the authority is a US Government endpoint.
58
+ */
59
+ function isGovAuthority(authority) {
60
+ return !!authority && /login\.microsoftonline\.us/i.test(authority);
61
+ }
62
+ function getAuthority(authConfig) {
63
+ var _a;
64
+ return (_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority;
65
+ }
66
+ /**
67
+ * Returns the well-known Microsoft first-party issuers that are always trusted for the
68
+ * cloud implied by `authority` (public by default, US Government when the authority is gov).
69
+ * @param authority The configured Entra authority.
70
+ * @returns The well-known first-party issuer list.
71
+ */
72
+ function getWellKnownFirstPartyIssuers(authority) {
73
+ if (isGovAuthority(authority)) {
74
+ return [
75
+ 'https://api.botframework.us',
76
+ `https://sts.windows.net/${WELL_KNOWN_GOV_TENANT_ID}/`,
77
+ `https://login.microsoftonline.us/${WELL_KNOWN_GOV_TENANT_ID}/v2.0`
78
+ ];
79
+ }
80
+ return [
81
+ 'https://api.botframework.com',
82
+ ...WELL_KNOWN_PUBLIC_TENANT_IDS.flatMap((t) => [
83
+ `https://sts.windows.net/${t}/`,
84
+ `https://login.microsoftonline.com/${t}/v2.0`
85
+ ])
86
+ ];
87
+ }
88
+ /**
89
+ * Computes the lowercase issuer allow-list used to validate a token's `iss` claim against a
90
+ * matched connection. The list is the connection's configured issuers (or a tenant-scoped
91
+ * default when none are configured) unioned with the always-trusted Microsoft first-party
92
+ * issuers. Comparison is performed case-insensitively to tolerate operator-provided tenant
93
+ * GUID casing while still rejecting tokens from unrelated tenants.
94
+ * @param authConfig The matched connection configuration.
95
+ * @returns A de-duplicated, lowercased list of accepted issuers.
96
+ */
97
+ function getValidIssuers(authConfig) {
98
+ var _a;
99
+ const authority = getAuthority(authConfig);
100
+ const configured = authConfig.issuers && authConfig.issuers.length > 0
101
+ ? authConfig.issuers
102
+ : (0, settings_1.getDefaultIssuers)((_a = authConfig.tenantId) !== null && _a !== void 0 ? _a : '', authority !== null && authority !== void 0 ? authority : 'https://login.microsoftonline.com');
103
+ const accepted = new Set();
104
+ for (const issuer of [...configured, ...getWellKnownFirstPartyIssuers(authority)]) {
105
+ accepted.add(issuer.toLowerCase());
106
+ }
107
+ return [...accepted];
108
+ }
109
+ /**
110
+ * Returns the effective tenant identifier for a connection: the tenant embedded in the authority
111
+ * path when present (which takes precedence, matching {@link resolveAuthority}), otherwise the
112
+ * configured `tenantId`.
113
+ * @param authConfig The matched connection configuration.
114
+ * @returns The effective tenant identifier, or `undefined` when none is configured.
115
+ */
116
+ function getEffectiveTenant(authConfig) {
117
+ const authority = getAuthority(authConfig);
118
+ if (authority) {
119
+ try {
120
+ const segment = new URL(authority.replace(/\/+$/, '')).pathname.split('/').filter(Boolean).pop();
121
+ if (segment) {
122
+ return segment;
123
+ }
124
+ }
125
+ catch {
126
+ // Non-URL authority — fall through to the configured tenantId.
127
+ }
128
+ }
129
+ return authConfig.tenantId;
130
+ }
131
+ /**
132
+ * Determines whether a connection is configured as a multi-tenant ("blueprint") agent, i.e. its
133
+ * effective tenant is the Entra `common` or `organizations` meta-tenant. For such agents the
134
+ * calling tenant is not known at configuration time, so the strict issuer allow-list cannot
135
+ * enumerate it and issuer validation must instead accept any canonical Entra issuer for the
136
+ * configured cloud (still bound to the token's `tid` by {@link validateTenantBinding} and anchored
137
+ * by the signature and audience checks).
138
+ * @param authConfig The matched connection configuration.
139
+ * @returns `true` when the connection targets the `common`/`organizations` meta-tenant.
140
+ */
141
+ function isMultiTenant(authConfig) {
142
+ var _a;
143
+ const tenant = (_a = getEffectiveTenant(authConfig)) === null || _a === void 0 ? void 0 : _a.toLowerCase();
144
+ return tenant === 'common' || tenant === 'organizations';
145
+ }
146
+ /**
147
+ * Determines whether `iss` is a canonical Entra issuer that may be accepted for a multi-tenant
148
+ * connection. The issuer must carry a concrete tenant GUID and, for cloud-specific v2 issuers,
149
+ * belong to the same cloud as the configured authority (public vs US Government). The cloud-
150
+ * agnostic v1 `sts.windows.net` host is accepted in either cloud.
151
+ * @param iss The token issuer claim.
152
+ * @param authConfig The matched connection configuration.
153
+ * @returns `true` when the issuer is an acceptable Entra tenant issuer for the configured cloud.
154
+ */
155
+ function isAcceptableTenantIssuer(iss, authConfig) {
156
+ const info = getEntraIssuerInfo(iss);
157
+ if (!info) {
158
+ return false;
159
+ }
160
+ return info.gov === undefined || info.gov === isGovAuthority(getAuthority(authConfig));
161
+ }
162
+ /**
163
+ * Validates that the token's `iss` claim is present and acceptable for the matched connection.
164
+ * Without this check a signature-valid token from any tenant (Entra signing keys are shared across
165
+ * tenants in a cloud) with a matching audience would be accepted, enabling a cross-tenant
166
+ * authentication bypass for multi-tenant app registrations.
167
+ *
168
+ * For single-tenant connections the issuer must be in the connection's allow-list. For multi-tenant
169
+ * ("blueprint") connections, where the calling tenant is unknown at configuration time, any
170
+ * canonical Entra issuer for the configured cloud is also accepted; the token's tenant is then
171
+ * bound to its `tid` claim by {@link validateTenantBinding} and ultimately anchored by the
172
+ * signature and audience (clientId) checks.
173
+ * @param iss The token issuer claim (from the decoded payload).
174
+ * @param authConfig The matched connection configuration.
175
+ * @throws When the issuer is missing, non-string, or not acceptable for the connection.
176
+ */
177
+ function validateIssuer(iss, authConfig) {
178
+ if (typeof iss === 'string') {
179
+ if (getValidIssuers(authConfig).includes(iss.toLowerCase())) {
180
+ return;
181
+ }
182
+ if (isMultiTenant(authConfig) && isAcceptableTenantIssuer(iss, authConfig)) {
183
+ return;
184
+ }
185
+ }
186
+ const err = agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.JwtIssuerMismatch);
187
+ logger.error(err.message, iss);
188
+ throw err;
189
+ }
190
+ /**
191
+ * Matches a tenant GUID (the format Entra uses for the `tid` claim and the tenant segment of an
192
+ * Entra issuer). Operator-configured issuers may instead use a tenant domain alias, which cannot
193
+ * be compared to the GUID `tid` claim and is therefore left unbound.
194
+ */
195
+ const ENTRA_TENANT_GUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
196
+ /**
197
+ * Parses a recognised public or US Government Entra issuer into its tenant GUID and cloud affinity,
198
+ * or returns `undefined` when the issuer is not such an Entra issuer or does not embed a tenant
199
+ * GUID.
200
+ *
201
+ * Only GUID tenants are recognised: the token's `tid` claim is always the tenant GUID, so an issuer
202
+ * whose tenant segment is a domain alias (e.g. `contoso.onmicrosoft.com`) cannot be compared to
203
+ * `tid` and is intentionally left unrecognised to preserve compatibility. Non-Entra issuers such as
204
+ * the Azure Bot Service `api.botframework.*` issuers carry no `tid` claim and are not matched here.
205
+ * @param iss The token issuer claim.
206
+ * @returns The issuer's tenant and cloud affinity, or `undefined` when not a recognised Entra issuer.
207
+ */
208
+ function getEntraIssuerInfo(iss) {
209
+ const v1 = /^https:\/\/sts\.windows\.net\/([^/]+)\/$/i.exec(iss);
210
+ if (v1) {
211
+ return ENTRA_TENANT_GUID.test(v1[1]) ? { tenant: v1[1].toLowerCase() } : undefined;
212
+ }
213
+ const v2 = /^([^:]+):\/\/([^/]+)\/([^/]+)\/v2\.0$/.exec(iss);
214
+ const v2Host = v2 ? /^login\.microsoftonline\.(com|us)$/i.exec(v2[2]) : undefined;
215
+ if (v2 && v2Host && v2[1].toLowerCase() === 'https' && ENTRA_TENANT_GUID.test(v2[3])) {
216
+ return { tenant: v2[3].toLowerCase(), gov: v2Host[1].toLowerCase() === 'us' };
217
+ }
218
+ return undefined;
219
+ }
220
+ /**
221
+ * Extracts the tenant GUID embedded in a recognised public or US Government Entra issuer, or
222
+ * `undefined` when the issuer is not such an Entra issuer or does not embed a tenant GUID.
223
+ * @param iss The token issuer claim.
224
+ * @returns The lowercased tenant GUID, or `undefined` when no bindable tenant is present.
225
+ */
226
+ function getIssuerTenant(iss) {
227
+ var _a;
228
+ return (_a = getEntraIssuerInfo(iss)) === null || _a === void 0 ? void 0 : _a.tenant;
229
+ }
230
+ /**
231
+ * Validates that an Entra token's `tid` (tenant id) claim matches the tenant GUID embedded in its
232
+ * `iss` claim. This binds the accepted issuer to the token's tenant. Because
233
+ * Entra signing keys are shared across tenants within a cloud, requiring the issuer's tenant and
234
+ * the `tid` claim to agree prevents a token whose `iss` was allow-listed (for example one of the
235
+ * always-trusted Microsoft first-party tenants) from being accepted on behalf of a different
236
+ * tenant.
237
+ *
238
+ * The binding only applies when both claims are strings and the issuer is a recognised Entra
239
+ * issuer carrying a GUID tenant. Missing/non-string claims, Azure Bot Service issuers, and
240
+ * alias-based issuers are skipped for backward compatibility.
241
+ * @param iss The token issuer claim.
242
+ * @param tid The token tenant id claim.
243
+ * @throws When both claims are strings and the issuer embeds a tenant GUID different from `tid`.
244
+ */
245
+ function validateTenantBinding(iss, tid) {
246
+ if (typeof iss !== 'string' || typeof tid !== 'string') {
247
+ return;
248
+ }
249
+ const issuerTenant = getIssuerTenant(iss);
250
+ if (!issuerTenant) {
251
+ return;
252
+ }
253
+ if (tid.toLowerCase() !== issuerTenant) {
254
+ const err = agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.JwtTenantMismatch);
255
+ logger.error(err.message, tid);
256
+ throw err;
257
+ }
258
+ }
29
259
  /**
30
260
  * Builds the JWKS URI for the given token issuer and auth configuration.
31
261
  * @param iss The token issuer claim.
@@ -34,9 +264,14 @@ function clearJwksClients() {
34
264
  */
35
265
  function buildJwksUri(iss, authConfig) {
36
266
  var _a;
37
- return iss === 'https://api.botframework.com'
38
- ? 'https://login.botframework.com/v1/.well-known/keys'
39
- : `${(0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId)}/discovery/v2.0/keys`;
267
+ switch (typeof iss === 'string' ? iss.toLowerCase() : '') {
268
+ case 'https://api.botframework.com':
269
+ return 'https://login.botframework.com/v1/.well-known/keys';
270
+ case 'https://api.botframework.us':
271
+ return 'https://login.botframework.azure.us/v1/.well-known/keys';
272
+ default:
273
+ return `${(0, settings_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId)}/discovery/v2.0/keys`;
274
+ }
40
275
  }
41
276
  function getJwksClient(jwksUri) {
42
277
  // Check if a client for this JWKS URI already exists in the cache.
@@ -62,7 +297,7 @@ function getJwksClient(jwksUri) {
62
297
  * Verifies the JWT token.
63
298
  * @param raw The raw JWT token.
64
299
  * @param config The authentication configuration.
65
- * @returns A promise that resolves to the JWT payload.
300
+ * @returns A promise that resolves to the verified payload and matched configured audience.
66
301
  */
67
302
  const verifyToken = async (raw, config) => {
68
303
  const payload = jsonwebtoken_1.default.decode(raw);
@@ -70,18 +305,23 @@ const verifyToken = async (raw, config) => {
70
305
  if (!payload) {
71
306
  throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.InvalidJwtToken);
72
307
  }
73
- const audience = payload.aud;
308
+ const audiences = Array.isArray(payload.aud)
309
+ ? payload.aud
310
+ : typeof payload.aud === 'string'
311
+ ? [payload.aud]
312
+ : [];
74
313
  const matchingEntry = config.connections && config.connections.size > 0
75
- ? [...config.connections.entries()].find(([_, configuration]) => configuration.clientId === audience)
314
+ ? [...config.connections.entries()].find(([_, configuration]) => typeof configuration.clientId === 'string' && audiences.includes(configuration.clientId))
76
315
  : undefined;
77
316
  if (!matchingEntry) {
78
317
  const err = agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.JwtAudienceMismatch);
79
- logger.error(err.message, audience);
318
+ logger.error(err.message, audiences);
80
319
  throw err;
81
320
  }
82
321
  const [key, authConfig] = matchingEntry;
83
322
  logger.debug(`Audience found at key: ${key}`);
84
- const jwksUri = buildJwksUri(payload.iss, authConfig);
323
+ const issuer = typeof payload.iss === 'string' ? payload.iss : '';
324
+ const jwksUri = buildJwksUri(issuer, authConfig);
85
325
  logger.debug(`fetching keys from ${jwksUri}`);
86
326
  const jwksClient = getJwksClient(jwksUri);
87
327
  const getKey = (header, callback) => {
@@ -103,7 +343,7 @@ const verifyToken = async (raw, config) => {
103
343
  algorithms: ['RS256'],
104
344
  clockTolerance: 300
105
345
  };
106
- return await new Promise((resolve, reject) => {
346
+ const verifiedPayload = await new Promise((resolve, reject) => {
107
347
  jsonwebtoken_1.default.verify(raw, getKey, verifyOptions, (err, user) => {
108
348
  if (err) {
109
349
  logger.error('jwt.verify ', JSON.stringify(err));
@@ -113,6 +353,14 @@ const verifyToken = async (raw, config) => {
113
353
  resolve(user);
114
354
  });
115
355
  });
356
+ if (authConfig.validateIssuer) {
357
+ validateIssuer(verifiedPayload.iss, authConfig);
358
+ }
359
+ validateTenantBinding(verifiedPayload.iss, verifiedPayload.tid);
360
+ return {
361
+ payload: verifiedPayload,
362
+ audience: authConfig.clientId
363
+ };
116
364
  };
117
365
  /**
118
366
  * Determines whether an `Authorization` header value is present (non-empty).
@@ -195,9 +443,11 @@ const authorizeJWT = (authConfig) => {
195
443
  const token = extractBearerToken(req.headers.authorization);
196
444
  if (token) {
197
445
  try {
198
- const user = await verifyToken(token, authConfig);
199
- logger.debug('token verified for ', user);
200
- req.user = user;
446
+ const verifiedToken = await verifyToken(token, authConfig);
447
+ logger.debug('token verified for ', verifiedToken.payload);
448
+ req.user = verifiedToken.payload;
449
+ const authorizedRequest = req;
450
+ authorizedRequest[authorizedAudience] = verifiedToken.audience;
201
451
  }
202
452
  catch (err) {
203
453
  failed = true;
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-middleware.js","sourceRoot":"","sources":["../../../src/auth/jwt-middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwt-middleware.js","sourceRoot":"","sources":["../../../src/auth/jwt-middleware.ts"],"names":[],"mappings":"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"}
@@ -65,4 +65,12 @@ export interface MsalConnectionSettings extends ConnectionSettingsBase {
65
65
  * The federated client ID for the authentication configuration, used for workload identity federation scenarios.
66
66
  */
67
67
  federatedClientId?: string;
68
+ /**
69
+ * Maximum number of retries for an MSAL HTTP request that returns status 408.
70
+ *
71
+ * @remarks
72
+ * The initial request is not included in this count. Set to `0` to disable retries.
73
+ * Defaults to `2`.
74
+ */
75
+ msalRetryCount?: number;
68
76
  }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { INetworkModule, NetworkRequestOptions, NetworkResponse } from '@azure/msal-node';
6
+ /**
7
+ * The default number of retries made for an MSAL HTTP request.
8
+ */
9
+ export declare const DEFAULT_MSAL_RETRY_COUNT = 2;
10
+ /**
11
+ * Converts a configured MSAL retry count to its effective runtime value.
12
+ */
13
+ export declare function normalizeMsalRetryCount(retryCount: number | undefined): number;
14
+ /**
15
+ * MSAL network client that retries responses with HTTP status 408 (Request Timeout).
16
+ *
17
+ * @remarks
18
+ * `maxRetryCount` is the number of retries after the initial request. Responses with
19
+ * any other status are returned immediately and retries have no additional delay.
20
+ */
21
+ export declare class MsalHttpRetryHandlerHelper implements INetworkModule {
22
+ private readonly networkClient;
23
+ private readonly maxRetryCount;
24
+ constructor(networkClient?: INetworkModule, maxRetryCount?: number);
25
+ /**
26
+ * Sends an HTTP GET request, retrying only Request Timeout responses.
27
+ */
28
+ sendGetRequestAsync<T>(url: string, options?: NetworkRequestOptions, timeout?: number): Promise<NetworkResponse<T>>;
29
+ /**
30
+ * Sends an HTTP POST request, retrying only Request Timeout responses.
31
+ */
32
+ sendPostRequestAsync<T>(url: string, options?: NetworkRequestOptions): Promise<NetworkResponse<T>>;
33
+ private sendWithRetries;
34
+ }
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MsalHttpRetryHandlerHelper = exports.DEFAULT_MSAL_RETRY_COUNT = void 0;
8
+ exports.normalizeMsalRetryCount = normalizeMsalRetryCount;
9
+ const agents_activity_1 = require("@microsoft/agents-activity");
10
+ const agents_telemetry_1 = require("@microsoft/agents-telemetry");
11
+ const errorHelper_1 = require("../../errorHelper");
12
+ const logger = (0, agents_telemetry_1.debug)('agents:msal');
13
+ const requestTimeoutStatus = 408;
14
+ /**
15
+ * The default number of retries made for an MSAL HTTP request.
16
+ */
17
+ exports.DEFAULT_MSAL_RETRY_COUNT = 2;
18
+ /**
19
+ * Converts a configured MSAL retry count to its effective runtime value.
20
+ */
21
+ function normalizeMsalRetryCount(retryCount) {
22
+ if (!Number.isFinite(retryCount)) {
23
+ return exports.DEFAULT_MSAL_RETRY_COUNT;
24
+ }
25
+ return Math.max(0, Math.floor(retryCount));
26
+ }
27
+ /**
28
+ * MSAL network client that retries responses with HTTP status 408 (Request Timeout).
29
+ *
30
+ * @remarks
31
+ * `maxRetryCount` is the number of retries after the initial request. Responses with
32
+ * any other status are returned immediately and retries have no additional delay.
33
+ */
34
+ class MsalHttpRetryHandlerHelper {
35
+ constructor(networkClient = new MsalHttpClient(), maxRetryCount = exports.DEFAULT_MSAL_RETRY_COUNT) {
36
+ this.networkClient = networkClient;
37
+ this.maxRetryCount = normalizeMsalRetryCount(maxRetryCount);
38
+ }
39
+ /**
40
+ * Sends an HTTP GET request, retrying only Request Timeout responses.
41
+ */
42
+ async sendGetRequestAsync(url, options, timeout) {
43
+ return this.sendWithRetries(() => this.networkClient.sendGetRequestAsync(url, options, timeout));
44
+ }
45
+ /**
46
+ * Sends an HTTP POST request, retrying only Request Timeout responses.
47
+ */
48
+ async sendPostRequestAsync(url, options) {
49
+ return this.sendWithRetries(() => this.networkClient.sendPostRequestAsync(url, options));
50
+ }
51
+ async sendWithRetries(send) {
52
+ let response = await send();
53
+ let attempt;
54
+ for (attempt = 0; response.status === requestTimeoutStatus && attempt < this.maxRetryCount; attempt++) {
55
+ logger.debug('MSAL retry on request timeout (retry %d/%d)', attempt + 1, this.maxRetryCount);
56
+ response = await send();
57
+ }
58
+ logger.debug('MSAL request completed with status %d after %d attempt(s)', response.status, attempt + 1);
59
+ return response;
60
+ }
61
+ }
62
+ exports.MsalHttpRetryHandlerHelper = MsalHttpRetryHandlerHelper;
63
+ /**
64
+ * Default MSAL-compatible network implementation. MSAL Node does not export its
65
+ * built-in HTTP client, so the retry handler uses the same native fetch contract.
66
+ */
67
+ class MsalHttpClient {
68
+ async sendGetRequestAsync(url, options, timeout) {
69
+ return this.sendRequest(url, 'GET', options, timeout);
70
+ }
71
+ async sendPostRequestAsync(url, options) {
72
+ return this.sendRequest(url, 'POST', options);
73
+ }
74
+ async sendRequest(url, method, options, timeout) {
75
+ var _a;
76
+ const controller = new AbortController();
77
+ const timeoutId = timeout
78
+ ? setTimeout(() => controller.abort(), timeout)
79
+ : undefined;
80
+ let response;
81
+ try {
82
+ response = await fetch(url, {
83
+ method,
84
+ headers: options === null || options === void 0 ? void 0 : options.headers,
85
+ body: method === 'POST' ? options === null || options === void 0 ? void 0 : options.body : undefined,
86
+ signal: controller.signal
87
+ });
88
+ }
89
+ catch (error) {
90
+ const innerException = error instanceof Error ? error : undefined;
91
+ if ((innerException === null || innerException === void 0 ? void 0 : innerException.name) === 'AbortError') {
92
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.TokenRequestTimeout, innerException, { timeoutMs: String(timeout) });
93
+ }
94
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.MsalHttpRequestFailed, innerException, {
95
+ message: (_a = innerException === null || innerException === void 0 ? void 0 : innerException.message) !== null && _a !== void 0 ? _a : 'unknown'
96
+ });
97
+ }
98
+ finally {
99
+ if (timeoutId) {
100
+ clearTimeout(timeoutId);
101
+ }
102
+ }
103
+ const headers = {};
104
+ response.headers.forEach((value, key) => {
105
+ headers[key] = value;
106
+ });
107
+ return {
108
+ headers,
109
+ body: await this.parseBody(response),
110
+ status: response.status
111
+ };
112
+ }
113
+ async parseBody(response) {
114
+ const text = await response.text();
115
+ try {
116
+ return JSON.parse(text);
117
+ }
118
+ catch (error) {
119
+ if (response.status === requestTimeoutStatus) {
120
+ return {};
121
+ }
122
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.MsalResponseUnparsable, error instanceof Error ? error : undefined);
123
+ }
124
+ }
125
+ }
126
+ //# sourceMappingURL=msalHttpRetryHandlerHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msalHttpRetryHandlerHelper.js","sourceRoot":"","sources":["../../../../src/auth/msal/msalHttpRetryHandlerHelper.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,7 @@ export declare class MsalTokenProvider implements AuthProvider {
69
69
  getAgenticUserToken(tenantId: string, agentAppInstanceId: string, agenticUserId: string, scopes: string[]): Promise<string>;
70
70
  getAgenticApplicationToken(tenantId: string, agentAppInstanceId: string): Promise<string>;
71
71
  private readonly sysOptions;
72
+ private getSystemOptions;
72
73
  /**
73
74
  * Generates the client assertion using the provided certificate.
74
75
  * @param authConfig The authentication configuration.