You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:46:04