在Flutter Supabase中实现自定义OpenID(OIDC)提供商SSO方案咨询
实现Supabase Flutter自定义OIDC单点登录方案
1. 配置Supabase后台OIDC提供商
Supabase托管版后台无可视化OIDC配置入口,需通过环境变量添加自定义OIDC配置:
- 在Supabase项目设置的「环境变量」中添加以下内容(替换为你的OIDC提供商实际信息):
GOTRUE_EXTERNAL_OIDC_PROVIDERS='[{"id":"custom-oidc","name":"你的OIDC提供商名称","issuer":"https://你的OIDC颁发者地址","client_id":"你的客户端ID","secret":"你的客户端密钥","scopes":"openid profile email"}]' - 配置完成后,重启Supabase服务(自托管场景)或重新部署项目(托管版场景)使配置生效。
2. Flutter端登录逻辑实现
Supabase Flutter SDK支持通过自定义Provider发起OIDC登录,代码示例如下:
import 'package:supabase_flutter/supabase_flutter.dart'; final supabase = Supabase.instance.client; Future<void> signInWithCustomOIDC() async { try { await supabase.auth.signInWithOAuth( // 填写环境变量中设置的OIDC提供商id Provider.custom('custom-oidc'), // 替换为你的Flutter应用回调URL(需提前在OIDC提供商后台配置) redirectTo: 'io.supabase.flutter://callback', ); } catch (e) { print('OIDC登录失败: $e'); } }
3. 回调处理与用户信息获取
登录成功后,可通过以下方式获取用户数据:
void checkCurrentUser() { final user = supabase.auth.currentUser; if (user != null) { print('当前用户ID: ${user.id}'); print('OIDC用户元数据: ${user.userMetadata}'); } }
OIDC提供商返回的用户信息会存储在user.userMetadata中,可根据业务需求提取使用。
关键注意事项
- 需在OIDC提供商后台将Supabase回调URL(
https://<你的项目ID>.supabase.co/auth/v1/callback)和Flutter应用的scheme回调URL加入允许列表。 - 若托管版Supabase无法修改环境变量,建议采用自托管Supabase方案,以完全控制Gotrue服务配置。
- 测试阶段需确保OIDC提供商的issuer地址可被Supabase服务正常访问。
内容的提问来源于stack exchange,提问作者progNewbie
相关产品推荐
相关产品推荐

