@winstonsayno/mcp-gateway 1.1.0 → 1.3.0
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/CHANGELOG.md +111 -0
- package/README.md +43 -7
- package/dashboard/README.md +4 -0
- package/dashboard/index.html +42 -3
- package/dist/auth/middleware.d.ts +38 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +148 -19
- package/dist/auth/middleware.js.map +1 -1
- package/dist/auth/oauth.d.ts +86 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +342 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/cli.js +54 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +141 -3
- package/dist/config/loader.js.map +1 -1
- package/dist/gateway/api.d.ts +5 -0
- package/dist/gateway/api.d.ts.map +1 -1
- package/dist/gateway/api.js +97 -6
- package/dist/gateway/api.js.map +1 -1
- package/dist/gateway/index.d.ts +9 -1
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +90 -5
- package/dist/gateway/index.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/catalog.d.ts +1 -1
- package/dist/mcp/endpoint.d.ts +52 -1
- package/dist/mcp/endpoint.d.ts.map +1 -1
- package/dist/mcp/endpoint.js +339 -12
- package/dist/mcp/endpoint.js.map +1 -1
- package/dist/middleware/error-handler.d.ts +10 -1
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +17 -3
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/monitor/index.d.ts.map +1 -1
- package/dist/monitor/index.js +5 -0
- package/dist/monitor/index.js.map +1 -1
- package/dist/proxy/index.d.ts +15 -0
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +44 -4
- package/dist/proxy/index.js.map +1 -1
- package/dist/security/headers.d.ts +23 -0
- package/dist/security/headers.d.ts.map +1 -0
- package/dist/security/headers.js +71 -0
- package/dist/security/headers.js.map +1 -0
- package/dist/security/lockout.d.ts +41 -0
- package/dist/security/lockout.d.ts.map +1 -0
- package/dist/security/lockout.js +117 -0
- package/dist/security/lockout.js.map +1 -0
- package/dist/security/network.d.ts +31 -0
- package/dist/security/network.d.ts.map +1 -0
- package/dist/security/network.js +147 -0
- package/dist/security/network.js.map +1 -0
- package/dist/security/posture.d.ts +18 -0
- package/dist/security/posture.d.ts.map +1 -0
- package/dist/security/posture.js +76 -0
- package/dist/security/posture.js.map +1 -0
- package/dist/security/redact.d.ts +34 -0
- package/dist/security/redact.d.ts.map +1 -0
- package/dist/security/redact.js +115 -0
- package/dist/security/redact.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +4 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/types.d.ts +119 -6
- package/dist/utils/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth 2.1 resource-server support, following the MCP authorization spec
|
|
3
|
+
* (2025-06-18): the gateway is an OAuth *protected resource*.
|
|
4
|
+
*
|
|
5
|
+
* - `GET /.well-known/oauth-protected-resource[/<mcp path>]` serves RFC 9728
|
|
6
|
+
* Protected Resource Metadata (resource, authorization_servers,
|
|
7
|
+
* scopes_supported, bearer_methods_supported).
|
|
8
|
+
* - Bearer access tokens are validated either as JWTs against the
|
|
9
|
+
* authorization server's JWKS (configured `jwksUrl`, or the `jwks_uri`
|
|
10
|
+
* discovered from RFC 8414 / OpenID metadata of the issuer) or through
|
|
11
|
+
* RFC 7662 token introspection (opaque tokens). Introspection results are
|
|
12
|
+
* cached until the token expires (at most `cacheSeconds`).
|
|
13
|
+
* - The token must be issued for this resource (`aud` contains the resource
|
|
14
|
+
* URI, RFC 8707) and by one of the configured authorization servers.
|
|
15
|
+
* - Failures answer with RFC 6750 `WWW-Authenticate` challenges that point
|
|
16
|
+
* clients at the metadata document: `401` + `error="invalid_token"` for a
|
|
17
|
+
* missing / invalid token, `403` + `error="insufficient_scope"` when
|
|
18
|
+
* `requiredScopes` are missing.
|
|
19
|
+
*
|
|
20
|
+
* @module auth/oauth
|
|
21
|
+
*/
|
|
22
|
+
import { createHash } from 'crypto';
|
|
23
|
+
import { createRemoteJWKSet, decodeJwt, jwtVerify } from 'jose';
|
|
24
|
+
import { logger } from '../utils/logger.js';
|
|
25
|
+
import { scopeFromJwt } from './scopes.js';
|
|
26
|
+
import { ASYMMETRIC_ALGORITHMS } from './middleware.js';
|
|
27
|
+
export const PROTECTED_RESOURCE_METADATA_PATH = '/.well-known/oauth-protected-resource';
|
|
28
|
+
export class TokenError extends Error {
|
|
29
|
+
code;
|
|
30
|
+
constructor(message, code = 'invalid_token') {
|
|
31
|
+
super(message);
|
|
32
|
+
this.code = code;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const asList = (v) => v === undefined ? undefined : Array.isArray(v) ? v : [v];
|
|
36
|
+
function assertSecureUrl(raw, field) {
|
|
37
|
+
let url;
|
|
38
|
+
try {
|
|
39
|
+
url = new URL(raw);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
throw new Error(`${field} is not a valid URL: ${raw}`);
|
|
43
|
+
}
|
|
44
|
+
const local = ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname);
|
|
45
|
+
if (url.protocol !== 'https:' && !(url.protocol === 'http:' && local)) {
|
|
46
|
+
throw new Error(`${field} must use https:// (http:// is only allowed for localhost)`);
|
|
47
|
+
}
|
|
48
|
+
return url;
|
|
49
|
+
}
|
|
50
|
+
/** RFC 8414 §3 well-known URLs for an issuer (path-inserted form first, then OpenID Connect). */
|
|
51
|
+
export function metadataUrls(issuer) {
|
|
52
|
+
const u = new URL(issuer);
|
|
53
|
+
const path = u.pathname.replace(/\/$/, '');
|
|
54
|
+
const origin = u.origin;
|
|
55
|
+
const urls = [`${origin}/.well-known/oauth-authorization-server${path}`];
|
|
56
|
+
urls.push(path ? `${origin}${path}/.well-known/openid-configuration` : `${origin}/.well-known/openid-configuration`);
|
|
57
|
+
if (path)
|
|
58
|
+
urls.push(`${origin}/.well-known/openid-configuration${path}`);
|
|
59
|
+
return urls;
|
|
60
|
+
}
|
|
61
|
+
/** Space-separated `scope` claim (or `scp` array) of a token. */
|
|
62
|
+
export function tokenScopes(claims) {
|
|
63
|
+
const s = claims.scope ?? claims.scp;
|
|
64
|
+
if (typeof s === 'string')
|
|
65
|
+
return s.split(/\s+/).filter(Boolean);
|
|
66
|
+
if (Array.isArray(s))
|
|
67
|
+
return s.filter((x) => typeof x === 'string');
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
/** Escape a value for a quoted-string in a WWW-Authenticate header. */
|
|
71
|
+
const quote = (v) => `"${v.replace(/["\\]/g, '\\$&')}"`;
|
|
72
|
+
/** Validates bearer tokens for one protected resource. */
|
|
73
|
+
export class OAuthVerifier {
|
|
74
|
+
config;
|
|
75
|
+
jwks;
|
|
76
|
+
jwksPromise;
|
|
77
|
+
introspectionCache = new Map();
|
|
78
|
+
fetchImpl;
|
|
79
|
+
now;
|
|
80
|
+
constructor(config, options = {}) {
|
|
81
|
+
this.config = config;
|
|
82
|
+
if (!config.authorizationServers?.length)
|
|
83
|
+
throw new Error('auth.oauth.authorizationServers must list at least one issuer');
|
|
84
|
+
for (const as of config.authorizationServers)
|
|
85
|
+
assertSecureUrl(as, 'auth.oauth.authorizationServers');
|
|
86
|
+
if (config.jwksUrl)
|
|
87
|
+
assertSecureUrl(config.jwksUrl, 'auth.oauth.jwksUrl');
|
|
88
|
+
if (config.introspection)
|
|
89
|
+
assertSecureUrl(config.introspection.url, 'auth.oauth.introspection.url');
|
|
90
|
+
if (config.resource)
|
|
91
|
+
assertSecureUrl(config.resource, 'auth.oauth.resource');
|
|
92
|
+
const bad = (config.algorithms ?? []).filter((a) => !ASYMMETRIC_ALGORITHMS.includes(a));
|
|
93
|
+
if (bad.length)
|
|
94
|
+
throw new Error(`auth.oauth.algorithms: ${bad.join(', ')} not allowed (asymmetric algorithms only)`);
|
|
95
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
96
|
+
this.now = options.now ?? Date.now;
|
|
97
|
+
if (config.jwksUrl)
|
|
98
|
+
this.jwks = this.remoteJwks(new URL(config.jwksUrl));
|
|
99
|
+
}
|
|
100
|
+
remoteJwks(url) {
|
|
101
|
+
return createRemoteJWKSet(url, {
|
|
102
|
+
cacheMaxAge: (this.config.jwksCacheSeconds ?? 600) * 1000,
|
|
103
|
+
cooldownDuration: 30_000,
|
|
104
|
+
timeoutDuration: 5_000,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/** Issuers whose tokens are accepted. */
|
|
108
|
+
issuers() {
|
|
109
|
+
return asList(this.config.issuer) ?? this.config.authorizationServers;
|
|
110
|
+
}
|
|
111
|
+
/** Discover `jwks_uri` from the first authorization server's metadata (cached). */
|
|
112
|
+
async discoverJwks() {
|
|
113
|
+
if (this.jwks)
|
|
114
|
+
return this.jwks;
|
|
115
|
+
this.jwksPromise ??= (async () => {
|
|
116
|
+
for (const issuer of this.config.authorizationServers) {
|
|
117
|
+
for (const url of metadataUrls(issuer)) {
|
|
118
|
+
try {
|
|
119
|
+
const r = await this.fetchImpl(url, { headers: { accept: 'application/json' }, signal: AbortSignal.timeout(5_000) });
|
|
120
|
+
if (!r.ok)
|
|
121
|
+
continue;
|
|
122
|
+
const meta = (await r.json());
|
|
123
|
+
if (typeof meta.jwks_uri === 'string') {
|
|
124
|
+
this.jwks = this.remoteJwks(assertSecureUrl(meta.jwks_uri, 'jwks_uri'));
|
|
125
|
+
return this.jwks;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
logger.debug(`OAuth metadata discovery failed for ${url}: ${err instanceof Error ? err.message : String(err)}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return undefined;
|
|
134
|
+
})().finally(() => {
|
|
135
|
+
if (!this.jwks)
|
|
136
|
+
this.jwksPromise = undefined; // retry discovery next time
|
|
137
|
+
});
|
|
138
|
+
return this.jwksPromise;
|
|
139
|
+
}
|
|
140
|
+
/** Validate a bearer token for `resource`. Throws `TokenError`. */
|
|
141
|
+
async verify(token, resource) {
|
|
142
|
+
const isJwt = token.split('.').length === 3;
|
|
143
|
+
let info;
|
|
144
|
+
if (isJwt && !this.config.introspection?.preferForJwt) {
|
|
145
|
+
const jwks = await this.discoverJwks();
|
|
146
|
+
if (jwks)
|
|
147
|
+
info = await this.verifyJwt(token, jwks, resource);
|
|
148
|
+
else if (this.config.introspection)
|
|
149
|
+
info = await this.introspect(token, resource);
|
|
150
|
+
else
|
|
151
|
+
throw new TokenError('no JWKS available to validate the token');
|
|
152
|
+
}
|
|
153
|
+
else if (this.config.introspection) {
|
|
154
|
+
info = await this.introspect(token, resource);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
throw new TokenError('opaque tokens require auth.oauth.introspection');
|
|
158
|
+
}
|
|
159
|
+
const required = this.config.requiredScopes ?? [];
|
|
160
|
+
const missing = required.filter((s) => !info.scopes.includes(s));
|
|
161
|
+
if (missing.length)
|
|
162
|
+
throw new TokenError(`missing scope(s): ${missing.join(' ')}`, 'insufficient_scope');
|
|
163
|
+
return info;
|
|
164
|
+
}
|
|
165
|
+
audiences(resource) {
|
|
166
|
+
return asList(this.config.audience) ?? [resource];
|
|
167
|
+
}
|
|
168
|
+
async verifyJwt(token, jwks, resource) {
|
|
169
|
+
let payload;
|
|
170
|
+
try {
|
|
171
|
+
({ payload } = await jwtVerify(token, jwks, {
|
|
172
|
+
algorithms: this.config.algorithms ?? ASYMMETRIC_ALGORITHMS,
|
|
173
|
+
issuer: this.issuers(),
|
|
174
|
+
audience: this.audiences(resource),
|
|
175
|
+
clockTolerance: this.config.clockToleranceSeconds ?? 0,
|
|
176
|
+
requiredClaims: ['exp'],
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
throw new TokenError(err instanceof Error ? err.message : String(err));
|
|
181
|
+
}
|
|
182
|
+
const claims = payload;
|
|
183
|
+
return {
|
|
184
|
+
subject: payload.sub,
|
|
185
|
+
clientId: typeof claims.client_id === 'string' ? claims.client_id : typeof claims.azp === 'string' ? claims.azp : undefined,
|
|
186
|
+
scopes: tokenScopes(claims),
|
|
187
|
+
claims,
|
|
188
|
+
exp: payload.exp,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
async introspect(token, resource) {
|
|
192
|
+
const ic = this.config.introspection;
|
|
193
|
+
const cacheKey = createHash('sha256').update(token).digest('hex');
|
|
194
|
+
const t = this.now();
|
|
195
|
+
const hit = this.introspectionCache.get(cacheKey);
|
|
196
|
+
if (hit && hit.until > t)
|
|
197
|
+
return hit.info;
|
|
198
|
+
if (hit)
|
|
199
|
+
this.introspectionCache.delete(cacheKey);
|
|
200
|
+
const headers = {
|
|
201
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
202
|
+
accept: 'application/json',
|
|
203
|
+
};
|
|
204
|
+
if (ic.clientId) {
|
|
205
|
+
const basic = Buffer.from(`${encodeURIComponent(ic.clientId)}:${encodeURIComponent(ic.clientSecret ?? '')}`).toString('base64');
|
|
206
|
+
headers.authorization = `Basic ${basic}`;
|
|
207
|
+
}
|
|
208
|
+
let body;
|
|
209
|
+
try {
|
|
210
|
+
const r = await this.fetchImpl(ic.url, {
|
|
211
|
+
method: 'POST',
|
|
212
|
+
headers,
|
|
213
|
+
body: new URLSearchParams({ token, token_type_hint: 'access_token' }).toString(),
|
|
214
|
+
signal: AbortSignal.timeout(5_000),
|
|
215
|
+
});
|
|
216
|
+
if (!r.ok)
|
|
217
|
+
throw new Error(`introspection endpoint answered ${r.status}`);
|
|
218
|
+
body = (await r.json());
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
logger.warn(`OAuth token introspection failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
222
|
+
throw new TokenError('token introspection failed');
|
|
223
|
+
}
|
|
224
|
+
if (body.active !== true)
|
|
225
|
+
throw new TokenError('token is not active');
|
|
226
|
+
const exp = typeof body.exp === 'number' ? body.exp : undefined;
|
|
227
|
+
if (exp !== undefined && exp * 1000 <= t)
|
|
228
|
+
throw new TokenError('token expired');
|
|
229
|
+
if (typeof body.iss === 'string' && !this.issuers().includes(body.iss))
|
|
230
|
+
throw new TokenError('unexpected issuer');
|
|
231
|
+
const aud = asList(body.aud);
|
|
232
|
+
if (aud && !aud.some((a) => this.audiences(resource).includes(a))) {
|
|
233
|
+
throw new TokenError('token was not issued for this resource');
|
|
234
|
+
}
|
|
235
|
+
if (!aud && ic.requireAudience !== false)
|
|
236
|
+
throw new TokenError('token has no audience');
|
|
237
|
+
const info = {
|
|
238
|
+
subject: typeof body.sub === 'string' ? body.sub : undefined,
|
|
239
|
+
clientId: typeof body.client_id === 'string' ? body.client_id : undefined,
|
|
240
|
+
scopes: tokenScopes(body),
|
|
241
|
+
claims: body,
|
|
242
|
+
exp,
|
|
243
|
+
};
|
|
244
|
+
const maxMs = (ic.cacheSeconds ?? 60) * 1000;
|
|
245
|
+
const until = Math.min(t + maxMs, exp !== undefined ? exp * 1000 : Infinity);
|
|
246
|
+
if (maxMs > 0) {
|
|
247
|
+
if (this.introspectionCache.size > 10_000)
|
|
248
|
+
this.introspectionCache.clear();
|
|
249
|
+
this.introspectionCache.set(cacheKey, { info, until });
|
|
250
|
+
}
|
|
251
|
+
return info;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/** Public base URL of the request (scheme + host), honouring "trust proxy". */
|
|
255
|
+
export function requestOrigin(req) {
|
|
256
|
+
return `${req.protocol}://${req.get('host') ?? 'localhost'}`;
|
|
257
|
+
}
|
|
258
|
+
/** Canonical resource URI of the MCP endpoint (RFC 8707). */
|
|
259
|
+
export function resourceUri(config, req, mcpPath) {
|
|
260
|
+
return config.resource ?? `${requestOrigin(req)}${mcpPath}`;
|
|
261
|
+
}
|
|
262
|
+
/** URL of the protected-resource metadata document for this resource. */
|
|
263
|
+
export function metadataUrl(config, req, mcpPath) {
|
|
264
|
+
const resource = new URL(resourceUri(config, req, mcpPath));
|
|
265
|
+
const path = resource.pathname.replace(/\/$/, '');
|
|
266
|
+
return `${resource.origin}${PROTECTED_RESOURCE_METADATA_PATH}${path}`;
|
|
267
|
+
}
|
|
268
|
+
/** RFC 9728 metadata document. */
|
|
269
|
+
export function protectedResourceMetadata(config, req, mcpPath) {
|
|
270
|
+
const doc = {
|
|
271
|
+
resource: resourceUri(config, req, mcpPath),
|
|
272
|
+
authorization_servers: config.authorizationServers,
|
|
273
|
+
bearer_methods_supported: ['header'],
|
|
274
|
+
resource_name: config.resourceName ?? 'mcp-gateway',
|
|
275
|
+
};
|
|
276
|
+
if (config.scopesSupported?.length)
|
|
277
|
+
doc.scopes_supported = config.scopesSupported;
|
|
278
|
+
if (config.documentation)
|
|
279
|
+
doc.resource_documentation = config.documentation;
|
|
280
|
+
const algs = config.algorithms ?? ASYMMETRIC_ALGORITHMS;
|
|
281
|
+
doc.resource_signing_alg_values_supported = algs;
|
|
282
|
+
return doc;
|
|
283
|
+
}
|
|
284
|
+
/** `WWW-Authenticate` value for a failed request. */
|
|
285
|
+
export function bearerChallenge(config, req, mcpPath, err) {
|
|
286
|
+
const parts = [`resource_metadata=${quote(metadataUrl(config, req, mcpPath))}`];
|
|
287
|
+
if (err) {
|
|
288
|
+
parts.push(`error=${quote(err.code)}`);
|
|
289
|
+
parts.push(`error_description=${quote(err.message.replace(/[^\x20-\x7e]/g, ''))}`);
|
|
290
|
+
}
|
|
291
|
+
const scopes = config.requiredScopes?.length ? config.requiredScopes : undefined;
|
|
292
|
+
if (scopes)
|
|
293
|
+
parts.push(`scope=${quote(scopes.join(' '))}`);
|
|
294
|
+
return `Bearer ${parts.join(', ')}`;
|
|
295
|
+
}
|
|
296
|
+
/** Express middleware for `auth.strategy: oauth2`. */
|
|
297
|
+
export function oauthMiddleware(config, options) {
|
|
298
|
+
const verifier = new OAuthVerifier(config, options);
|
|
299
|
+
const mw = ((req, res, next) => {
|
|
300
|
+
const path = options.mcpPath();
|
|
301
|
+
const header = req.headers.authorization;
|
|
302
|
+
if (!header || !/^Bearer /i.test(header)) {
|
|
303
|
+
res.set('WWW-Authenticate', bearerChallenge(config, req, path));
|
|
304
|
+
res.status(401).json({ error: 'Unauthorized', message: 'Bearer access token required' });
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const token = header.slice(7).trim();
|
|
308
|
+
verifier.verify(token, resourceUri(config, req, path)).then((info) => {
|
|
309
|
+
const r = req;
|
|
310
|
+
r.jwtPayload = info.claims;
|
|
311
|
+
r.oauth = info;
|
|
312
|
+
r.clientId = `oauth:${info.subject ?? info.clientId ?? 'unknown'}`;
|
|
313
|
+
const scope = scopeFromJwt(info.claims);
|
|
314
|
+
if (scope)
|
|
315
|
+
r.scope = scope;
|
|
316
|
+
next();
|
|
317
|
+
}, (err) => {
|
|
318
|
+
const te = err instanceof TokenError ? err : new TokenError('invalid token');
|
|
319
|
+
logger.warn(`OAuth token rejected from ${req.ip}: ${te.message}`);
|
|
320
|
+
if (res.headersSent)
|
|
321
|
+
return;
|
|
322
|
+
res.set('WWW-Authenticate', bearerChallenge(config, req, path, te));
|
|
323
|
+
const forbidden = te.code === 'insufficient_scope';
|
|
324
|
+
res.status(forbidden ? 403 : 401).json({
|
|
325
|
+
error: forbidden ? 'Forbidden' : 'Unauthorized',
|
|
326
|
+
message: forbidden ? 'Insufficient scope' : 'Invalid or expired access token',
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
mw.verifier = verifier;
|
|
331
|
+
return mw;
|
|
332
|
+
}
|
|
333
|
+
/** Decode a JWT's claims without verifying it (diagnostics only). */
|
|
334
|
+
export function peekClaims(token) {
|
|
335
|
+
try {
|
|
336
|
+
return decodeJwt(token);
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -11,6 +11,9 @@ import { ConfigWatcher } from './config/watcher.js';
|
|
|
11
11
|
import { Gateway } from './gateway/index.js';
|
|
12
12
|
import { logger } from './utils/logger.js';
|
|
13
13
|
import { VERSION } from './utils/version.js';
|
|
14
|
+
import { randomBytes } from 'crypto';
|
|
15
|
+
import { hashApiKey } from './auth/middleware.js';
|
|
16
|
+
import { securityWarnings } from './security/posture.js';
|
|
14
17
|
const LOG_LEVELS = ['debug', 'info', 'warn', 'error'];
|
|
15
18
|
const program = new Command();
|
|
16
19
|
program
|
|
@@ -107,8 +110,9 @@ program
|
|
|
107
110
|
// ─── validate ─────────────────────────────────────────────────────────────────
|
|
108
111
|
program
|
|
109
112
|
.command('validate')
|
|
110
|
-
.description('Validate a configuration file')
|
|
113
|
+
.description('Validate a configuration file and report security warnings')
|
|
111
114
|
.option('-c, --config <path>', 'Path to config file')
|
|
115
|
+
.option('--strict', 'Exit with code 2 when there are security warnings')
|
|
112
116
|
.action(async (options) => {
|
|
113
117
|
try {
|
|
114
118
|
const config = await loadConfig(options.config);
|
|
@@ -116,12 +120,61 @@ program
|
|
|
116
120
|
console.log(` Port: ${config.port}`);
|
|
117
121
|
console.log(` Servers: ${config.servers.length}`);
|
|
118
122
|
console.log(` Auth: ${config.auth?.strategy ?? 'none'}`);
|
|
123
|
+
const warnings = securityWarnings(config);
|
|
124
|
+
if (warnings.length > 0) {
|
|
125
|
+
console.log('\nSecurity:');
|
|
126
|
+
for (const w of warnings)
|
|
127
|
+
console.log(` ${w.level === 'warn' ? '!' : '-'} ${w.message}`);
|
|
128
|
+
if (options.strict && warnings.some((w) => w.level === 'warn'))
|
|
129
|
+
process.exit(2);
|
|
130
|
+
}
|
|
119
131
|
}
|
|
120
132
|
catch (err) {
|
|
121
133
|
logger.error(`Invalid configuration: ${err instanceof Error ? err.message : String(err)}`);
|
|
122
134
|
process.exit(1);
|
|
123
135
|
}
|
|
124
136
|
});
|
|
137
|
+
// ─── keys ─────────────────────────────────────────────────────────────────────
|
|
138
|
+
async function readStdin() {
|
|
139
|
+
const chunks = [];
|
|
140
|
+
for await (const c of process.stdin)
|
|
141
|
+
chunks.push(c);
|
|
142
|
+
return Buffer.concat(chunks).toString('utf8').replace(/\r?\n$/, '');
|
|
143
|
+
}
|
|
144
|
+
program
|
|
145
|
+
.command('hash-key')
|
|
146
|
+
.description('Print the sha256:<hex> digest of an API key, for auth.apiKeys (reads stdin when no key is given)')
|
|
147
|
+
.argument('[key]', 'The key (prefer stdin so it stays out of your shell history)')
|
|
148
|
+
.action(async (key) => {
|
|
149
|
+
const value = key ?? (process.stdin.isTTY ? '' : await readStdin());
|
|
150
|
+
if (!value) {
|
|
151
|
+
logger.error('No key given. Usage: echo -n "$KEY" | mcp-gateway hash-key');
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
console.log(hashApiKey(value));
|
|
155
|
+
});
|
|
156
|
+
program
|
|
157
|
+
.command('gen-key')
|
|
158
|
+
.description('Generate a random API key and print it with its sha256 digest')
|
|
159
|
+
.option('-b, --bytes <n>', 'Random bytes (16-128)', '32')
|
|
160
|
+
.option('--prefix <prefix>', 'Key prefix (helps secret scanners and redaction)', 'mgw_')
|
|
161
|
+
.option('--json', 'Print JSON')
|
|
162
|
+
.action((options) => {
|
|
163
|
+
const bytes = Number(options.bytes);
|
|
164
|
+
if (!Number.isInteger(bytes) || bytes < 16 || bytes > 128) {
|
|
165
|
+
logger.error(`Invalid --bytes "${options.bytes}" (16-128)`);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
const key = `${options.prefix}${randomBytes(bytes).toString('base64url')}`;
|
|
169
|
+
const hash = hashApiKey(key);
|
|
170
|
+
if (options.json) {
|
|
171
|
+
console.log(JSON.stringify({ key, hash }));
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
console.log(`key: ${key}`);
|
|
175
|
+
console.log(`hash: ${hash}`);
|
|
176
|
+
console.log('\nGive the key to the client; put the hash in auth.apiKeys. The key is not shown again.');
|
|
177
|
+
});
|
|
125
178
|
program.parse(process.argv);
|
|
126
179
|
if (!process.argv.slice(2).length) {
|
|
127
180
|
program.outputHelp();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAqUvD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMzE;AAED,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsB5E;AAkCD,wBAAgB,qBAAqB,IAAI,MAAM,CAiH9C"}
|