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

Supabase API是否支持Basic Authorization授权头认证?

Supabase API支持Basic Authorization头吗?

Supabase的原生API(REST、Storage等)默认不支持Basic Authorization头认证,它主要采用apikey请求头或Authorization: Bearer <JWT>的认证方式。不过你可以通过两种方案解决第三方Webhook的兼容问题:

方案一:用Supabase Edge Functions做中间层(推荐)

这是最灵活易维护的方案,适合大多数场景。你可以编写一个Edge Function,先处理第三方系统的Basic Auth验证,再用Supabase的服务角色密钥调用API存储数据。

示例代码(TypeScript):

import { serve } from "https://deno.land/std@0.168.0/http/server.ts";
import { createClient } from "https://esm.sh/@supabase/supabase-js@2";

serve(async (req) => {
  // 提取并解析Basic Auth凭证
  const authHeader = req.headers.get("Authorization");
  if (!authHeader || !authHeader.startsWith("Basic ")) {
    return new Response("Unauthorized", { status: 401 });
  }
  const [username, password] = atob(authHeader.slice(6)).split(":");
  
  // 验证预设的凭证
  if (username !== "your-custom-username" || password !== "your-custom-password") {
    return new Response("Unauthorized", { status: 401 });
  }

  // 初始化Supabase服务端客户端
  const supabase = createClient(
    Deno.env.get("SUPABASE_URL")!,
    Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!
  );

  // 处理Webhook数据并存入数据库
  const webhookData = await req.json();
  const { data, error } = await supabase
    .from("webhook_events")
    .insert([webhookData]);

  if (error) {
    return new Response(JSON.stringify(error), { status: 500 });
  }

  return new Response(JSON.stringify({ success: true, data }), { status: 200 });
});

部署该函数后,将第三方系统的Webhook地址指向这个Edge Function的URL即可。

方案二:自定义PostgREST认证(适合有PostgreSQL经验的用户)

通过在PostgreSQL中编写自定义认证函数,让Supabase的REST API直接支持Basic Auth:

  • 创建存储认证凭证的表(如webhook_auth_users),存储用户名和加密后的密码
  • 编写PL/pgSQL函数,解析Basic Auth头、验证凭证,并返回有效角色或JWT
  • 通过Supabase Dashboard的SQL编辑器配置PostgREST,将该函数设为自定义认证函数

这种方式无需中间层,但需要熟悉PostgreSQL和PostgREST的配置逻辑,复杂度较高。

内容的提问来源于stack exchange,提问作者Aidal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:42:05