功能
Tauri 为应用和插件开发者提供了一个功能系统,用于细粒度地启用和约束系统WebView中运行的应用前端对核心的访问。
功能是一组与其各自的标签关联的权限,映射到应用窗口和WebView上。功能可以影响多个窗口和WebView,这些可以在多个功能中引用。
功能文件被定义为一个JSON或TOML文件,位于src-tauri/capabilities
目录中。
良好的实践是使用个别文件,并且只通过标识符在tauri.conf.json
中引用它们,但也可以直接在capabilities
域中定义它们。
默认情况下,capabilities
目录中的所有功能都自动启用。一旦在tauri.conf.json
中显式启用了功能,则只有在应用构建中使用这些功能。
有关配置方案的完整参考,请参阅参考部分。
以下示例JSON定义了一个功能,该功能启用了核心插件和window.setTitle
API的默认功能。
{ "$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
目录中定义良好的功能文件。
{ "app": { "security": { "capabilities": ["my-capability", "main-capability"] } }}
内联功能可以与预定义功能混合。
{ "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
数组使功能特定于平台。默认情况下,功能适用于所有目标,但可以选择linux
、macOS
、windows
、iOS
和android
目标的一个子集。
例如,为桌面操作系统设置的功能。注意,它启用了仅在桌面上可用的插件的权限
{ "$schema": "./schemas/desktop-schema.json", "identifier": "desktop-capability", "windows": ["main"], "platforms": ["linux", "macOS", "windows"], "permissions": ["global-shortcut:allow-register"]}
另一个为移动设备设置的功能示例。注意,它启用了仅在移动设备上可用的插件的权限
{ "$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标签和使用条形码扫描器。
{ "$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