跳转到内容
Tauri

功能

Tauri 为应用和插件开发者提供了一个功能系统,用于细粒度地启用和约束系统WebView中运行的应用前端对核心的访问。

功能是一组与其各自的标签关联的权限,映射到应用窗口和WebView上。功能可以影响多个窗口和WebView,这些可以在多个功能中引用。

功能文件被定义为一个JSON或TOML文件,位于src-tauri/capabilities目录中。

良好的实践是使用个别文件,并且只通过标识符在tauri.conf.json中引用它们,但也可以直接在capabilities域中定义它们。

默认情况下,capabilities目录中的所有功能都自动启用。一旦在tauri.conf.json中显式启用了功能,则只有在应用构建中使用这些功能。

有关配置方案的完整参考,请参阅参考部分。

以下示例JSON定义了一个功能,该功能启用了核心插件和window.setTitle API的默认功能。

src-tauri/capabilities/default.json
{
"$schema": "./schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"core:path:default",
"core:event:default",
"core:window:default",
"core:app:default",
"core:resources:default",
"core:menu:default",
"core:tray:default",
"core:window:allow-set-title"
]
}

这些代码段是Tauri配置文件的一部分。

这可能是最常用的配置方法,其中个别功能内联,并且仅通过标识符引用权限。

这需要在capabilities目录中定义良好的功能文件。

src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": ["my-capability", "main-capability"]
}
}
}

内联功能可以与预定义功能混合。

src-tauri/tauri.conf.json
{
"app": {
"security": {
"capabilities": [
{
"identifier": "my-capability",
"description": "My application capability used for all windows",
"windows": ["*"],
"permissions": ["fs:default", "allow-home-read-extended"]
},
"my-second-capability"
]
}
}
}

目标平台

可以通过定义platforms数组使功能特定于平台。默认情况下,功能适用于所有目标,但可以选择linuxmacOSwindowsiOSandroid目标的一个子集。

例如,为桌面操作系统设置的功能。注意,它启用了仅在桌面上可用的插件的权限

src-tauri/capabilities/desktop.json
{
"$schema": "./schemas/desktop-schema.json",
"identifier": "desktop-capability",
"windows": ["main"],
"platforms": ["linux", "macOS", "windows"],
"permissions": ["global-shortcut:allow-register"]
}

另一个为移动设备设置的功能示例。注意,它启用了仅在移动设备上可用的插件的权限

src-tauri/capabilities/mobile.json
{
"$schema": "./schemas/mobile-schema.json",
"identifier": "mobile-capability",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": [
"nfc:allow-scan",
"biometric:allow-authenticate",
"barcode-scanner:allow-scan"
]
}

远程 API 访问

默认情况下,API仅对Tauri应用的捆绑代码可访问。为了允许远程源访问某些Tauri命令,可以在功能配置文件中定义此操作。

此示例允许从tauri.app的所有子域名中扫描NFC标签和使用条形码扫描器。

src-tauri/capabilities/remote-tags.json
{
"$schema": "./schemas/remote-schema.json",
"identifier": "remote-tag-capability",
"windows": ["main"],
"remote": {
"urls": ["https://*.tauri.app"]
},
"platforms": ["iOS", "android"],
"permissions": ["nfc:allow-scan", "barcode-scanner:allow-scan"]
}

安全边界

它保护什么?

根据权限和能力,它可以

  • 最小化前端泄露的影响
  • 防止或减少(意外的)本地系统界面和数据泄露
  • 防止或减少前端到后端/系统的权限提升可能性

它无法防止什么?

  • 恶意或不安全的Rust代码
  • 过于宽松的范围和配置
  • 命令实现中的范围检查错误
  • 从Rust代码中意图绕过
  • 基本上是任何在应用Rust核心中编写的代码
  • 系统WebView中的0-day或未打补丁的1-day
  • 供应链攻击或开发者系统被破坏

Schema 文件

Tauri生成一个包含所有可用权限的JSON模式,以便您在IDE中自动完成。要使用该模式,将$schema属性设置为gen/schemas目录内的一个模式,这些模式是平台特定的。通常,您会将其设置为../gen/schemas/desktop-schema.json../gen/schemas/mobile-schema.json,尽管您也可以为特定目标平台定义一个能力。

配置文件

示例Tauri应用程序目录结构的简化示例

终端窗口
tauri-app
├── index.html
├── package.json
├── src
├── src-tauri
├── Cargo.toml
├── capabilities
└── <identifier>.json/toml
├── src
├── tauri.conf.json

所有内容都可以内联到tauri.conf.json中,但即使是稍微复杂一些的配置也会使此文件膨胀,此方法的目的是在可能的情况下抽象权限并使其易于理解。

核心权限

所有核心权限的列表可以在核心权限页面找到。


© 2025 Tauri贡献者。CC-BY / MIT