Skip to content

Commit 7d6b1b2

Browse files
fix: strip oauth resource in local token exchange
Remove the resource parameter from local /oauth/token form requests so DB API audience validation does not break the workshop flow with MCP clients. Closes #9. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 6a84430 commit 7d6b1b2

File tree

1 file changed

+25
-2
lines changed
  • epicshop/epic-me/workers

1 file changed

+25
-2
lines changed

epicshop/epic-me/workers/app.ts

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,28 @@ const oauthProvider = new OAuthProvider({
3636
],
3737
})
3838

39+
/**
40+
* Local dev compatibility:
41+
* MCP clients may include `resource` in token requests, which can produce
42+
* audience-bound tokens that fail DB API checks in this workshop setup.
43+
*/
44+
async function stripResourceFromTokenRequest(request: Request): Promise<Request> {
45+
const url = new URL(request.url)
46+
const isTokenEndpoint =
47+
url.pathname === '/oauth/token' && request.method === 'POST'
48+
if (!isTokenEndpoint) return request
49+
50+
const contentType = request.headers.get('content-type') ?? ''
51+
if (!contentType.includes('application/x-www-form-urlencoded')) return request
52+
53+
const body = await request.text()
54+
const params = new URLSearchParams(body)
55+
if (!params.has('resource')) return request
56+
57+
params.delete('resource')
58+
return new Request(request, { body: params.toString() })
59+
}
60+
3961
export default {
4062
fetch: withCors({
4163
getCorsHeaders: (request) => {
@@ -47,8 +69,9 @@ export default {
4769
}
4870
}
4971
},
50-
handler: (request: Request, env: Env, ctx: ExecutionContext) => {
51-
return oauthProvider.fetch(request, env, ctx)
72+
handler: async (request: Request, env: Env, ctx: ExecutionContext) => {
73+
const cleanRequest = await stripResourceFromTokenRequest(request)
74+
return oauthProvider.fetch(cleanRequest, env, ctx)
5275
},
5376
}),
5477
} satisfies ExportedHandler<Env>

0 commit comments

Comments
 (0)