# Extended Preferences 签名验证

> 安装和更新已签名的浏览器配置，保留可修改的应用数据，并处理无效或已到期的偏好文件。

Source: https://console.getchrovia.com/zh/docs/sdk-signed-extended-prefs

**能力：**`signedExtendedPrefs`。此能力要求提供有效的已签名 Extended Preferences 文件，不授权 `chrovia.prefs` 或具体配置功能，它们需要各自的能力。

## 获取匹配的文件

向 License 提供方确认该部署的已签名配置交付流程，并提供 License ID 和要使用的完整浏览器配置。如果尚未约定交付流程，请在启用此能力前联系 [Chrovia 支持](mailto:support@getchrovia.com)。浏览器没有用于签名文件的命令或 JavaScript 方法。

获取与 License 匹配的完整 `Extended Preferences` 文件。不要将一个文件的签名与另一个文件的配置拼接，也不要原样使用文档中的未签名示例。

## 安装与验证

1. 完全退出浏览器实例，包括关闭窗口后仍在运行的进程。
2. 备份实例当前的 `Extended Preferences` 文件。
3. 将收到的文件放入 `--user-data-dir` 指定的根目录，不是其中的 `Default` 子目录。保持原文件名，不带 `.json` 或 `.txt`。
4. 使用对应的 License 启动，检查配置的功能，例如实例标签。
5. 如果还拥有 `extendedPrefs`，可在 Provision Service Worker 中读取一个已知的应用字段。仅凭值不存在无法判断签名是否有问题，还应检查 License、文件位置、字段名和 API 上下文。

对于新实例，可以将文件放在 Provision 根目录作为默认配置。仅当实例没有 Extended Preferences 文件时才会复制。替换 Provision 默认文件不会更新已有实例。

## 修改配置或更新到期文件

将完整的新配置交给配置提供方，获取替换用的已签名文件。关闭实例后安装，再重启验证。文件到期，或更换 License 后需要使用不同的配置交付安排时，也应按此流程处理。

不要编辑已签发文件中的 `internal` 或配套的 `signature` 对象。本地编辑和 `prefs.set()` 调用不会更新签名。当前运行期间看似生效的修改，可能导致下次启动无法加载偏好。

## 保留可修改的应用数据

运行时需要修改的应用字段放在 `internal` 外，与它并列。例如，`my_plugin.ready` 可以独立于受保护的浏览器设置更新。替换文件时，如果应用仍需要这些字段，应保留它们。

已签名文件不是秘密保险箱。有文件访问权限的人和已授权的偏好调用者仍能读取内容。应限制访问，不要记录敏感值。

## 处理无效配置

已签名配置缺失、被修改、不匹配或到期时，会阻止**所有 Extended Preferences 读写**，包括 `internal` 外的应用字段。`prefs.get()` 可能返回 `undefined`，写入可能正常解析却不修改数据。这些方法不是签名状态 API。

核对文件名和实例目录，确认文件与 License 属于同一部署，并恢复未经修改的匹配文件。文件已到期或需要不同设置时，应获取替换文件，而不是编辑已签发文件。

软件通行密钥注册和登录可能更新受保护的凭据数据。如果将本地通行密钥与已签名偏好组合使用，应安排在下次启动前获取更新的已签名文件；仅备份凭据还不够。参见[软件认证器](https://console.getchrovia.com/zh/docs/sdk-software-authenticator)。

参见 [EP 存储与 API](https://console.getchrovia.com/zh/docs/sdk-extended-preferences) 和 [License 安装](https://console.getchrovia.com/zh/docs/sdk-license)。
