Skip to content

Commit 8acd5ed

Browse files
committed
slim down
1 parent d608390 commit 8acd5ed

File tree

4 files changed

+41
-119
lines changed

4 files changed

+41
-119
lines changed

src/examples/server/demoRemoteOAuthProvider.ts

Lines changed: 0 additions & 108 deletions
This file was deleted.

src/examples/server/simpleStreamableHttp.ts

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { requireBearerAuth } from '../../server/auth/middleware/bearerAuth.js';
88
import { CallToolResult, GetPromptResult, isInitializeRequest, ReadResourceResult } from '../../types.js';
99
import { InMemoryEventStore } from '../shared/inMemoryEventStore.js';
1010
import { setupAuthServer } from './demoInMemoryOAuthProvider.js';
11-
import { DemoRemoteOAuthProvider } from './demoRemoteOAuthProvider.js';
1211
import { OAuthMetadata } from 'src/shared/auth.js';
1312

1413
// Check for OAuth flag
@@ -182,9 +181,40 @@ if (useOAuth) {
182181

183182
const oauthMetadata: OAuthMetadata = setupAuthServer(authServerUrl);
184183

185-
const remoteProvider = new DemoRemoteOAuthProvider(
186-
oauthMetadata
187-
);
184+
const tokenVerifier = {
185+
verifyAccessToken: async (token: string) => {
186+
const endpoint = oauthMetadata.introspection_endpoint;
187+
188+
if (!endpoint) {
189+
throw new Error('No token verification endpoint available in metadata');
190+
}
191+
192+
const response = await fetch(endpoint, {
193+
method: 'POST',
194+
headers: {
195+
'Content-Type': 'application/x-www-form-urlencoded',
196+
},
197+
body: new URLSearchParams({
198+
token: token
199+
}).toString()
200+
});
201+
202+
203+
if (!response.ok) {
204+
throw new Error(`Invalid or expired token: ${await response.text()}`);
205+
}
206+
207+
const data = await response.json();
208+
209+
// Convert the response to AuthInfo format
210+
return {
211+
token,
212+
clientId: data.client_id,
213+
scopes: data.scope ? data.scope.split(' ') : [],
214+
expiresAt: data.exp,
215+
};
216+
}
217+
}
188218
// Add metadata routes to the main MCP server
189219
app.use(mcpAuthMetadataRouter({
190220
oauthMetadata,
@@ -194,7 +224,7 @@ if (useOAuth) {
194224
}));
195225

196226
authMiddleware = requireBearerAuth({
197-
provider: remoteProvider,
227+
verifier: tokenVerifier,
198228
requiredScopes: ['mcp:tools'],
199229
resourceMetadataUrl: getOAuthProtectedResourceMetadataUrl(mcpServerUrl),
200230
});

src/server/auth/middleware/bearerAuth.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { RequestHandler } from "express";
22
import { InsufficientScopeError, InvalidTokenError, OAuthError, ServerError } from "../errors.js";
3-
import { OAuthServerProvider } from "../provider.js";
3+
import { OAuthTokenVerifier } from "../provider.js";
44
import { AuthInfo } from "../types.js";
55

66
export type BearerAuthMiddlewareOptions = {
77
/**
88
* A provider used to verify tokens.
99
*/
10-
provider: OAuthServerProvider;
10+
verifier: OAuthTokenVerifier;
1111

1212
/**
1313
* Optional scopes that the token must have.
@@ -37,7 +37,7 @@ declare module "express-serve-static-core" {
3737
* If resourceMetadataUrl is provided, it will be included in the WWW-Authenticate header
3838
* for 401 responses as per the OAuth 2.0 Protected Resource Metadata spec.
3939
*/
40-
export function requireBearerAuth({ provider, requiredScopes = [], resourceMetadataUrl }: BearerAuthMiddlewareOptions): RequestHandler {
40+
export function requireBearerAuth({ verifier, requiredScopes = [], resourceMetadataUrl }: BearerAuthMiddlewareOptions): RequestHandler {
4141
return async (req, res, next) => {
4242
try {
4343
const authHeader = req.headers.authorization;
@@ -50,7 +50,7 @@ export function requireBearerAuth({ provider, requiredScopes = [], resourceMetad
5050
throw new InvalidTokenError("Invalid Authorization header format, expected 'Bearer TOKEN'");
5151
}
5252

53-
const authInfo = await provider.verifyAccessToken(token);
53+
const authInfo = await verifier.verifyAccessToken(token);
5454

5555
// Check if token has the required scopes (if any)
5656
if (requiredScopes.length > 0) {
@@ -94,4 +94,4 @@ export function requireBearerAuth({ provider, requiredScopes = [], resourceMetad
9494
}
9595
}
9696
};
97-
}
97+
}

src/server/auth/provider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export interface OAuthServerProvider {
6969
/**
7070
* Slim implementation useful for token verification
7171
*/
72-
export interface TokenVerifier {
72+
export interface OAuthTokenVerifier {
7373
/**
7474
* Verifies an access token and returns information about it.
7575
*/

0 commit comments

Comments
 (0)