使用Supabase、Flutter与Google OAuth:多端共用同一ClientId和ClientSecret可行吗?
关于Supabase+Flutter+Google OAuth跨平台共享Client ID/Secret的问题
结论:可以为iOS、Android和Web共享同一个Google OAuth Client ID,但Client Secret仅能在Supabase服务端配置,绝对不能在移动端暴露
具体配置方式:
Google Cloud Console侧:
- 创建或使用已有的OAuth 2.0客户端ID,在该客户端的配置页面中,添加多平台的校验信息:
- Web平台:将Supabase项目的认证回调URL(格式为
https://<你的项目ID>.supabase.co/auth/v1/callback)添加到「授权JavaScript来源」和「授权重定向URI」。 - iOS平台:添加你的App Bundle ID到「iOS应用」配置项,同时将上述Supabase回调URL加入重定向URI列表。
- Android平台:添加App的SHA-1指纹和包名到「Android应用」配置项,同样配置Supabase回调URL。
- Web平台:将Supabase项目的认证回调URL(格式为
- Google允许同一个OAuth客户端ID关联多个平台的配置,无需单独创建多个客户端。
- 创建或使用已有的OAuth 2.0客户端ID,在该客户端的配置页面中,添加多平台的校验信息:
Supabase控制台侧:
- 进入「Authentication」→「Providers」→「Google」页面。
- 填入共享的Client ID和对应的Client Secret(此Secret仅在Supabase服务端与Google通信时使用,不会暴露给前端/移动端)。
- 保存配置后,Flutter的iOS、Android、Web端都可以直接使用Supabase SDK的
signInWithOAuth(Provider.google)方法完成认证,无需各自单独配置认证参数。
关键安全提示:
- 禁止在iOS/Android的客户端代码中硬编码Client Secret,这会导致敏感信息泄露,引发账号安全风险。通过Supabase代理认证的方式,移动端完全不需要接触Secret。
- 务必确保Google Console中各平台的校验信息(如iOS的Bundle ID、Android的SHA-1)配置正确,否则会出现认证失败、回调被拦截等问题。
内容的提问来源于stack exchange,提问作者Andrea D'Attero
相关产品推荐
相关产品推荐

