@microsoft/agents-hosting 1.6.1 → 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 +3 -3
- 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/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 +1 -1
- package/dist/src/auth/authConfiguration.js +36 -1
- 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} +50 -48
- 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 +32 -1
- 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} +23 -3
- package/dist/src/auth/{msalTokenProvider.js → msal/msalTokenProvider.js} +264 -160
- package/dist/src/auth/msal/msalTokenProvider.js.map +1 -0
- package/dist/src/auth/settings.d.ts +142 -133
- package/dist/src/auth/settings.js +49 -5
- package/dist/src/auth/settings.js.map +1 -1
- 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.js +1 -1
- package/dist/src/cloudAdapter.js.map +1 -1
- package/dist/src/errorHelper.js +96 -0
- package/dist/src/errorHelper.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/oauth/userTokenClient.d.ts +12 -0
- package/dist/src/oauth/userTokenClient.js +28 -8
- package/dist/src/oauth/userTokenClient.js.map +1 -1
- package/package.json +3 -3
- package/src/app/streaming/streamingResponse.ts +24 -1
- package/src/auth/MemoryCache.ts +7 -1
- package/src/auth/authConfiguration.ts +36 -3
- package/src/auth/authConstants.ts +7 -7
- package/src/auth/{msalConnectionManager.ts → connectionManager.ts} +65 -61
- package/src/auth/index.ts +5 -3
- package/src/auth/jwt-middleware.ts +31 -1
- 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/{msalTokenProvider.ts → msal/msalTokenProvider.ts} +337 -156
- package/src/auth/settings.ts +131 -76
- 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 +1 -1
- package/src/errorHelper.ts +110 -0
- package/src/index.ts +1 -1
- package/src/oauth/userTokenClient.ts +43 -9
- 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.map +0 -1
|
@@ -9,16 +9,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.MsalTokenProvider = void 0;
|
|
11
11
|
const msal_node_1 = require("@azure/msal-node");
|
|
12
|
-
const authConfiguration_1 = require("
|
|
12
|
+
const authConfiguration_1 = require("../authConfiguration");
|
|
13
13
|
const agents_telemetry_1 = require("@microsoft/agents-telemetry");
|
|
14
14
|
const crypto_1 = require("crypto");
|
|
15
|
-
const MemoryCache_1 = require("
|
|
15
|
+
const MemoryCache_1 = require("../MemoryCache");
|
|
16
16
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
17
17
|
const fs_1 = __importDefault(require("fs"));
|
|
18
18
|
const crypto_2 = __importDefault(require("crypto"));
|
|
19
|
-
const observability_1 = require("
|
|
19
|
+
const observability_1 = require("../../observability");
|
|
20
20
|
const agents_activity_1 = require("@microsoft/agents-activity");
|
|
21
|
-
const errorHelper_1 = require("
|
|
21
|
+
const errorHelper_1 = require("../../errorHelper");
|
|
22
22
|
const audience = 'api://AzureADTokenExchange';
|
|
23
23
|
const logger = (0, agents_telemetry_1.debug)('agents:msal');
|
|
24
24
|
const agenticTokenRequestTimeoutMs = 30000;
|
|
@@ -59,9 +59,171 @@ class MsalTokenProvider {
|
|
|
59
59
|
piiLoggingEnabled: false
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
|
-
this._agenticTokenCache = new MemoryCache_1.MemoryCache();
|
|
63
62
|
this.connectionSettings = connectionSettings;
|
|
64
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Clears process-wide auth caches.
|
|
66
|
+
*/
|
|
67
|
+
static clearSharedCaches() {
|
|
68
|
+
MsalTokenProvider._accessTokenCache.clear();
|
|
69
|
+
MsalTokenProvider._agenticTokenCache.clear();
|
|
70
|
+
MsalTokenProvider._confidentialClients.clear();
|
|
71
|
+
}
|
|
72
|
+
static cacheKey(...parts) {
|
|
73
|
+
return JSON.stringify(parts.map(part => part !== null && part !== void 0 ? part : ''));
|
|
74
|
+
}
|
|
75
|
+
static digest(value) {
|
|
76
|
+
return value ? crypto_2.default.createHash('sha256').update(value).digest('base64url') : '';
|
|
77
|
+
}
|
|
78
|
+
getOrCreateConfidentialClient(cacheKey, createClient) {
|
|
79
|
+
const existing = MsalTokenProvider._confidentialClients.get(cacheKey);
|
|
80
|
+
if (existing) {
|
|
81
|
+
MsalTokenProvider._confidentialClients.delete(cacheKey);
|
|
82
|
+
MsalTokenProvider._confidentialClients.set(cacheKey, existing);
|
|
83
|
+
return existing;
|
|
84
|
+
}
|
|
85
|
+
const created = createClient();
|
|
86
|
+
MsalTokenProvider._confidentialClients.set(cacheKey, created);
|
|
87
|
+
while (MsalTokenProvider._confidentialClients.size > MsalTokenProvider._maxConfidentialClients) {
|
|
88
|
+
const oldestKey = MsalTokenProvider._confidentialClients.keys().next().value;
|
|
89
|
+
if (oldestKey === undefined) {
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
MsalTokenProvider._confidentialClients.delete(oldestKey);
|
|
93
|
+
}
|
|
94
|
+
return created;
|
|
95
|
+
}
|
|
96
|
+
getFileCacheIdentity(path) {
|
|
97
|
+
if (!path) {
|
|
98
|
+
return '';
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const stat = fs_1.default.statSync(path);
|
|
102
|
+
return `${path}:${stat.size}:${stat.mtimeMs}`;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return path;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
getAccessTokenCacheKey(authConfig, scope) {
|
|
109
|
+
var _a, _b, _c, _d, _e;
|
|
110
|
+
const authType = (0, authConfiguration_1.resolveAuthType)(authConfig);
|
|
111
|
+
let authority = (0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId);
|
|
112
|
+
let credentialIdentity = '';
|
|
113
|
+
switch (authType) {
|
|
114
|
+
case authConfiguration_1.AuthType.ClientSecret:
|
|
115
|
+
credentialIdentity = MsalTokenProvider.digest(authConfig.clientSecret);
|
|
116
|
+
break;
|
|
117
|
+
case authConfiguration_1.AuthType.Certificate:
|
|
118
|
+
case authConfiguration_1.AuthType.CertificateSubjectName:
|
|
119
|
+
credentialIdentity = MsalTokenProvider.cacheKey(this.getFileCacheIdentity(authConfig.certPemFile), this.getFileCacheIdentity(authConfig.certKeyFile), authConfig.sendX5C);
|
|
120
|
+
break;
|
|
121
|
+
case authConfiguration_1.AuthType.WorkloadIdentity:
|
|
122
|
+
authority = `https://login.microsoftonline.com/${authConfig.tenantId}`;
|
|
123
|
+
credentialIdentity = this.getFileCacheIdentity((_b = authConfig.federatedTokenFile) !== null && _b !== void 0 ? _b : authConfig.WIDAssertionFile);
|
|
124
|
+
break;
|
|
125
|
+
case authConfiguration_1.AuthType.FederatedCredentials:
|
|
126
|
+
credentialIdentity = (_d = (_c = authConfig.federatedClientId) !== null && _c !== void 0 ? _c : authConfig.FICClientId) !== null && _d !== void 0 ? _d : '';
|
|
127
|
+
break;
|
|
128
|
+
case authConfiguration_1.AuthType.UserManagedIdentity:
|
|
129
|
+
authority = 'managed-identity';
|
|
130
|
+
credentialIdentity = (_e = authConfig.clientId) !== null && _e !== void 0 ? _e : '';
|
|
131
|
+
break;
|
|
132
|
+
case authConfiguration_1.AuthType.SystemManagedIdentity:
|
|
133
|
+
authority = 'managed-identity';
|
|
134
|
+
credentialIdentity = 'system';
|
|
135
|
+
break;
|
|
136
|
+
default:
|
|
137
|
+
credentialIdentity = 'unknown';
|
|
138
|
+
}
|
|
139
|
+
return MsalTokenProvider.cacheKey('access-token', authType, authority, authConfig.clientId, scope, authConfig.azureRegion, credentialIdentity);
|
|
140
|
+
}
|
|
141
|
+
cacheAccessToken(cacheKey, token, expiresOn) {
|
|
142
|
+
const ttlSeconds = this.getTokenCacheTtlSeconds(token, expiresOn);
|
|
143
|
+
if (ttlSeconds > 0) {
|
|
144
|
+
MsalTokenProvider._accessTokenCache.set(cacheKey, token, ttlSeconds);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
cacheAgenticToken(cacheKey, token, ttlSeconds) {
|
|
148
|
+
const safeTtlSeconds = Math.floor(ttlSeconds) - 300;
|
|
149
|
+
if (safeTtlSeconds > 0) {
|
|
150
|
+
MsalTokenProvider._agenticTokenCache.set(cacheKey, token, safeTtlSeconds);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
cacheAgenticAuthenticationResult(cacheKey, token) {
|
|
154
|
+
const ttlSeconds = this.getTokenCacheTtlSeconds(token.accessToken, token.expiresOn);
|
|
155
|
+
if (ttlSeconds > 0) {
|
|
156
|
+
MsalTokenProvider._agenticTokenCache.set(cacheKey, token.accessToken, ttlSeconds);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
getAgenticTokenCacheKey(tenantId, clientId, scopes, tokenBodyParameters) {
|
|
160
|
+
const bodyKey = Object.keys(tokenBodyParameters)
|
|
161
|
+
.sort()
|
|
162
|
+
.filter(key => key !== 'user_federated_identity_credential')
|
|
163
|
+
.map(key => `${key}=${MsalTokenProvider.digest(String(tokenBodyParameters[key]))}`)
|
|
164
|
+
.join('&');
|
|
165
|
+
return MsalTokenProvider.cacheKey('agentic-token', this.resolveAuthority(tenantId), clientId, scopes.join(' '), bodyKey);
|
|
166
|
+
}
|
|
167
|
+
getTokenCacheTtlSeconds(token, expiresOn) {
|
|
168
|
+
var _a;
|
|
169
|
+
const expiresAtMs = (_a = expiresOn === null || expiresOn === void 0 ? void 0 : expiresOn.getTime()) !== null && _a !== void 0 ? _a : this.getJwtExpiresAtMs(token);
|
|
170
|
+
if (!expiresAtMs) {
|
|
171
|
+
return 0;
|
|
172
|
+
}
|
|
173
|
+
return Math.floor((expiresAtMs - Date.now()) / 1000) - 300;
|
|
174
|
+
}
|
|
175
|
+
getJwtExpiresAtMs(token) {
|
|
176
|
+
const payload = jsonwebtoken_1.default.decode(token);
|
|
177
|
+
if (!payload || typeof payload === 'string' || typeof payload.exp !== 'number') {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
return payload.exp * 1000;
|
|
181
|
+
}
|
|
182
|
+
getClientSecretClient(authConfig) {
|
|
183
|
+
var _a;
|
|
184
|
+
const cacheKey = MsalTokenProvider.cacheKey('confidential-client', authConfiguration_1.AuthType.ClientSecret, authConfig.clientId, (0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId), MsalTokenProvider.digest(authConfig.clientSecret));
|
|
185
|
+
return this.getOrCreateConfidentialClient(cacheKey, () => {
|
|
186
|
+
var _a;
|
|
187
|
+
return new msal_node_1.ConfidentialClientApplication({
|
|
188
|
+
auth: {
|
|
189
|
+
clientId: authConfig.clientId,
|
|
190
|
+
authority: (0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId),
|
|
191
|
+
clientSecret: authConfig.clientSecret
|
|
192
|
+
},
|
|
193
|
+
system: this.sysOptions
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
getCertificateClient(authConfig) {
|
|
198
|
+
var _a, _b;
|
|
199
|
+
const cacheKey = MsalTokenProvider.cacheKey('confidential-client', (_a = authConfig.authType) !== null && _a !== void 0 ? _a : authConfiguration_1.AuthType.Certificate, authConfig.clientId, (0, authConfiguration_1.resolveAuthority)((_b = authConfig.authorityEndpoint) !== null && _b !== void 0 ? _b : authConfig.authority, authConfig.tenantId), this.getFileCacheIdentity(authConfig.certPemFile), this.getFileCacheIdentity(authConfig.certKeyFile), authConfig.sendX5C);
|
|
200
|
+
return this.getOrCreateConfidentialClient(cacheKey, () => {
|
|
201
|
+
var _a;
|
|
202
|
+
const privateKeySource = fs_1.default.readFileSync(authConfig.certKeyFile);
|
|
203
|
+
const privateKeyObject = crypto_2.default.createPrivateKey({
|
|
204
|
+
key: privateKeySource,
|
|
205
|
+
format: 'pem'
|
|
206
|
+
});
|
|
207
|
+
const privateKey = privateKeyObject.export({
|
|
208
|
+
format: 'pem',
|
|
209
|
+
type: 'pkcs8'
|
|
210
|
+
});
|
|
211
|
+
const pemFile = fs_1.default.readFileSync(authConfig.certPemFile);
|
|
212
|
+
const pubKeyObject = new crypto_2.default.X509Certificate(pemFile);
|
|
213
|
+
return new msal_node_1.ConfidentialClientApplication({
|
|
214
|
+
auth: {
|
|
215
|
+
clientId: authConfig.clientId || '',
|
|
216
|
+
authority: (0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId),
|
|
217
|
+
clientCertificate: {
|
|
218
|
+
privateKey: privateKey,
|
|
219
|
+
thumbprint: pubKeyObject.fingerprint.replaceAll(':', ''),
|
|
220
|
+
x5c: pemFile.toString()
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
system: this.sysOptions
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
}
|
|
65
227
|
async getAccessToken(authConfigOrScope, scope) {
|
|
66
228
|
return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.getAccessToken, async ({ record }) => {
|
|
67
229
|
var _a;
|
|
@@ -85,91 +247,65 @@ class MsalTokenProvider {
|
|
|
85
247
|
record({ method: 'unknown' });
|
|
86
248
|
return '';
|
|
87
249
|
}
|
|
250
|
+
const accessTokenCacheKey = this.getAccessTokenCacheKey(authConfig, actualScope);
|
|
251
|
+
const cachedAccessToken = MsalTokenProvider._accessTokenCache.get(accessTokenCacheKey);
|
|
252
|
+
if (cachedAccessToken) {
|
|
253
|
+
logger.debug('getAccessToken cache hit clientId=%s scope=%s', authConfig.clientId, actualScope);
|
|
254
|
+
return cachedAccessToken;
|
|
255
|
+
}
|
|
88
256
|
let token;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
token = await this.acquireAccessTokenViaWID(authConfig, actualScope);
|
|
99
|
-
break;
|
|
257
|
+
const authType = (0, authConfiguration_1.resolveAuthType)(authConfig);
|
|
258
|
+
record({ method: authType });
|
|
259
|
+
logger.debug('getAccessToken via method=%s clientId=%s scope=%s', authType, authConfig.clientId, actualScope);
|
|
260
|
+
switch (authType) {
|
|
261
|
+
case authConfiguration_1.AuthType.WorkloadIdentity: {
|
|
262
|
+
const tokenFilePath = (_a = authConfig.federatedTokenFile) !== null && _a !== void 0 ? _a : authConfig.WIDAssertionFile;
|
|
263
|
+
if (!tokenFilePath) {
|
|
264
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.WorkloadIdentityTokenFileRequired);
|
|
100
265
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FICClientIdRequired);
|
|
104
|
-
}
|
|
105
|
-
token = await this.acquireAccessTokenViaFIC(authConfig, actualScope);
|
|
106
|
-
break;
|
|
107
|
-
case authConfiguration_1.AuthType.ClientSecret:
|
|
108
|
-
if (!authConfig.clientSecret) {
|
|
109
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ClientSecretRequired);
|
|
110
|
-
}
|
|
111
|
-
token = await this.acquireAccessTokenViaSecret(authConfig, actualScope);
|
|
112
|
-
break;
|
|
113
|
-
case authConfiguration_1.AuthType.Certificate:
|
|
114
|
-
case authConfiguration_1.AuthType.CertificateSubjectName:
|
|
115
|
-
if (!authConfig.certPemFile || !authConfig.certKeyFile) {
|
|
116
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CertificateFilesRequired);
|
|
117
|
-
}
|
|
118
|
-
token = await this.acquireTokenWithCertificate(authConfig, actualScope);
|
|
119
|
-
break;
|
|
120
|
-
case authConfiguration_1.AuthType.UserManagedIdentity:
|
|
121
|
-
if (!authConfig.clientId) {
|
|
122
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ClientIdRequiredForUserManagedIdentity);
|
|
123
|
-
}
|
|
124
|
-
token = await this.acquireTokenWithUserAssignedIdentity(authConfig, actualScope);
|
|
125
|
-
break;
|
|
126
|
-
case authConfiguration_1.AuthType.SystemManagedIdentity:
|
|
127
|
-
token = await this.acquireTokenWithSystemAssignedIdentity(authConfig, actualScope);
|
|
128
|
-
break;
|
|
129
|
-
default:
|
|
130
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.UnsupportedAuthType, undefined, { authType: authConfig.authType });
|
|
266
|
+
token = await this.acquireAccessTokenViaWID(authConfig, actualScope);
|
|
267
|
+
break;
|
|
131
268
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.InvalidAuthConfig);
|
|
269
|
+
case authConfiguration_1.AuthType.FederatedCredentials:
|
|
270
|
+
if (!authConfig.federatedClientId && !authConfig.FICClientId) {
|
|
271
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FICClientIdRequired);
|
|
272
|
+
}
|
|
273
|
+
token = await this.acquireAccessTokenViaFIC(authConfig, actualScope);
|
|
274
|
+
break;
|
|
275
|
+
case authConfiguration_1.AuthType.ClientSecret:
|
|
276
|
+
if (!authConfig.clientSecret) {
|
|
277
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ClientSecretRequired);
|
|
278
|
+
}
|
|
279
|
+
token = await this.acquireAccessTokenViaSecret(authConfig, actualScope);
|
|
280
|
+
break;
|
|
281
|
+
case authConfiguration_1.AuthType.Certificate:
|
|
282
|
+
case authConfiguration_1.AuthType.CertificateSubjectName:
|
|
283
|
+
if (!authConfig.certPemFile || !authConfig.certKeyFile) {
|
|
284
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CertificateFilesRequired);
|
|
285
|
+
}
|
|
286
|
+
token = await this.acquireTokenWithCertificate(authConfig, actualScope);
|
|
287
|
+
break;
|
|
288
|
+
case authConfiguration_1.AuthType.UserManagedIdentity:
|
|
289
|
+
if (!authConfig.clientId) {
|
|
290
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ClientIdRequiredForUserManagedIdentity);
|
|
291
|
+
}
|
|
292
|
+
token = await this.acquireTokenWithUserAssignedIdentity(authConfig, actualScope);
|
|
293
|
+
break;
|
|
294
|
+
case authConfiguration_1.AuthType.SystemManagedIdentity:
|
|
295
|
+
token = await this.acquireTokenWithSystemAssignedIdentity(authConfig, actualScope);
|
|
296
|
+
break;
|
|
297
|
+
default:
|
|
298
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.UnsupportedAuthType, undefined, { authType });
|
|
163
299
|
}
|
|
164
300
|
if (token === undefined) {
|
|
165
301
|
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FailedToAcquireToken);
|
|
166
302
|
}
|
|
303
|
+
this.cacheAccessToken(accessTokenCacheKey, token);
|
|
167
304
|
return token;
|
|
168
305
|
});
|
|
169
306
|
}
|
|
170
307
|
async acquireTokenOnBehalfOf(authConfigOrScopes, scopesOrOboAssertion, oboAssertion) {
|
|
171
308
|
return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.acquireTokenOnBehalfOf, async ({ record }) => {
|
|
172
|
-
var _a;
|
|
173
309
|
let authConfig;
|
|
174
310
|
let actualScopes;
|
|
175
311
|
let actualOboAssertion;
|
|
@@ -190,14 +326,7 @@ class MsalTokenProvider {
|
|
|
190
326
|
}
|
|
191
327
|
record({ scopes: actualScopes });
|
|
192
328
|
logger.debug('acquireTokenOnBehalfOf clientId=%s scopes=%o', authConfig.clientId, actualScopes);
|
|
193
|
-
const cca =
|
|
194
|
-
auth: {
|
|
195
|
-
clientId: authConfig.clientId,
|
|
196
|
-
authority: `${(_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
|
|
197
|
-
clientSecret: authConfig.clientSecret
|
|
198
|
-
},
|
|
199
|
-
system: this.sysOptions
|
|
200
|
-
});
|
|
329
|
+
const cca = this.getClientSecretClient(authConfig);
|
|
201
330
|
const token = await cca.acquireTokenOnBehalfOf({
|
|
202
331
|
oboAssertion: actualOboAssertion,
|
|
203
332
|
scopes: actualScopes
|
|
@@ -216,6 +345,11 @@ class MsalTokenProvider {
|
|
|
216
345
|
if (!this.connectionSettings) {
|
|
217
346
|
throw new Error('Connection settings must be provided when calling getAgenticInstanceToken');
|
|
218
347
|
}
|
|
348
|
+
const instanceTokenCacheKey = MsalTokenProvider.cacheKey('agentic-instance-token', this.resolveAuthority(tenantId), agentAppInstanceId, this.connectionSettings.clientId, this.connectionSettings.azureRegion);
|
|
349
|
+
const cachedInstanceToken = MsalTokenProvider._agenticTokenCache.get(instanceTokenCacheKey);
|
|
350
|
+
if (cachedInstanceToken) {
|
|
351
|
+
return cachedInstanceToken;
|
|
352
|
+
}
|
|
219
353
|
const appToken = await this.getAgenticApplicationToken(tenantId, agentAppInstanceId);
|
|
220
354
|
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
221
355
|
auth: {
|
|
@@ -233,6 +367,7 @@ class MsalTokenProvider {
|
|
|
233
367
|
if (!(token === null || token === void 0 ? void 0 : token.accessToken)) {
|
|
234
368
|
throw new Error(`Failed to acquire instance token for agent instance: ${agentAppInstanceId}`);
|
|
235
369
|
}
|
|
370
|
+
this.cacheAgenticAuthenticationResult(instanceTokenCacheKey, token);
|
|
236
371
|
return token.accessToken;
|
|
237
372
|
});
|
|
238
373
|
}
|
|
@@ -275,9 +410,9 @@ class MsalTokenProvider {
|
|
|
275
410
|
}
|
|
276
411
|
logger.debug('acquireTokenForAgenticScenarios clientId=%s tenantId=%s scopes=%o grant_type=%s', clientId, tenantId, scopes, tokenBodyParameters.grant_type);
|
|
277
412
|
// Check cache first
|
|
278
|
-
const cacheKey =
|
|
279
|
-
if (
|
|
280
|
-
return
|
|
413
|
+
const cacheKey = this.getAgenticTokenCacheKey(tenantId, clientId, scopes, tokenBodyParameters);
|
|
414
|
+
if (MsalTokenProvider._agenticTokenCache.get(cacheKey)) {
|
|
415
|
+
return MsalTokenProvider._agenticTokenCache.get(cacheKey);
|
|
281
416
|
}
|
|
282
417
|
const url = `${this.resolveAuthority(tenantId)}/oauth2/v2.0/token`;
|
|
283
418
|
const data = {
|
|
@@ -324,19 +459,27 @@ class MsalTokenProvider {
|
|
|
324
459
|
clearTimeout(timeoutId);
|
|
325
460
|
});
|
|
326
461
|
// capture token, expire local cache 5 minutes early
|
|
327
|
-
this.
|
|
462
|
+
this.cacheAgenticToken(cacheKey, token.access_token, token.expires_in);
|
|
328
463
|
return token.access_token;
|
|
329
464
|
}
|
|
330
465
|
async getAgenticUserToken(tenantId, agentAppInstanceId, agenticUserId, scopes) {
|
|
331
466
|
return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.getAgenticUserToken, async ({ record }) => {
|
|
332
467
|
logger.debug('getAgenticUserToken tenantId=%s agentAppInstanceId=%s scopes=%o', tenantId, agentAppInstanceId, scopes);
|
|
333
468
|
record({ agenticInstanceId: agentAppInstanceId, agenticUserId, scopes });
|
|
469
|
+
const userTokenParameters = {
|
|
470
|
+
user_id: agenticUserId,
|
|
471
|
+
grant_type: 'user_fic',
|
|
472
|
+
};
|
|
473
|
+
const userTokenCacheKey = this.getAgenticTokenCacheKey(tenantId, agentAppInstanceId, scopes, userTokenParameters);
|
|
474
|
+
const cachedUserToken = MsalTokenProvider._agenticTokenCache.get(userTokenCacheKey);
|
|
475
|
+
if (cachedUserToken) {
|
|
476
|
+
return cachedUserToken;
|
|
477
|
+
}
|
|
334
478
|
const agentToken = await this.getAgenticApplicationToken(tenantId, agentAppInstanceId);
|
|
335
479
|
const instanceToken = await this.getAgenticInstanceToken(tenantId, agentAppInstanceId);
|
|
336
480
|
const token = await this.acquireTokenForAgenticScenarios(tenantId, agentAppInstanceId, agentToken, scopes, {
|
|
337
|
-
|
|
481
|
+
...userTokenParameters,
|
|
338
482
|
user_federated_identity_credential: instanceToken,
|
|
339
|
-
grant_type: 'user_fic',
|
|
340
483
|
});
|
|
341
484
|
if (!token) {
|
|
342
485
|
throw new Error(`Failed to acquire instance token for user token: ${agentAppInstanceId}`);
|
|
@@ -345,12 +488,13 @@ class MsalTokenProvider {
|
|
|
345
488
|
});
|
|
346
489
|
}
|
|
347
490
|
async getAgenticApplicationToken(tenantId, agentAppInstanceId) {
|
|
348
|
-
var _a, _b
|
|
491
|
+
var _a, _b;
|
|
349
492
|
if (!((_a = this.connectionSettings) === null || _a === void 0 ? void 0 : _a.clientId)) {
|
|
350
493
|
throw new Error('Connection settings must be provided when calling getAgenticApplicationToken');
|
|
351
494
|
}
|
|
352
495
|
logger.debug('getAgenticApplicationToken clientId=%s tenantId=%s agentAppInstanceId=%s', this.connectionSettings.clientId, tenantId, agentAppInstanceId);
|
|
353
|
-
|
|
496
|
+
const authType = (0, authConfiguration_1.resolveAuthType)(this.connectionSettings);
|
|
497
|
+
if (authType === authConfiguration_1.AuthType.IdentityProxyManager) {
|
|
354
498
|
let resource;
|
|
355
499
|
if (!this.connectionSettings.idpmResource) {
|
|
356
500
|
resource = 'api://AzureAdTokenExchange/.default';
|
|
@@ -375,41 +519,28 @@ class MsalTokenProvider {
|
|
|
375
519
|
return tokenResult.accessToken;
|
|
376
520
|
}
|
|
377
521
|
let clientAssertion;
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.WorkloadIdentityTokenFileRequired);
|
|
384
|
-
}
|
|
385
|
-
clientAssertion = fs_1.default.readFileSync(tokenFilePath, 'utf8');
|
|
386
|
-
break;
|
|
522
|
+
switch (authType) {
|
|
523
|
+
case authConfiguration_1.AuthType.WorkloadIdentity: {
|
|
524
|
+
const tokenFilePath = (_b = this.connectionSettings.federatedTokenFile) !== null && _b !== void 0 ? _b : this.connectionSettings.WIDAssertionFile;
|
|
525
|
+
if (tokenFilePath === undefined) {
|
|
526
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.WorkloadIdentityTokenFileRequired);
|
|
387
527
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FICClientIdRequired);
|
|
391
|
-
}
|
|
392
|
-
clientAssertion = await this.fetchExternalToken(this.connectionSettings.federatedClientId || this.connectionSettings.FICClientId);
|
|
393
|
-
break;
|
|
394
|
-
case authConfiguration_1.AuthType.Certificate:
|
|
395
|
-
case authConfiguration_1.AuthType.CertificateSubjectName:
|
|
396
|
-
if (!this.connectionSettings.certPemFile || !this.connectionSettings.certKeyFile) {
|
|
397
|
-
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CertificateFilesRequired);
|
|
398
|
-
}
|
|
399
|
-
clientAssertion = this.getAssertionFromCert(this.connectionSettings);
|
|
400
|
-
break;
|
|
528
|
+
clientAssertion = fs_1.default.readFileSync(tokenFilePath, 'utf8');
|
|
529
|
+
break;
|
|
401
530
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
531
|
+
case authConfiguration_1.AuthType.FederatedCredentials:
|
|
532
|
+
if (!this.connectionSettings.federatedClientId && !this.connectionSettings.FICClientId) {
|
|
533
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FICClientIdRequired);
|
|
534
|
+
}
|
|
535
|
+
clientAssertion = await this.fetchExternalToken(this.connectionSettings.federatedClientId || this.connectionSettings.FICClientId);
|
|
536
|
+
break;
|
|
537
|
+
case authConfiguration_1.AuthType.Certificate:
|
|
538
|
+
case authConfiguration_1.AuthType.CertificateSubjectName:
|
|
539
|
+
if (!this.connectionSettings.certPemFile || !this.connectionSettings.certKeyFile) {
|
|
540
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CertificateFilesRequired);
|
|
541
|
+
}
|
|
542
|
+
clientAssertion = this.getAssertionFromCert(this.connectionSettings);
|
|
543
|
+
break;
|
|
413
544
|
}
|
|
414
545
|
const token = await this.acquireTokenForAgenticScenarios(tenantId, this.connectionSettings.clientId, clientAssertion, ['api://AzureAdTokenExchange/.default'], {
|
|
415
546
|
grant_type: 'client_credentials',
|
|
@@ -491,30 +622,7 @@ class MsalTokenProvider {
|
|
|
491
622
|
* @returns A promise that resolves to the access token.
|
|
492
623
|
*/
|
|
493
624
|
async acquireTokenWithCertificate(authConfig, scope) {
|
|
494
|
-
|
|
495
|
-
const privateKeySource = fs_1.default.readFileSync(authConfig.certKeyFile);
|
|
496
|
-
const privateKeyObject = crypto_2.default.createPrivateKey({
|
|
497
|
-
key: privateKeySource,
|
|
498
|
-
format: 'pem'
|
|
499
|
-
});
|
|
500
|
-
const privateKey = privateKeyObject.export({
|
|
501
|
-
format: 'pem',
|
|
502
|
-
type: 'pkcs8'
|
|
503
|
-
});
|
|
504
|
-
const pemFile = fs_1.default.readFileSync(authConfig.certPemFile);
|
|
505
|
-
const pubKeyObject = new crypto_2.default.X509Certificate(pemFile);
|
|
506
|
-
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
507
|
-
auth: {
|
|
508
|
-
clientId: authConfig.clientId || '',
|
|
509
|
-
authority: `${(_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
|
|
510
|
-
clientCertificate: {
|
|
511
|
-
privateKey: privateKey,
|
|
512
|
-
thumbprint: pubKeyObject.fingerprint.replaceAll(':', ''),
|
|
513
|
-
x5c: pemFile.toString()
|
|
514
|
-
}
|
|
515
|
-
},
|
|
516
|
-
system: this.sysOptions
|
|
517
|
-
});
|
|
625
|
+
const cca = this.getCertificateClient(authConfig);
|
|
518
626
|
const token = await cca.acquireTokenByClientCredential({
|
|
519
627
|
scopes: [`${scope}/.default`],
|
|
520
628
|
correlationId: (0, crypto_1.randomUUID)(),
|
|
@@ -532,15 +640,7 @@ class MsalTokenProvider {
|
|
|
532
640
|
* @returns A promise that resolves to the access token.
|
|
533
641
|
*/
|
|
534
642
|
async acquireAccessTokenViaSecret(authConfig, scope) {
|
|
535
|
-
|
|
536
|
-
const cca = new msal_node_1.ConfidentialClientApplication({
|
|
537
|
-
auth: {
|
|
538
|
-
clientId: authConfig.clientId,
|
|
539
|
-
authority: `${(_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
|
|
540
|
-
clientSecret: authConfig.clientSecret
|
|
541
|
-
},
|
|
542
|
-
system: this.sysOptions
|
|
543
|
-
});
|
|
643
|
+
const cca = this.getClientSecretClient(authConfig);
|
|
544
644
|
const token = await cca.acquireTokenByClientCredential({
|
|
545
645
|
scopes: [`${scope}/.default`],
|
|
546
646
|
correlationId: (0, crypto_1.randomUUID)(),
|
|
@@ -626,4 +726,8 @@ class MsalTokenProvider {
|
|
|
626
726
|
}
|
|
627
727
|
}
|
|
628
728
|
exports.MsalTokenProvider = MsalTokenProvider;
|
|
729
|
+
MsalTokenProvider._accessTokenCache = new MemoryCache_1.MemoryCache();
|
|
730
|
+
MsalTokenProvider._agenticTokenCache = new MemoryCache_1.MemoryCache();
|
|
731
|
+
MsalTokenProvider._confidentialClients = new Map();
|
|
732
|
+
MsalTokenProvider._maxConfidentialClients = 100;
|
|
629
733
|
//# sourceMappingURL=msalTokenProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msalTokenProvider.js","sourceRoot":"","sources":["../../../../src/auth/msal/msalTokenProvider.ts"],"names":[],"mappings":"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"}
|