Skip to content

Commit 5f6787b

Browse files
committed
fix: added stateKey per Authentication target
1 parent afd64bb commit 5f6787b

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

server/plugins/auth-utils.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ async function authUtilsPlugin(fastify) {
7777
};
7878
});
7979

80-
fastify.decorate('prepareOidcLoginRedirect', (request, oidcConfig, authorizationEndpoint) => {
80+
fastify.decorate('prepareOidcLoginRedirect', (request, oidcConfig, authorizationEndpoint, stateKey) => {
81+
if (stateKey === undefined) {
82+
stateKey = 'oauthState';
83+
}
8184
request.log.info('Preparing OIDC login redirect.');
8285

8386
const { redirectTo } = request.query;
@@ -93,7 +96,7 @@ async function authUtilsPlugin(fastify) {
9396
const codeVerifier = crypto.randomBytes(32).toString('base64url');
9497
const codeChallenge = crypto.createHash('sha256').update(codeVerifier).digest('base64url');
9598

96-
request.encryptedSession.set('oauthState', state);
99+
request.encryptedSession.set(stateKey, state);
97100
request.encryptedSession.set('codeVerifier', codeVerifier);
98101
request.log.info(
99102
{
@@ -117,7 +120,10 @@ async function authUtilsPlugin(fastify) {
117120
return url.toString();
118121
});
119122

120-
fastify.decorate('handleOidcCallback', async (request, oidcConfig, tokenEndpoint) => {
123+
fastify.decorate('handleOidcCallback', async (request, oidcConfig, tokenEndpoint, stateKey) => {
124+
if (stateKey === undefined) {
125+
stateKey = 'oauthState';
126+
}
121127
request.log.info('Handling OIDC callback to retrieve the tokens.');
122128

123129
const { clientId, redirectUri } = oidcConfig;
@@ -127,7 +133,7 @@ async function authUtilsPlugin(fastify) {
127133
request.log.error('Missing authorization code in callback.');
128134
throw new AuthenticationError('Missing code in callback.');
129135
}
130-
if (state !== request.encryptedSession.get('oauthState')) {
136+
if (state !== request.encryptedSession.get(stateKey)) {
131137
request.log.error('Invalid state in callback.');
132138
throw new AuthenticationError('Invalid state in callback.');
133139
}

server/routes/auth-mcp.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import fp from 'fastify-plugin';
22
import { AuthenticationError } from '../plugins/auth-utils.js';
33

4+
const stateSessionKey = 'oauthStateMCP';
5+
46
async function authPlugin(fastify) {
57
const { OIDC_ISSUER, OIDC_CLIENT_ID_MCP, OIDC_REDIRECT_URI, OIDC_SCOPES, POST_LOGIN_REDIRECT } = fastify.config;
68

@@ -18,6 +20,7 @@ async function authPlugin(fastify) {
1820
scopes: OIDC_SCOPES,
1921
},
2022
mcpIssuerConfiguration.authorizationEndpoint,
23+
stateSessionKey,
2124
);
2225

2326
return reply.redirect(redirectUri);
@@ -32,6 +35,7 @@ async function authPlugin(fastify) {
3235
redirectUri: OIDC_REDIRECT_URI,
3336
},
3437
mcpIssuerConfiguration.tokenEndpoint,
38+
stateSessionKey,
3539
);
3640

3741
req.encryptedSession.set('mcp_accessToken', callbackResult.accessToken);

server/routes/auth-onboarding.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import fp from 'fastify-plugin';
22
import { AuthenticationError } from '../plugins/auth-utils.js';
33

4+
const stateSessionKey = 'oauthStateOnboarding';
5+
46
async function authPlugin(fastify) {
57
const { OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_REDIRECT_URI, OIDC_SCOPES, POST_LOGIN_REDIRECT } = fastify.config;
68

@@ -17,6 +19,7 @@ async function authPlugin(fastify) {
1719
scopes: OIDC_SCOPES,
1820
},
1921
issuerConfiguration.authorizationEndpoint,
22+
stateSessionKey,
2023
);
2124

2225
return reply.redirect(redirectUri);
@@ -31,6 +34,7 @@ async function authPlugin(fastify) {
3134
redirectUri: OIDC_REDIRECT_URI,
3235
},
3336
issuerConfiguration.tokenEndpoint,
37+
stateSessionKey,
3438
);
3539

3640
req.encryptedSession.set('onboarding_accessToken', callbackResult.accessToken);

0 commit comments

Comments
 (0)