From a85b633ca0f09f810b104353679dae7d43865315 Mon Sep 17 00:00:00 2001 From: Owen Date: Tue, 27 Oct 2026 14:57:11 -0400 Subject: [PATCH] Include the resource in the cache --- server/routers/badger/verifySession.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/server/routers/badger/verifySession.ts b/server/routers/badger/verifySession.ts index 748164dc8..5d67fd1f1 100644 --- a/server/routers/badger/verifySession.ts +++ b/server/routers/badger/verifySession.ts @@ -720,7 +720,7 @@ export async function verifyResourceSession( ); if (resourceSessionToken) { - const sessionCacheKey = `session:${resourceSessionToken}`; + const sessionCacheKey = `session:${resource.resourceId}:${resourceSessionToken}`; let resourceSession: ResourceSession | null | undefined = localCache.get(sessionCacheKey); @@ -736,6 +736,14 @@ export async function verifyResourceSession( } } + // sessions are scoped to a single resource; never honor one issued for another + if ( + resourceSession && + resourceSession.resourceId !== resource.resourceId + ) { + resourceSession = null; + } + if (resourceSession?.isRequestToken) { logger.debug( "Resource not allowed because session is a temporary request token" @@ -1245,7 +1253,7 @@ async function allowAccessToken( ); if (resourceSessionToken) { - const sessionCacheKey = `session:${resourceSessionToken}`; + const sessionCacheKey = `session:${resource.resourceId}:${resourceSessionToken}`; let resourceSession: ResourceSession | null | undefined = localCache.get(sessionCacheKey); @@ -1262,6 +1270,7 @@ async function allowAccessToken( if ( resourceSession && + resourceSession.resourceId === resource.resourceId && !resourceSession.isRequestToken && resourceSession.accessTokenId === tokenItem.accessTokenId ) {