diff --git a/apps/backend/src/app/api/latest/auth/oauth/callback/[provider_id]/route.tsx b/apps/backend/src/app/api/latest/auth/oauth/callback/[provider_id]/route.tsx index 3e7613c3b..c0ccd9c4b 100644 --- a/apps/backend/src/app/api/latest/auth/oauth/callback/[provider_id]/route.tsx +++ b/apps/backend/src/app/api/latest/auth/oauth/callback/[provider_id]/route.tsx @@ -168,6 +168,7 @@ const handler = createSmartRouteHandler({ callbackResult = await providerObj.getCallback({ codeVerifier: innerCodeVerifier, state: innerState, + extraScope: providerScope, callbackParams: { ...query, ...body, diff --git a/apps/backend/src/oauth/providers/base.tsx b/apps/backend/src/oauth/providers/base.tsx index a75fb67fb..f27140ec3 100644 --- a/apps/backend/src/oauth/providers/base.tsx +++ b/apps/backend/src/oauth/providers/base.tsx @@ -386,6 +386,7 @@ export abstract class OAuthBaseProvider { callbackParams: CallbackParamsType, codeVerifier: string, state: string, + extraScope?: string, }): Promise<{ userInfo: OAuthUserInfo, tokenSet: TokenSet }> { let tokenSet; const callbackParams = { ...options.callbackParams }; @@ -410,11 +411,17 @@ export abstract class OAuthBaseProvider { }, ] as const; + const callbackExtras = { + exchangeBody: { + scope: mergeScopeStrings(this.scope, options.extraScope ?? ""), + }, + }; + try { if (this.openid) { - tokenSet = await this.oauthClient.callback(...params); + tokenSet = await this.oauthClient.callback(...params, callbackExtras); } else { - tokenSet = await this.oauthClient.oauthCallback(...params); + tokenSet = await this.oauthClient.oauthCallback(...params, callbackExtras); } } catch (error: any) { if (error?.error === "invalid_grant" || error?.error?.error === "invalid_grant") {