diff --git a/server/core/lib/auth/external-auth.ts b/server/core/lib/auth/external-auth.ts index 35fecb860cd..284453cb4b1 100644 --- a/server/core/lib/auth/external-auth.ts +++ b/server/core/lib/auth/external-auth.ts @@ -45,7 +45,7 @@ async function onExternalUserAuthenticated (options: { return } - const { res, externalRedirectUri } = authResult + const { res, externalRedirectUri, returnJsonNoRedirect } = authResult if (!isAuthResultValid(npmName, authName, authResult)) { res.redirect('/login?externalAuthError=true') @@ -76,7 +76,9 @@ async function onExternalUserAuthenticated (options: { } } - if (externalRedirectUri) { + if(returnJsonNoRedirect) { + res.status(200).json({ externalAuthToken: bypassToken, username: user.username }) + } else if (externalRedirectUri) { const url = new URL(externalRedirectUri) url.searchParams.set('externalAuthToken', bypassToken) url.searchParams.set('username', user.username) diff --git a/server/core/types/plugins/register-server-auth.model.ts b/server/core/types/plugins/register-server-auth.model.ts index e358f270a14..c93c39debd9 100644 --- a/server/core/types/plugins/register-server-auth.model.ts +++ b/server/core/types/plugins/register-server-auth.model.ts @@ -35,6 +35,8 @@ export interface RegisterServerExternalAuthenticatedResult extends RegisterServe res: express.Response // Redirect the user to this external URI after the external auth has been verified. externalRedirectUri?: string + // Respond with a 200 OK and JSON body instead of redirecting, to allow API access. + returnJsonNoRedirect?: boolean } interface RegisterServerAuthBase {