Skip to content

Commit

Permalink
validation of scope parameter in GET /authorize endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
ldgit committed Aug 29, 2024
1 parent 888e86e commit 74ed401
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
15 changes: 15 additions & 0 deletions e2e/oauth2.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,21 @@ const validPKCEChallenge = "B3b_JHueqI6LBp_WhuR7NfViLSgGVeXBpfpEMjoSdok";
invalidQueryString: `response_type=code&scope=basic-info&state=validState&code_challenge=${validPKCEChallenge}&code_challenge_method=S256&response_type=code`,
expectedError: "invalid_request",
},
{
description: "invalid scope",
invalidQueryString: `response_type=code&scope=full-info&state=validState&code_challenge=${validPKCEChallenge}&code_challenge_method=S256`,
expectedError: "invalid_scope",
},
{
description: "missing scope",
invalidQueryString: `response_type=code&state=validState&code_challenge=${validPKCEChallenge}&code_challenge_method=S256`,
expectedError: "invalid_request",
},
{
description: "duplicate scope",
invalidQueryString: `response_type=code&scope=basic-info&state=validState&code_challenge=${validPKCEChallenge}&code_challenge_method=S256&scope=basic-info`,
expectedError: "invalid_request",
},
].forEach(({ description, invalidQueryString, expectedError }) => {
test(`/authorize endpoint should redirect back with ${expectedError} error in case of ${description} (${invalidQueryString})`, async ({
page,
Expand Down
10 changes: 10 additions & 0 deletions routes/frontend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,16 @@ export default async function frontend(fastify: FastifyInstance) {
return reply.redirect(newRedirectUri);
}

if(request.query.scope !== "basic-info") {
const newRedirectUri = attachErrorInformationToRedirectUri(
request.query.redirect_uri,
request.query.state,
!request.query.scope || typeof request.query.scope === 'object' ? "invalid_request" : "invalid_scope",
);

return reply.redirect(newRedirectUri);
}

if (!(await isUserSignedIn(request))) {
return reply.redirect(`/login?${querystring.stringify(request.query)}`);
}
Expand Down

0 comments on commit 74ed401

Please sign in to comment.