Não conheço o suficiente de sua stack ou caso de uso, mas acho que já resolvi um problema semelhante antes, e algumas ideias podem ser úteis para você.
Tenho um aplicativo Next.js onde preciso que o lado do cliente tenha um JWT válido para fazer chamadas à minha API de backend se houver uma sessão do Discourse.
Para isso, uso Discourse como meu provedor de identidade através do DiscourseConnect.
No meu caso, estou fazendo isso com uma única chamada fetch do lado do cliente com { credentials: "include" }, o que só funciona porque tenho tudo configurado com um único domínio e a chamada fetch segue transparentemente os redirecionamentos.
Meu cliente busca um /auth/token personalizado, que verifica a existência de _t (apenas para evitar um redirecionamento inútil, caso contrário) e retorna um redirecionamento para uma URL /session/sso_provider protegida, construída seguindo a documentação no tópico vinculado, com nonce/sso/sig, e um return_sso_url apontando para um /auth/callback personalizado, que extrairá os dados enviados pelo Discourse, construirá e retornará um token JWT que meu cliente poderá usar a partir desse momento.
Acredito que seu caso de uso possa ser resolvido de maneira semelhante.