@dbx-工具/自动门
用更好的 Auth 创建平台中立的无密码运行时间, 电子邮件 一次性密码、密码、呼叫人提供的身份政策以及持续性 存储.
对于公共地道后面的 Databricks App, 请使用高级
authGate() 插件从 @dbx-tools/tunnel数字 :
import { server } from "@databricks/appkit";
import { appkit } from "@dbx-tools/appkit";
import { email } from "@dbx-tools/email";
import { authGate, tunnelInterceptor } from "@dbx-tools/tunnel";
await appkit.createApp({
plugins: [server(), email(), authGate({ allow: ["example.com"] })],
interceptor: tunnelInterceptor(),
});
此构成门只请求配置的公共隧道主机 . Databricks Apps 前门和本地开发主机继续使用 应用程序身份 .
创建直接的无密码运行时间
当您拥有 HTTP 路由、 身份政策 时直接使用此软件包 代码传送 :
import { auth, authStorage, type AuthEmailOptions } from "@dbx-tools/auth-gate";
async function deliverCode(email: string, code: string, options: AuthEmailOptions): Promise<void> {
const endpoint = process.env.CODE_DELIVERY_URL;
if (!endpoint) {
throw new Error("CODE_DELIVERY_URL is required");
}
const response = await fetch(endpoint, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ email, code, ...options }),
});
if (!response.ok) {
throw new Error(`Code delivery failed with status ${response.status}`);
}
}
const database = await authStorage.createAuthStorage({ storage: "sqlite" });
const secret = process.env.AUTH_SECRET;
if (!secret) {
throw new Error("AUTH_SECRET is required");
}
const runtime = await auth.createPasswordlessAuth({
storage: database,
baseURL: "http://localhost:8000",
trustedOrigins: ["https://overlay.example.com"],
appName: "My app",
passkeyNamePrefix: "My Company",
secret,
logoutRedirectPath: "/",
sessionTtlSeconds: 2_592_000,
codeTtlSeconds: 600,
maxAttempts: 5,
authorizeIdentity: (email) => email.endsWith("@example.com"),
sendCode: (email, code, options) => deliverCode(email, code, options),
});
挂载 runtime.handler(request) 下级 runtime.basePath,默认为
/api/auth启用 runtime.session(headers) 当应用程序需要时
已核实的电子邮件地址 。 打电话 runtime.close() 服务器关机时,请
存储适配器可以释放其资源.
选择直接或隧道集成
对通过 Databricks 输入的流量使用 AppKit 执行上下文 Apps前门。 前门提供平台身份 并且可以提供 半个字.
使用 @dbx-tools/tunnel 当 AppKit 应用程序也有公共 Portr 或
FRP出入口. 内容 authGate() 插件 :
- 按配置的隧道流量进行分类
Host头曰. - 在 AppKit 服务器上挂载登录和兼容路线 .
- 离开站台前门站及地道通车.
- 通过注册发送代码
@dbx-tools/email插件 . - 删除未信任的转发身份和符号头 .
- 输入已验证的隧道电子邮件作为请求身份 .
使用 @dbx-tools/auth-gate 直接用于另一个 HTTP 堆栈或路径
不需要隧道的分类 直接运行时间不挂载 AppKit
中间软件,前方身份头,或发射地道.
密码或电子邮件编码会话仅证明配置的身份 。 这个 不薄荷 数据砖在半个标志.
配置存储
更好的Auth存储用户、会话、检察官办公室、费率限制和密码。 存储罐 使用 AppKit Lakebase 池或本地 SQLite :
import { authStorage } from "@dbx-tools/auth-gate";
const sqlite = await authStorage.createAuthStorage({
storage: "sqlite",
sqlitePath: "./data/auth.sqlite",
});
storage: "auto" 除非您请求 SQLite ,否则您会使用一个提供Lakebase 池。 若为
SQLite 不可用自动模式, 运行时使用内存
适配器. 明确 storage: "sqlite" 设置失败而不是选择
记忆。 内部用户、检察官办公室、会话和密码在
进程退出.
在 Lakebase 或 a 的 PostgreSQL 咨询锁定下运行更好的 Auth 迁移 sQLite 的文件锁定.
使用兼容路线
POST <basePath>/logout 返回时 { ok, redirectTo }。 。 。 . GET 清除相同的
会话和有状态的重定向 303。重定向默认值为 / 已经
限于同源路径。 更好的 Auth 仅接受 baseURL 财务报告和审定财务报表
trustedOrigins拒绝任意请求来源或引用者。 内部a
数据砖 App, HTTPS *.databricksapps.com 来源自动被接受
为站台正门. WebAuthn 仍然使用配置 baseURL 东道主
其RPID和预期来源.
GET <basePath>/status 返回已核实的会话状态。 检察官办公室发送
校验使用 Better Auth 的本地电子邮件 OTP 路由
路径.
理解认证限制
authorizeIdentity运行普通小写电子邮件地址。 一个 未经授权的代码请求不能显示地址是否被允许.- 运行时间存储 OTP 值作为散列并限制代码尝试和请求 价格通过Better Auth.
baseURL确定安全的- cookie 行为, WebAuthn 依赖 party ID, 和预期的密码来源。 依赖方的ID是确切的主机名, 所以兄弟会的隧道主机使用 单独的密码。 配置外部浏览器 来源,而不是生产中的私人回回地址.passkeyNamePrefix控制在 WebAuthn 显示名 。 默认为appName。 。 。 .passkeys: false禁用 WebAuthn 路由并广告电子邮件 OTP 是唯一的 登录方法。 密码默认启用 .trustedOrigins扩展已接受的浏览器来源。 任意Origin财务报告和审定财务报表Referer价值观被拒绝.- 运行时间是认证边界, 不是 Databricks 授权 客户端。 下游 Databricks 的通话仍然需要 AppKit 或其他证书 来源.