Production getOAuthToken() Returns gsmtestuser@marketplacetest.net Instead of Effective User

62 views
Skip to first unread message

D

unread,
Sep 28, 2025, 12:40:10 PMSep 28
to Google Apps Script Community

Hi,

I built a GAS that, after installation, exchanges the OAuth token of the effective user with my backend using ScriptApp.getOAuthToken(). 

This process automatically registers the user if they haven’t been registered yet (or updates their token if they have). 

It worked well for me in development, but in production, when I call getOAuthToken(), the result is tied to gsmte...@marketplacetest.net with a different user ID, instead of the effective user. 

Why is it happening? Does exchanging tokens from the GAS to your backend with getOAuthToken is a best practice ?

D

unread,
Sep 28, 2025, 1:51:34 PMSep 28
to Google Apps Script Community

Andrew Apell

unread,
Nov 18, 2025, 2:50:49 AM (12 days ago) Nov 18
to Google Apps Script Community
Sending GAS tokens to your backend works for lightweight calls, but it is not considered best practice for production projects. The best approach is to manage OAuth entirely on the backend or use a service account for server-to-server calls.

Kildere S Irineu

unread,
Nov 18, 2025, 9:59:07 AM (12 days ago) Nov 18
to google-apps-sc...@googlegroups.com

Esse comportamento ocorre porque quando um complemento do Google Workspace (como um Add-on publicado na Marketplace) é instalado e executado por um usuário, as chamadas ao ScriptApp.getOAuthToken() podem não refletir o usuário real (effective user), mas sim o usuário de serviço do ambiente de teste — como no caso citado, gsmte...@marketplacetest.net.

Por que isso acontece?

  1. Ambiente de teste da Marketplace: Durante a publicação e testes de complementos na Marketplace, o ambiente utiliza uma conta de teste (marketplacetest.net), que pode interferir na identificação do usuário real ao chamar getOAuthToken().

  2. Execução com escopo incorreto: Se o script estiver rodando como o usuário de instalação, e não como o usuário atual, o token obtido pode estar vinculado a essa identidade genérica.

  3. Limitações de escopo ou do modelo de autorização: Alguns serviços (como ScriptApp.getOAuthToken()) podem retornar um token limitado que não é adequado para backend OAuth exchanges — especialmente se não forem incluídos os escopos apropriados no manifesto do complemento.


É uma boa prática usar ScriptApp.getOAuthToken() para backends?

Não. Não é recomendada a troca de tokens obtidos com getOAuthToken() diretamente com o backend em ambientes de produção. Isso por alguns motivos:

  • Segurança: Esses tokens são temporários e têm escopos limitados.

  • Validade: O backend precisa validar tokens e usá-los para identificar o usuário, o que nem sempre é confiável via Apps Script.

  • Desacoplamento: Um design robusto deve gerenciar autenticação e autorização via OAuth diretamente no backend, ou então usar uma conta de serviço para chamadas server-to-server.


Alternativas recomendadas:

  1. Service Account (para chamadas sem usuário):
    Use uma conta de serviço com delegação para operar com privilégios específicos no backend.

  2. OAuth direto no Backend:
    Realize o fluxo OAuth completo no seu backend (com consentimento do usuário via URL e callback) e armazene tokens de acesso/refresh ali.

  3. Add-on com escopos corretos e Session.getActiveUser().getEmail():
    Se for necessário identificar o usuário, use Session.getActiveUser().getEmail() (com escopo adequado e em domínio gerenciado).


Resumo:

  • O uso de getOAuthToken() em produção para backend não é uma prática recomendada.

  • O comportamento com marketplacetest.net é esperado em testes da Marketplace.

  • A melhor abordagem é fazer a autenticação completa no backend, ou utilizar service accounts para chamadas seguras e consistentes.


--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/ced24624-67d3-4fd8-b879-7a733575769fn%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages