@microsoft/agents-hosting 1.6.0-beta.9.gce9d8facd2 → 1.7.0-beta.1.g8bcd4f11a7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +4 -9
- package/dist/src/agent-client/agentClient.js +2 -2
- package/dist/src/agent-client/agentClient.js.map +1 -1
- package/dist/src/agent-client/agentResponseHandler.js +2 -2
- package/dist/src/agent-client/agentResponseHandler.js.map +1 -1
- package/dist/src/app/agentApplication.js +28 -2
- package/dist/src/app/agentApplication.js.map +1 -1
- package/dist/src/app/agentApplicationOptions.d.ts +10 -0
- package/dist/src/app/attachmentDownloader.js +5 -10
- package/dist/src/app/attachmentDownloader.js.map +1 -1
- package/dist/src/app/auth/authorizationManager.d.ts +4 -0
- package/dist/src/app/auth/authorizationManager.js +94 -67
- package/dist/src/app/auth/authorizationManager.js.map +1 -1
- package/dist/src/app/auth/handlers/azureBotAuthorization.js +2 -2
- package/dist/src/app/auth/handlers/azureBotAuthorization.js.map +1 -1
- package/dist/src/app/proactive/createConversationOptionsBuilder.js +10 -6
- package/dist/src/app/proactive/createConversationOptionsBuilder.js.map +1 -1
- package/dist/src/app/proactive/proactive.d.ts +1 -0
- package/dist/src/app/proactive/proactive.js +30 -15
- package/dist/src/app/proactive/proactive.js.map +1 -1
- package/dist/src/app/streaming/streamingResponse.d.ts +11 -0
- package/dist/src/app/streaming/streamingResponse.js +21 -0
- package/dist/src/app/streaming/streamingResponse.js.map +1 -1
- package/dist/src/app/teamsAttachmentDownloader.js +6 -14
- package/dist/src/app/teamsAttachmentDownloader.js.map +1 -1
- package/dist/src/auth/MemoryCache.d.ts +2 -1
- package/dist/src/auth/MemoryCache.js +7 -1
- package/dist/src/auth/MemoryCache.js.map +1 -1
- package/dist/src/auth/authConfiguration.d.ts +2 -143
- package/dist/src/auth/authConfiguration.js +336 -257
- package/dist/src/auth/authConfiguration.js.map +1 -1
- package/dist/src/auth/authConstants.d.ts +7 -7
- package/dist/src/auth/authConstants.js.map +1 -1
- package/dist/src/auth/connectionManager.d.ts +92 -0
- package/dist/src/auth/{msalConnectionManager.js → connectionManager.js} +48 -33
- package/dist/src/auth/connectionManager.js.map +1 -0
- package/dist/src/auth/index.d.ts +5 -3
- package/dist/src/auth/index.js +5 -3
- package/dist/src/auth/index.js.map +1 -1
- package/dist/src/auth/jwt-middleware.d.ts +6 -0
- package/dist/src/auth/jwt-middleware.js +34 -2
- package/dist/src/auth/jwt-middleware.js.map +1 -1
- package/dist/src/auth/msal/msalConnectionManager.d.ts +17 -0
- package/dist/src/auth/msal/msalConnectionManager.js +50 -0
- package/dist/src/auth/msal/msalConnectionManager.js.map +1 -0
- package/dist/src/auth/msal/msalConnectionSettings.d.ts +68 -0
- package/dist/src/auth/msal/msalConnectionSettings.js +7 -0
- package/dist/src/auth/msal/msalConnectionSettings.js.map +1 -0
- package/dist/src/auth/{msalTokenCredential.d.ts → msal/msalTokenCredential.d.ts} +1 -1
- package/dist/src/auth/{msalTokenCredential.js → msal/msalTokenCredential.js} +2 -2
- package/dist/src/auth/msal/msalTokenCredential.js.map +1 -0
- package/dist/src/auth/{msalTokenProvider.d.ts → msal/msalTokenProvider.d.ts} +30 -3
- package/dist/src/auth/msal/msalTokenProvider.js +733 -0
- package/dist/src/auth/msal/msalTokenProvider.js.map +1 -0
- package/dist/src/auth/settings.d.ts +336 -0
- package/dist/src/auth/settings.js +202 -0
- package/dist/src/auth/settings.js.map +1 -0
- package/dist/src/auth/sidecar/sidecarAuthProvider.d.ts +74 -0
- package/dist/src/auth/sidecar/sidecarAuthProvider.js +181 -0
- package/dist/src/auth/sidecar/sidecarAuthProvider.js.map +1 -0
- package/dist/src/auth/sidecar/sidecarConnectionSettings.d.ts +65 -0
- package/dist/src/auth/sidecar/sidecarConnectionSettings.js +7 -0
- package/dist/src/auth/sidecar/sidecarConnectionSettings.js.map +1 -0
- package/dist/src/auth/sidecar/sidecarHttpClient.d.ts +95 -0
- package/dist/src/auth/sidecar/sidecarHttpClient.js +406 -0
- package/dist/src/auth/sidecar/sidecarHttpClient.js.map +1 -0
- package/dist/src/auth/sidecar/sidecarModels.d.ts +110 -0
- package/dist/src/auth/sidecar/sidecarModels.js +48 -0
- package/dist/src/auth/sidecar/sidecarModels.js.map +1 -0
- package/dist/src/auth/sidecar/sidecarTokenExpiry.d.ts +13 -0
- package/dist/src/auth/sidecar/sidecarTokenExpiry.js +39 -0
- package/dist/src/auth/sidecar/sidecarTokenExpiry.js.map +1 -0
- package/dist/src/cloudAdapter.d.ts +58 -1
- package/dist/src/cloudAdapter.js +233 -53
- package/dist/src/cloudAdapter.js.map +1 -1
- package/dist/src/connector-client/connectorClient.d.ts +12 -8
- package/dist/src/connector-client/connectorClient.js +99 -82
- package/dist/src/connector-client/connectorClient.js.map +1 -1
- package/dist/src/errorHelper.js +181 -7
- package/dist/src/errorHelper.js.map +1 -1
- package/dist/src/getProductInfo.d.ts +23 -0
- package/dist/src/getProductInfo.js +71 -1
- package/dist/src/getProductInfo.js.map +1 -1
- package/dist/src/headerPropagation.d.ts +17 -2
- package/dist/src/headerPropagation.js +46 -24
- package/dist/src/headerPropagation.js.map +1 -1
- package/dist/src/httpClient.d.ts +60 -0
- package/dist/src/httpClient.js +173 -0
- package/dist/src/httpClient.js.map +1 -0
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.js +8 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/oauth/userTokenClient.d.ts +17 -4
- package/dist/src/oauth/userTokenClient.js +119 -80
- package/dist/src/oauth/userTokenClient.js.map +1 -1
- package/dist/src/observability/traces.d.ts +11 -4
- package/dist/src/observability/traces.js +39 -7
- package/dist/src/observability/traces.js.map +1 -1
- package/dist/src/utils/env.d.ts +50 -0
- package/dist/src/utils/env.js +113 -0
- package/dist/src/utils/env.js.map +1 -0
- package/dist/src/utils.d.ts +10 -0
- package/dist/src/utils.js +18 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +4 -9
- package/src/agent-client/agentClient.ts +2 -2
- package/src/agent-client/agentResponseHandler.ts +2 -2
- package/src/app/agentApplication.ts +30 -3
- package/src/app/agentApplicationOptions.ts +11 -0
- package/src/app/attachmentDownloader.ts +6 -8
- package/src/app/auth/authorizationManager.ts +84 -41
- package/src/app/auth/handlers/azureBotAuthorization.ts +2 -2
- package/src/app/proactive/createConversationOptionsBuilder.ts +8 -4
- package/src/app/proactive/proactive.ts +39 -23
- package/src/app/streaming/streamingResponse.ts +24 -1
- package/src/app/teamsAttachmentDownloader.ts +7 -11
- package/src/auth/MemoryCache.ts +7 -1
- package/src/auth/authConfiguration.ts +350 -356
- package/src/auth/authConstants.ts +7 -7
- package/src/auth/{msalConnectionManager.ts → connectionManager.ts} +65 -44
- package/src/auth/index.ts +5 -3
- package/src/auth/jwt-middleware.ts +32 -2
- package/src/auth/msal/msalConnectionManager.ts +55 -0
- package/src/auth/msal/msalConnectionSettings.ts +79 -0
- package/src/auth/{msalTokenCredential.ts → msal/msalTokenCredential.ts} +2 -1
- package/src/auth/msal/msalTokenProvider.ts +881 -0
- package/src/auth/settings.ts +378 -0
- package/src/auth/sidecar/sidecarAuthProvider.ts +234 -0
- package/src/auth/sidecar/sidecarConnectionSettings.ts +72 -0
- package/src/auth/sidecar/sidecarHttpClient.ts +443 -0
- package/src/auth/sidecar/sidecarModels.ts +153 -0
- package/src/auth/sidecar/sidecarTokenExpiry.ts +35 -0
- package/src/cloudAdapter.ts +292 -13
- package/src/connector-client/connectorClient.ts +116 -94
- package/src/errorHelper.ts +206 -7
- package/src/getProductInfo.ts +79 -1
- package/src/headerPropagation.ts +55 -23
- package/src/httpClient.ts +223 -0
- package/src/index.ts +6 -2
- package/src/oauth/userTokenClient.ts +137 -84
- package/src/observability/traces.ts +39 -8
- package/src/utils/env.ts +105 -0
- package/src/utils.ts +14 -0
- package/dist/src/auth/msalConnectionManager.d.ts +0 -64
- package/dist/src/auth/msalConnectionManager.js.map +0 -1
- package/dist/src/auth/msalTokenCredential.js.map +0 -1
- package/dist/src/auth/msalTokenProvider.js +0 -485
- package/dist/src/auth/msalTokenProvider.js.map +0 -1
- package/src/auth/msalTokenProvider.ts +0 -562
|
@@ -1,485 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.MsalTokenProvider = void 0;
|
|
11
|
-
const msal_node_1 = require("@azure/msal-node");
|
|
12
|
-
const axios_1 = __importDefault(require("axios"));
|
|
13
|
-
const authConfiguration_1 = require("./authConfiguration");
|
|
14
|
-
const agents_telemetry_1 = require("@microsoft/agents-telemetry");
|
|
15
|
-
const uuid_1 = require("uuid");
|
|
16
|
-
const MemoryCache_1 = require("./MemoryCache");
|
|
17
|
-
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
18
|
-
const fs_1 = __importDefault(require("fs"));
|
|
19
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
20
|
-
const observability_1 = require("../observability");
|
|
21
|
-
const audience = 'api://AzureADTokenExchange';
|
|
22
|
-
const logger = (0, agents_telemetry_1.debug)('agents:msal');
|
|
23
|
-
/**
|
|
24
|
-
* Provides tokens using MSAL.
|
|
25
|
-
*/
|
|
26
|
-
class MsalTokenProvider {
|
|
27
|
-
constructor(connectionSettings) {
|
|
28
|
-
this.sysOptions = {
|
|
29
|
-
loggerOptions: {
|
|
30
|
-
logLevel: msal_node_1.LogLevel.Trace,
|
|
31
|
-
loggerCallback: (level, message, containsPii) => {
|
|
32
|
-
if (containsPii) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
switch (level) {
|
|
36
|
-
case msal_node_1.LogLevel.Error:
|
|
37
|
-
logger.error(message);
|
|
38
|
-
return;
|
|
39
|
-
case msal_node_1.LogLevel.Info:
|
|
40
|
-
logger.debug(message);
|
|
41
|
-
return;
|
|
42
|
-
case msal_node_1.LogLevel.Warning:
|
|
43
|
-
if (!message.includes('Warning - No client info in response')) {
|
|
44
|
-
logger.warn(message);
|
|
45
|
-
}
|
|
46
|
-
return;
|
|
47
|
-
case msal_node_1.LogLevel.Verbose:
|
|
48
|
-
logger.debug(message);
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
piiLoggingEnabled: false
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
this._agenticTokenCache = new MemoryCache_1.MemoryCache();
|
|
55
|
-
this.connectionSettings = connectionSettings;
|
|
56
|
-
}
|
|
57
|
-
async getAccessToken(authConfigOrScope, scope) {
|
|
58
|
-
return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.getAccessToken, async ({ record }) => {
|
|
59
|
-
let authConfig;
|
|
60
|
-
let actualScope;
|
|
61
|
-
if (typeof authConfigOrScope === 'string') {
|
|
62
|
-
// Called as getAccessToken(scope)
|
|
63
|
-
if (!this.connectionSettings) {
|
|
64
|
-
throw new Error('Connection settings must be provided to constructor when calling getAccessToken(scope)');
|
|
65
|
-
}
|
|
66
|
-
authConfig = this.connectionSettings;
|
|
67
|
-
actualScope = authConfigOrScope;
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
// Called as getAccessToken(authConfig, scope)
|
|
71
|
-
authConfig = authConfigOrScope;
|
|
72
|
-
actualScope = scope;
|
|
73
|
-
}
|
|
74
|
-
record({ scope: actualScope });
|
|
75
|
-
if (!authConfig.clientId && process.env.NODE_ENV !== 'production') {
|
|
76
|
-
record({ method: 'unknown' });
|
|
77
|
-
return '';
|
|
78
|
-
}
|
|
79
|
-
let token;
|
|
80
|
-
if (authConfig.WIDAssertionFile !== undefined) {
|
|
81
|
-
record({ method: 'wid' });
|
|
82
|
-
logger.debug('getAccessToken via WID clientId=%s scope=%s', authConfig.clientId, actualScope);
|
|
83
|
-
token = await this.acquireAccessTokenViaWID(authConfig, actualScope);
|
|
84
|
-
}
|
|
85
|
-
else if (authConfig.FICClientId !== undefined) {
|
|
86
|
-
record({ method: 'fic' });
|
|
87
|
-
logger.debug('getAccessToken via FIC clientId=%s scope=%s', authConfig.clientId, actualScope);
|
|
88
|
-
token = await this.acquireAccessTokenViaFIC(authConfig, actualScope);
|
|
89
|
-
}
|
|
90
|
-
else if (authConfig.clientSecret !== undefined) {
|
|
91
|
-
record({ method: 'secret' });
|
|
92
|
-
logger.debug('getAccessToken via secret clientId=%s scope=%s', authConfig.clientId, actualScope);
|
|
93
|
-
token = await this.acquireAccessTokenViaSecret(authConfig, actualScope);
|
|
94
|
-
}
|
|
95
|
-
else if (authConfig.certPemFile !== undefined &&
|
|
96
|
-
authConfig.certKeyFile !== undefined) {
|
|
97
|
-
record({ method: 'certificate' });
|
|
98
|
-
logger.debug('getAccessToken via certificate clientId=%s scope=%s', authConfig.clientId, actualScope);
|
|
99
|
-
token = await this.acquireTokenWithCertificate(authConfig, actualScope);
|
|
100
|
-
}
|
|
101
|
-
else if (authConfig.clientSecret === undefined &&
|
|
102
|
-
authConfig.certPemFile === undefined &&
|
|
103
|
-
authConfig.certKeyFile === undefined) {
|
|
104
|
-
record({ method: 'managed_identity' });
|
|
105
|
-
logger.debug('getAccessToken via managed identity clientId=%s scope=%s', authConfig.clientId, actualScope);
|
|
106
|
-
token = await this.acquireTokenWithUserAssignedIdentity(authConfig, actualScope);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
throw new Error('Invalid authConfig. ');
|
|
110
|
-
}
|
|
111
|
-
if (token === undefined) {
|
|
112
|
-
throw new Error('Failed to acquire token');
|
|
113
|
-
}
|
|
114
|
-
return token;
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
async acquireTokenOnBehalfOf(authConfigOrScopes, scopesOrOboAssertion, oboAssertion) {
|
|
118
|
-
return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.acquireTokenOnBehalfOf, async ({ record }) => {
|
|
119
|
-
let authConfig;
|
|
120
|
-
let actualScopes;
|
|
121
|
-
let actualOboAssertion;
|
|
122
|
-
if (Array.isArray(authConfigOrScopes)) {
|
|
123
|
-
// Called as acquireTokenOnBehalfOf(scopes, oboAssertion)
|
|
124
|
-
if (!this.connectionSettings) {
|
|
125
|
-
throw new Error('Connection settings must be provided to constructor when calling acquireTokenOnBehalfOf(scopes, oboAssertion)');
|
|
126
|
-
}
|
|
127
|
-
authConfig = this.connectionSettings;
|
|
128
|
-
actualScopes = authConfigOrScopes;
|
|
129
|
-
actualOboAssertion = scopesOrOboAssertion;
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
// Called as acquireTokenOnBehalfOf(authConfig, scopes, oboAssertion)
|
|
133
|
-
authConfig = authConfigOrScopes;
|
|
134
|
-
actualScopes = scopesOrOboAssertion;
|
|
135
|
-
actualOboAssertion = oboAssertion;
|
|
136
|
-
}
|
|
137
|
-
record({ scopes: actualScopes });
|
|
138
|
-
logger.debug('acquireTokenOnBehalfOf clientId=%s scopes=%o', authConfig.clientId, actualScopes);
|
|
139
|
-
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
140
|
-
auth: {
|
|
141
|
-
clientId: authConfig.clientId,
|
|
142
|
-
authority: `${authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
|
|
143
|
-
clientSecret: authConfig.clientSecret
|
|
144
|
-
},
|
|
145
|
-
system: this.sysOptions
|
|
146
|
-
});
|
|
147
|
-
const token = await cca.acquireTokenOnBehalfOf({
|
|
148
|
-
oboAssertion: actualOboAssertion,
|
|
149
|
-
scopes: actualScopes
|
|
150
|
-
});
|
|
151
|
-
if (!(token === null || token === void 0 ? void 0 : token.accessToken)) {
|
|
152
|
-
throw new Error('Failed to acquire token on behalf of user');
|
|
153
|
-
}
|
|
154
|
-
return token.accessToken;
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
async getAgenticInstanceToken(tenantId, agentAppInstanceId) {
|
|
158
|
-
return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.getAgenticInstanceToken, async ({ record }) => {
|
|
159
|
-
var _a;
|
|
160
|
-
logger.debug('getAgenticInstanceToken tenantId=%s agentAppInstanceId=%s', tenantId, agentAppInstanceId);
|
|
161
|
-
record({ agenticInstanceId: agentAppInstanceId });
|
|
162
|
-
if (!this.connectionSettings) {
|
|
163
|
-
throw new Error('Connection settings must be provided when calling getAgenticInstanceToken');
|
|
164
|
-
}
|
|
165
|
-
const appToken = await this.getAgenticApplicationToken(tenantId, agentAppInstanceId);
|
|
166
|
-
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
167
|
-
auth: {
|
|
168
|
-
clientId: agentAppInstanceId,
|
|
169
|
-
clientAssertion: appToken,
|
|
170
|
-
authority: this.resolveAuthority(tenantId),
|
|
171
|
-
},
|
|
172
|
-
system: this.sysOptions
|
|
173
|
-
});
|
|
174
|
-
const token = await cca.acquireTokenByClientCredential({
|
|
175
|
-
scopes: ['api://AzureAdTokenExchange/.default'],
|
|
176
|
-
correlationId: (0, uuid_1.v4)(),
|
|
177
|
-
azureRegion: (_a = this.connectionSettings) === null || _a === void 0 ? void 0 : _a.azureRegion
|
|
178
|
-
});
|
|
179
|
-
if (!(token === null || token === void 0 ? void 0 : token.accessToken)) {
|
|
180
|
-
throw new Error(`Failed to acquire instance token for agent instance: ${agentAppInstanceId}`);
|
|
181
|
-
}
|
|
182
|
-
return token.accessToken;
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* This method can optionally accept a tenant ID that overrides the tenant ID in the connection settings.
|
|
187
|
-
* The passed tenantId is always preferred over the configured tenantId when present.
|
|
188
|
-
* @param tenantId
|
|
189
|
-
* @returns
|
|
190
|
-
*/
|
|
191
|
-
resolveAuthority(tenantId) {
|
|
192
|
-
var _a;
|
|
193
|
-
const { authority: configuredAuth, tenantId: configuredTenantId } = (_a = this.connectionSettings) !== null && _a !== void 0 ? _a : {};
|
|
194
|
-
if (!tenantId) {
|
|
195
|
-
// No agentic tenant override — delegate to shared utility
|
|
196
|
-
return (0, authConfiguration_1.resolveAuthority)(configuredAuth, configuredTenantId);
|
|
197
|
-
}
|
|
198
|
-
// Agentic override: build a clean base using the override tenant, then replace any
|
|
199
|
-
// /common or GUID placeholder left in the authority (e.g. from a multi-tenant config)
|
|
200
|
-
const base = (0, authConfiguration_1.resolveAuthority)(configuredAuth, tenantId);
|
|
201
|
-
const guidPattern = /\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
202
|
-
if (base.endsWith('/common') || guidPattern.test(base)) {
|
|
203
|
-
return base.replace(/\/(?:common|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})(?=\/|$)/, `/${tenantId}`);
|
|
204
|
-
}
|
|
205
|
-
return base;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Does a direct HTTP call to acquire a token for agentic scenarios - do not use this directly!
|
|
209
|
-
* This method will be removed once MSAL is updated with the necessary features.
|
|
210
|
-
* (This is required in order to pass additional parameters into the auth call)
|
|
211
|
-
* @param tenantId
|
|
212
|
-
* @param clientId
|
|
213
|
-
* @param clientAssertion
|
|
214
|
-
* @param scopes
|
|
215
|
-
* @param tokenBodyParameters
|
|
216
|
-
* @returns
|
|
217
|
-
*/
|
|
218
|
-
async acquireTokenForAgenticScenarios(tenantId, clientId, clientAssertion, scopes, tokenBodyParameters) {
|
|
219
|
-
if (!this.connectionSettings) {
|
|
220
|
-
throw new Error('Connection settings must be provided when calling getAgenticInstanceToken');
|
|
221
|
-
}
|
|
222
|
-
logger.debug('acquireTokenForAgenticScenarios clientId=%s tenantId=%s scopes=%o grant_type=%s', clientId, tenantId, scopes, tokenBodyParameters.grant_type);
|
|
223
|
-
// Check cache first
|
|
224
|
-
const cacheKey = `${clientId}/${Object.keys(tokenBodyParameters).map(key => key !== 'user_federated_identity_credential' ? `${key}=${tokenBodyParameters[key]}` : '').join('&')}/${scopes.join(';')}`;
|
|
225
|
-
if (this._agenticTokenCache.get(cacheKey)) {
|
|
226
|
-
return this._agenticTokenCache.get(cacheKey);
|
|
227
|
-
}
|
|
228
|
-
const url = `${this.resolveAuthority(tenantId)}/oauth2/v2.0/token`;
|
|
229
|
-
const data = {
|
|
230
|
-
client_id: clientId,
|
|
231
|
-
scope: scopes.join(' '),
|
|
232
|
-
...tokenBodyParameters
|
|
233
|
-
};
|
|
234
|
-
if (clientAssertion) {
|
|
235
|
-
data.client_assertion_type = 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer';
|
|
236
|
-
data.client_assertion = clientAssertion;
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
data.client_secret = this.connectionSettings.clientSecret;
|
|
240
|
-
}
|
|
241
|
-
if (data.grant_type !== 'user_fic') {
|
|
242
|
-
data.client_info = '2';
|
|
243
|
-
}
|
|
244
|
-
const token = await axios_1.default.post(url, data, {
|
|
245
|
-
headers: {
|
|
246
|
-
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
|
|
247
|
-
}
|
|
248
|
-
}).catch((error) => {
|
|
249
|
-
logger.error('Error acquiring token: ', error.toJSON());
|
|
250
|
-
throw error;
|
|
251
|
-
});
|
|
252
|
-
// capture token, expire local cache 5 minutes early
|
|
253
|
-
this._agenticTokenCache.set(cacheKey, token.data.access_token, token.data.expires_in - 300);
|
|
254
|
-
return token.data.access_token;
|
|
255
|
-
}
|
|
256
|
-
async getAgenticUserToken(tenantId, agentAppInstanceId, agenticUserId, scopes) {
|
|
257
|
-
return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.getAgenticUserToken, async ({ record }) => {
|
|
258
|
-
logger.debug('getAgenticUserToken tenantId=%s agentAppInstanceId=%s scopes=%o', tenantId, agentAppInstanceId, scopes);
|
|
259
|
-
record({ agenticInstanceId: agentAppInstanceId, agenticUserId, scopes });
|
|
260
|
-
const agentToken = await this.getAgenticApplicationToken(tenantId, agentAppInstanceId);
|
|
261
|
-
const instanceToken = await this.getAgenticInstanceToken(tenantId, agentAppInstanceId);
|
|
262
|
-
const token = await this.acquireTokenForAgenticScenarios(tenantId, agentAppInstanceId, agentToken, scopes, {
|
|
263
|
-
user_id: agenticUserId,
|
|
264
|
-
user_federated_identity_credential: instanceToken,
|
|
265
|
-
grant_type: 'user_fic',
|
|
266
|
-
});
|
|
267
|
-
if (!token) {
|
|
268
|
-
throw new Error(`Failed to acquire instance token for user token: ${agentAppInstanceId}`);
|
|
269
|
-
}
|
|
270
|
-
return token;
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
async getAgenticApplicationToken(tenantId, agentAppInstanceId) {
|
|
274
|
-
var _a;
|
|
275
|
-
if (!((_a = this.connectionSettings) === null || _a === void 0 ? void 0 : _a.clientId)) {
|
|
276
|
-
throw new Error('Connection settings must be provided when calling getAgenticApplicationToken');
|
|
277
|
-
}
|
|
278
|
-
logger.debug('getAgenticApplicationToken clientId=%s tenantId=%s agentAppInstanceId=%s', this.connectionSettings.clientId, tenantId, agentAppInstanceId);
|
|
279
|
-
let clientAssertion;
|
|
280
|
-
if (this.connectionSettings.WIDAssertionFile !== undefined) {
|
|
281
|
-
clientAssertion = fs_1.default.readFileSync(this.connectionSettings.WIDAssertionFile, 'utf8');
|
|
282
|
-
}
|
|
283
|
-
else if (this.connectionSettings.FICClientId !== undefined) {
|
|
284
|
-
clientAssertion = await this.fetchExternalToken(this.connectionSettings.FICClientId);
|
|
285
|
-
}
|
|
286
|
-
else if (this.connectionSettings.certPemFile !== undefined &&
|
|
287
|
-
this.connectionSettings.certKeyFile !== undefined) {
|
|
288
|
-
clientAssertion = this.getAssertionFromCert(this.connectionSettings);
|
|
289
|
-
}
|
|
290
|
-
const token = await this.acquireTokenForAgenticScenarios(tenantId, this.connectionSettings.clientId, clientAssertion, ['api://AzureAdTokenExchange/.default'], {
|
|
291
|
-
grant_type: 'client_credentials',
|
|
292
|
-
fmi_path: agentAppInstanceId,
|
|
293
|
-
});
|
|
294
|
-
if (!token) {
|
|
295
|
-
throw new Error(`Failed to acquire token for agent instance: ${agentAppInstanceId}`);
|
|
296
|
-
}
|
|
297
|
-
return token;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Generates the client assertion using the provided certificate.
|
|
301
|
-
* @param authConfig The authentication configuration.
|
|
302
|
-
* @returns The client assertion.
|
|
303
|
-
*/
|
|
304
|
-
getAssertionFromCert(authConfig) {
|
|
305
|
-
const base64url = (buf) => buf.toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
|
306
|
-
const privateKeyPem = fs_1.default.readFileSync(authConfig.certKeyFile);
|
|
307
|
-
const pemFile = fs_1.default.readFileSync(authConfig.certPemFile);
|
|
308
|
-
const pubKeyObject = new crypto_1.default.X509Certificate(pemFile);
|
|
309
|
-
const der = pubKeyObject.raw;
|
|
310
|
-
const x5tS256 = base64url(crypto_1.default.createHash('sha256').update(der).digest());
|
|
311
|
-
let x5c;
|
|
312
|
-
if (authConfig.sendX5C) {
|
|
313
|
-
x5c = pemFile.toString();
|
|
314
|
-
}
|
|
315
|
-
const now = Math.floor(Date.now() / 1000);
|
|
316
|
-
const payload = {
|
|
317
|
-
aud: `${this.resolveAuthority(authConfig.tenantId)}/oauth2/v2.0/token`,
|
|
318
|
-
iss: authConfig.clientId,
|
|
319
|
-
sub: authConfig.clientId,
|
|
320
|
-
jti: (0, uuid_1.v4)(),
|
|
321
|
-
nbf: now,
|
|
322
|
-
iat: now,
|
|
323
|
-
exp: now + 600, // 10 minutes
|
|
324
|
-
};
|
|
325
|
-
return jsonwebtoken_1.default.sign(payload, privateKeyPem, {
|
|
326
|
-
algorithm: 'PS256',
|
|
327
|
-
header: { alg: 'PS256', typ: 'JWT', 'x5t#S256': x5tS256, x5c }
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Acquires a token using a user-assigned identity.
|
|
332
|
-
* @param authConfig The authentication configuration.
|
|
333
|
-
* @param scope The scope for the token.
|
|
334
|
-
* @returns A promise that resolves to the access token.
|
|
335
|
-
*/
|
|
336
|
-
async acquireTokenWithUserAssignedIdentity(authConfig, scope) {
|
|
337
|
-
const mia = new msal_node_1.ManagedIdentityApplication({
|
|
338
|
-
managedIdentityIdParams: {
|
|
339
|
-
userAssignedClientId: authConfig.clientId || ''
|
|
340
|
-
},
|
|
341
|
-
system: this.sysOptions
|
|
342
|
-
});
|
|
343
|
-
const token = await mia.acquireToken({
|
|
344
|
-
resource: scope
|
|
345
|
-
});
|
|
346
|
-
return token === null || token === void 0 ? void 0 : token.accessToken;
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Acquires a token using a certificate.
|
|
350
|
-
* @param authConfig The authentication configuration.
|
|
351
|
-
* @param scope The scope for the token.
|
|
352
|
-
* @returns A promise that resolves to the access token.
|
|
353
|
-
*/
|
|
354
|
-
async acquireTokenWithCertificate(authConfig, scope) {
|
|
355
|
-
const privateKeySource = fs_1.default.readFileSync(authConfig.certKeyFile);
|
|
356
|
-
const privateKeyObject = crypto_1.default.createPrivateKey({
|
|
357
|
-
key: privateKeySource,
|
|
358
|
-
format: 'pem'
|
|
359
|
-
});
|
|
360
|
-
const privateKey = privateKeyObject.export({
|
|
361
|
-
format: 'pem',
|
|
362
|
-
type: 'pkcs8'
|
|
363
|
-
});
|
|
364
|
-
const pemFile = fs_1.default.readFileSync(authConfig.certPemFile);
|
|
365
|
-
const pubKeyObject = new crypto_1.default.X509Certificate(pemFile);
|
|
366
|
-
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
367
|
-
auth: {
|
|
368
|
-
clientId: authConfig.clientId || '',
|
|
369
|
-
authority: `${authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
|
|
370
|
-
clientCertificate: {
|
|
371
|
-
privateKey: privateKey,
|
|
372
|
-
thumbprint: pubKeyObject.fingerprint.replaceAll(':', ''),
|
|
373
|
-
x5c: pemFile.toString()
|
|
374
|
-
}
|
|
375
|
-
},
|
|
376
|
-
system: this.sysOptions
|
|
377
|
-
});
|
|
378
|
-
const token = await cca.acquireTokenByClientCredential({
|
|
379
|
-
scopes: [`${scope}/.default`],
|
|
380
|
-
correlationId: (0, uuid_1.v4)(),
|
|
381
|
-
azureRegion: authConfig.azureRegion
|
|
382
|
-
});
|
|
383
|
-
if (!(token === null || token === void 0 ? void 0 : token.accessToken)) {
|
|
384
|
-
throw new Error('Failed to acquire token using certificate');
|
|
385
|
-
}
|
|
386
|
-
return token.accessToken;
|
|
387
|
-
}
|
|
388
|
-
/**
|
|
389
|
-
* Acquires a token using a client secret.
|
|
390
|
-
* @param authConfig The authentication configuration.
|
|
391
|
-
* @param scope The scope for the token.
|
|
392
|
-
* @returns A promise that resolves to the access token.
|
|
393
|
-
*/
|
|
394
|
-
async acquireAccessTokenViaSecret(authConfig, scope) {
|
|
395
|
-
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
396
|
-
auth: {
|
|
397
|
-
clientId: authConfig.clientId,
|
|
398
|
-
authority: `${authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
|
|
399
|
-
clientSecret: authConfig.clientSecret
|
|
400
|
-
},
|
|
401
|
-
system: this.sysOptions
|
|
402
|
-
});
|
|
403
|
-
const token = await cca.acquireTokenByClientCredential({
|
|
404
|
-
scopes: [`${scope}/.default`],
|
|
405
|
-
correlationId: (0, uuid_1.v4)(),
|
|
406
|
-
azureRegion: authConfig.azureRegion
|
|
407
|
-
});
|
|
408
|
-
if (!(token === null || token === void 0 ? void 0 : token.accessToken)) {
|
|
409
|
-
throw new Error('Failed to acquire token using client secret');
|
|
410
|
-
}
|
|
411
|
-
return token.accessToken;
|
|
412
|
-
}
|
|
413
|
-
/**
|
|
414
|
-
* Acquires a token using a FIC client assertion.
|
|
415
|
-
* @param authConfig The authentication configuration.
|
|
416
|
-
* @param scope The scope for the token.
|
|
417
|
-
* @returns A promise that resolves to the access token.
|
|
418
|
-
*/
|
|
419
|
-
async acquireAccessTokenViaFIC(authConfig, scope) {
|
|
420
|
-
const scopes = [`${scope}/.default`];
|
|
421
|
-
const clientAssertion = await this.fetchExternalToken(authConfig.FICClientId);
|
|
422
|
-
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
423
|
-
auth: {
|
|
424
|
-
clientId: authConfig.clientId,
|
|
425
|
-
authority: `${authConfig.authority}/${authConfig.tenantId}`,
|
|
426
|
-
clientAssertion
|
|
427
|
-
},
|
|
428
|
-
system: this.sysOptions
|
|
429
|
-
});
|
|
430
|
-
const token = await cca.acquireTokenByClientCredential({ scopes, azureRegion: authConfig.azureRegion });
|
|
431
|
-
logger.debug('got token using FIC client assertion');
|
|
432
|
-
if (!(token === null || token === void 0 ? void 0 : token.accessToken)) {
|
|
433
|
-
throw new Error('Failed to acquire token using FIC client assertion');
|
|
434
|
-
}
|
|
435
|
-
return token.accessToken;
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Acquires a token using a Workload Identity client assertion.
|
|
439
|
-
* @param authConfig The authentication configuration.
|
|
440
|
-
* @param scope The scope for the token.
|
|
441
|
-
* @returns A promise that resolves to the access token.
|
|
442
|
-
*/
|
|
443
|
-
async acquireAccessTokenViaWID(authConfig, scope) {
|
|
444
|
-
const scopes = [`${scope}/.default`];
|
|
445
|
-
const clientAssertion = fs_1.default.readFileSync(authConfig.WIDAssertionFile, 'utf8');
|
|
446
|
-
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
447
|
-
auth: {
|
|
448
|
-
clientId: authConfig.clientId,
|
|
449
|
-
authority: `https://login.microsoftonline.com/${authConfig.tenantId}`,
|
|
450
|
-
clientAssertion
|
|
451
|
-
},
|
|
452
|
-
system: this.sysOptions
|
|
453
|
-
});
|
|
454
|
-
const token = await cca.acquireTokenByClientCredential({ scopes, azureRegion: authConfig.azureRegion });
|
|
455
|
-
logger.debug('got token using WID client assertion');
|
|
456
|
-
if (!(token === null || token === void 0 ? void 0 : token.accessToken)) {
|
|
457
|
-
throw new Error('Failed to acquire token using WID client assertion');
|
|
458
|
-
}
|
|
459
|
-
return token.accessToken;
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Fetches an external token.
|
|
463
|
-
* @param FICClientId The FIC client ID.
|
|
464
|
-
* @returns A promise that resolves to the external token.
|
|
465
|
-
*/
|
|
466
|
-
async fetchExternalToken(FICClientId) {
|
|
467
|
-
const managedIdentityClientAssertion = new msal_node_1.ManagedIdentityApplication({
|
|
468
|
-
managedIdentityIdParams: {
|
|
469
|
-
userAssignedClientId: FICClientId
|
|
470
|
-
},
|
|
471
|
-
system: this.sysOptions
|
|
472
|
-
});
|
|
473
|
-
const response = await managedIdentityClientAssertion.acquireToken({
|
|
474
|
-
resource: audience,
|
|
475
|
-
forceRefresh: true
|
|
476
|
-
});
|
|
477
|
-
logger.debug('got token for FIC');
|
|
478
|
-
if (!(response === null || response === void 0 ? void 0 : response.accessToken)) {
|
|
479
|
-
throw new Error('Failed to acquire external token for FIC client assertion');
|
|
480
|
-
}
|
|
481
|
-
return response.accessToken;
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
exports.MsalTokenProvider = MsalTokenProvider;
|
|
485
|
-
//# sourceMappingURL=msalTokenProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"msalTokenProvider.js","sourceRoot":"","sources":["../../../src/auth/msalTokenProvider.ts"],"names":[],"mappings":"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"}
|