本文介绍通过 Supabase 控制台和 Admin API 配置为应用配置企业微信(下文简称“企微”)登录的操作流程。
- 已创建使用 Supabase 引擎的 Workspace 且 Workspace 的状态为运行中。关于创建 Workspace 的更多详细信息,请参见创建 Workspace。
- 已获取 SUPABASE_BASE_URL、SERVICE_ROLE_KEY和 SUPABASE_ANON_KEY。关于获取变量的详细信息,请参见获取变量。
- 限制: 企微开放平台会强制校验“授权回调域名”的所有者,即在配置“授权回调域名”时,开发者必须在域名根目录下放置指定名称和内容的文件(具体请参考企微开启网页授权登录中“授权回调域名”相关章节)。因此,“授权回调域名”只能配置为开发者自己的域名,无法配置为 Supabase 的域名。
- 回调路由:由于上述限制,企微开放平台登录的 OAuth 回调路由只能是:企微开放平台 --(重定向)--> 开发者域名下的服务 Callback 接口 --(重定向)--> Supabase Callback 接口。并且,在重定向时,开发者域名下的 Callback 接口需要将回调请求的所有参数(包括 Query Parameters、Header、Body 等)透传给 Supabase Callback 接口。
- 支持的企微授权登录方式:Supabase 目前支持两种企微授权登录方式,这两种方式调用 signInWithOAuth 接口参数略有差异,开发者需要自行判断浏览器环境,并根据所处环境传入不同的参数值。可参考判断企微授权登录环境。
- PC 网站应用扫码授权登录,即企微开放平台-企微扫码应用授权登录。调用 signInWithOAuth 接口时需在 options 中指定 scopes 为 qr_connect。
参考企微开启网页授权登录中“授权回调域名”相关章节,配置您的回调域名。企微开放平台的回调域名必须是开发者名下的域名。 - 将回调域名的 Callback 接口 重定向到 Supabase Callback 接口。
参考企微开放平台的限制和回调路由的说明,您的回调域名的 Callback 接口需要实现到 Supabase Callback 接口的重定向功能。 Supabase 的 Callback URL 为 $SUPABASE_BASE_URL/auth/v1/callback,例如 https://br-xxxx.supabase.aidap-global.cn-beijing.volces.com/auth/v1/callback。
- 将火山 Supabase 的出口 IP 加入到企微应用后台的 IP 白名单中。
- 进入 Supabase 控制台后,您需要配置企微作为 OAuth 2.0 提供商,并填入相应的凭证。
- 进入页面 Authentication > Sign In / Providers > WeCom。勾选 Enable WeCom provider,并填入从企微后台管理的获取的 Corp ID 和 secret,以及 Callback URL。
说明
如果您的企微用户没有配置企业邮箱,请勾选 Allow users without an email。
- (可选)如果您需要使用扫码登录功能,则需要需额外配置 agentid。更多详细信息,请参见 Web 登录组件与术语介绍。
- 进入页面 Authentication > URL Configurations,将您的应用的 URL(登录成功后的跳转目标,精确到 path) 配置到 Redirect URLs 中。
-
-
- 修改配置的示例,其中 body 为上节表格中的 配置项 Key 和 配置项 Value 组成的 JSON Map
示例——通过 Supabase Client SDK 进行微信登录的示例
Supabase 提供了统一的 signInWithOAuth 方法来微信登录,但根据使用浏览器环境的不同,分为两种模式。
此场景适用于用户在企微客户端内部打开您的网页应用,单击登录时,会直接拉起微信授权界面。
实现方式:调用 signInWithOAuth 函数,需要将 provider 指定为 wecom。在 options 中无需显式指定 scopes 字段。
此场景适用于在 PC 浏览器中访问的独立网站。在用户选择企微登录后,页面会生成一个二维码,用户使用企微 APP 扫描该二维码后完成授权登录。
实现方式:调用 signInWithOAuth 函数时,除了将 provider 指定为 wecom 之外,还需要在 options 中指定 scopes 为 qr_connect。
最佳实践:自动判断浏览器环境确定企微授权登录参数
为了让您的应用同时支持上述两种“企微授权登录”场景,可以通过检测浏览器的 navigator.userAgent 里是否包含 wxwork 来判断当前的浏览器环境(参见下述 isWeComEmbeddedBrowser 函数),从而实现一套代码支持多场景登录。